Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ros1-fix-firmware-flashing #46

Merged
merged 5 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .github/workflows/build-docker-image-gazebo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@ on:
# - 'ros1'
pull_request:
types: [closed]

jobs:
build:
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
include:
- ros-distro: melodic
- ros-distro: noetic

steps:
Expand All @@ -23,19 +22,19 @@ jobs:

- name: Set up QEMU
uses: docker/setup-qemu-action@v1

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
with:
version: latest

- name: Login to Docker Registry
uses: docker/login-action@v1
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push (production)
if: github.ref_name == 'ros1'
uses: docker/build-push-action@v2
Expand All @@ -62,4 +61,4 @@ jobs:
ROS_DISTRO=${{ matrix.ros-distro }}
tags: husarion/rosbot:${{ matrix.ros-distro }}-simulation-${{ github.head_ref || github.ref_name }}
cache-from: type=registry,ref=husarion/rosbot:${{ matrix.ros-distro }}-simulation-${{ github.head_ref || github.ref_name }}
cache-to: type=inline
cache-to: type=inline
20 changes: 8 additions & 12 deletions .github/workflows/build-docker-image-hardware.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
workflow_dispatch:
pull_request:
types: [closed]

jobs:
build:
runs-on: ubuntu-20.04
Expand All @@ -16,12 +16,10 @@ jobs:
matrix:
include:
- ros-distro: melodic
ros-noetic-msgs: 0
rosbot-fw-release: 0.16.1
rosbot-fw-release: 0.16.2
platforms: "linux/amd64, linux/arm64, linux/arm/v7"
- ros-distro: noetic
ros-noetic-msgs: 1
rosbot-fw-release: 0.16.1
rosbot-fw-release: 0.16.2
platforms: "linux/amd64, linux/arm64"

steps:
Expand All @@ -30,19 +28,19 @@ jobs:

- name: Set up QEMU
uses: docker/setup-qemu-action@v1

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
with:
version: latest

- name: Login to Docker Registry
uses: docker/login-action@v1
with:
registry: docker.io
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push (production)
if: github.ref_name == 'ros1'
uses: docker/build-push-action@v2
Expand All @@ -53,9 +51,8 @@ jobs:
push: true
build-args: |
ROS_DISTRO=${{ matrix.ros-distro }}
ROS_NOETIC_MSGS=${{ matrix.ros-noetic-msgs }}
ROSBOT_FW_RELEASE=${{ matrix.rosbot-fw-release }}
tags: husarion/rosbot:${{ matrix.ros-distro }}
tags: husarion/rosbot:${{ matrix.ros-distro }}
cache-from: type=registry,ref=husarion/rosbot:${{ matrix.ros-distro }}
cache-to: type=inline

Expand All @@ -69,8 +66,7 @@ jobs:
push: true
build-args: |
ROS_DISTRO=${{ matrix.ros-distro }}
ROS_NOETIC_MSGS=${{ matrix.ros-noetic-msgs }}
ROSBOT_FW_RELEASE=${{ matrix.rosbot-fw-release }}
tags: husarion/rosbot:${{ matrix.ros-distro }}-${{ github.head_ref || github.ref_name }}
cache-from: type=registry,ref=husarion/rosbot:${{ matrix.ros-distro }}-${{ github.head_ref || github.ref_name }}
cache-to: type=inline
cache-to: type=inline
101 changes: 16 additions & 85 deletions Dockerfile.hardware
Original file line number Diff line number Diff line change
@@ -1,88 +1,15 @@

ARG ROS_DISTRO=melodic

## ============================ STM32FLASH =================================
# stm32flash needs an older version of glibc (2.28), which is why ubuntu 18.04 was used
FROM ubuntu:18.04 AS stm32flash_builder

# official releases are only for intel archs, so we need to build stm32flash from sources
RUN apt-get update && apt-get install -y \
git \
build-essential && \
git clone https://github.com/stm32duino/stm32flash.git && \
cd stm32flash/ && \
make all

## =========================== STM32 firmware===============================
# FROM --platform=linux/amd64 ubuntu:18.04 as stm32_firmware_builder
# TODO: wget from releases instead
FROM --platform=linux/amd64 ubuntu:20.04 AS stm32_firmware_builder

ARG ROSBOT_FW_RELEASE=0.16.1
ARG ROS_NOETIC_MSGS=0

SHELL ["/bin/bash", "-c"]

# ENV PIO_VERSION="5.1.0"
RUN apt update && apt install -y \
python3 \
python3-pip \
git \
wget \
tree

# https://docs.platformio.org/en/latest/core/installation.html#system-requirements
# RUN pip3 install -U platformio==${PIO_VERSION}
RUN pip3 install -U platformio

RUN git clone https://github.com/husarion/rosbot-stm32-firmware.git --branch ${ROSBOT_FW_RELEASE} && \
mkdir -p ~/.platformio/packages/framework-mbed/features/ && \
cp rosbot-stm32-firmware/.mbedignore ~/.platformio/packages/framework-mbed/features/.mbedignore

WORKDIR /rosbot-stm32-firmware

RUN git submodule update --init --recursive

# RUN wget https://github.com/husarion/rosbot-stm32-firmware/archive/refs/tags/${ROSBOT_FW_RELEASE}.tar.gz && \
# tar -xf *.tar.gz && \
# mv rosbot-stm32-firmware* rosbot-stm32-firmware && \
# mkdir -p ~/.platformio/packages/framework-mbed/features/ && \
# cp rosbot-stm32-firmware/.mbedignore ~/.platformio/packages/framework-mbed/features/.mbedignore

WORKDIR /rosbot-stm32-firmware

RUN export LC_ALL=C.UTF-8 && \
export LANG=C.UTF-8 && \
pio project init -e core2_diff -O \
"build_flags= \
-I\$PROJECTSRC_DIR/TARGET_CORE2 \
-DPIO_FRAMEWORK_MBED_RTOS_PRESENT \
-DPIO_FRAMEWORK_EVENT_QUEUE_PRESENT \
-DMBED_BUILD_PROFILE_RELEASE \
-DJOINT_STATES_ENABLE=1 \
-DROS_NOETIC_MSGS=${ROS_NOETIC_MSGS} \
-DKINEMATIC_TYPE=0" && \
pio project init -e core2_mec -O \
"build_flags= \
-I\$PROJECTSRC_DIR/TARGET_CORE2 \
-DPIO_FRAMEWORK_MBED_RTOS_PRESENT \
-DPIO_FRAMEWORK_EVENT_QUEUE_PRESENT \
-DMBED_BUILD_PROFILE_RELEASE \
-DJOINT_STATES_ENABLE=1 \
-DROS_NOETIC_MSGS=${ROS_NOETIC_MSGS} \
-DKINEMATIC_TYPE=1" && \
pio run
ARG ROS_DISTRO=noetic
ARG ROSBOT_FW_RELEASE=0.16.2

## =========================== ROS package builder ===============================

FROM ros:$ROS_DISTRO-ros-core AS pkg-builder

SHELL ["/bin/bash", "-c"]

RUN apt update && apt install -y \
git \
python3-pip \
ros-$ROS_DISTRO-rosserial-python \
ros-$ROS_DISTRO-rosserial-python \
ros-$ROS_DISTRO-rosserial-server \
ros-$ROS_DISTRO-rosserial-client \
ros-$ROS_DISTRO-rosserial-msgs \
Expand All @@ -105,21 +32,25 @@ WORKDIR /ros_ws
# clone robot github repositories
RUN mkdir -p src && \
git clone https://github.com/husarion/rosbot_ros.git --branch=melodic src/rosbot_ros && \
git clone https://github.com/husarion/rosbot_ekf.git --branch=master src/rosbot_ekf
git clone https://github.com/husarion/rosbot_ekf.git --branch=master src/rosbot_ekf

# build ROS workspace
RUN source /opt/ros/$ROS_DISTRO/setup.bash && \
catkin_make -DCATKIN_ENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Release

## =========================== ROS image ===============================

FROM ros:$ROS_DISTRO-ros-core
## =========================== Final Stage ===============================
FROM ros:$ROS_DISTRO-ros-core

ARG ROSBOT_FW_RELEASE

SHELL ["/bin/bash", "-c"]

RUN apt update && apt install -y \
curl \
python3-pip \
ros-$ROS_DISTRO-rosserial-python \
stm32flash \
ros-$ROS_DISTRO-rosserial-python \
ros-$ROS_DISTRO-rosserial-server \
ros-$ROS_DISTRO-rosserial-client \
ros-$ROS_DISTRO-rosserial-msgs \
Expand All @@ -140,10 +71,10 @@ RUN apt update && apt install -y \
# copy ROS package from previous step
COPY --from=pkg-builder /ros_ws /ros_ws

# copy firmware built in previous stage
COPY --from=stm32_firmware_builder /rosbot-stm32-firmware/.pio/build/core2_diff/firmware.bin /root/firmware_diff.bin
COPY --from=stm32_firmware_builder /rosbot-stm32-firmware/.pio/build/core2_mec/firmware.bin /root/firmware_mecanum.bin
COPY --from=stm32flash_builder /stm32flash/stm32flash /usr/bin/stm32flash
# copy firmware built
RUN cd /root && \
curl -L https://github.com/husarion/rosbot-stm32-firmware/releases/download/$ROSBOT_FW_RELEASE/firmware_diff.bin -o firmware_diff.bin && \
curl -L https://github.com/husarion/rosbot-stm32-firmware/releases/download/$ROSBOT_FW_RELEASE/firmware_mec.bin -o firmware_mecanum.bin

# copy scripts
COPY ./flash-firmware.py /
Expand All @@ -156,4 +87,4 @@ RUN echo ". /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc && \
echo ". /ros_ws/devel/setup.bash" >> ~/.profile

ENTRYPOINT ["/ros_entrypoint.sh"]
CMD ["bash"]
CMD ["bash"]
4 changes: 2 additions & 2 deletions Dockerfile.simulation
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG ROS_DISTRO=melodic
ARG ROS_DISTRO=noetic

FROM osrf/ros:$ROS_DISTRO-desktop

Expand Down Expand Up @@ -34,4 +34,4 @@ RUN apt-get update && \
# replace entrypoint
ENTRYPOINT ["/ros_ws/ros_entrypoint.sh"]

CMD ["bash"]
CMD ["bash"]
Loading
Loading