Skip to content

Commit

Permalink
Ros1-fix-firmware-flashing (#46)
Browse files Browse the repository at this point in the history
* flash-firmware fix

* Workflow update

* simplify

* Update build-docker-image-hardware.yaml

* Update build-docker-image-hardware.yaml
  • Loading branch information
rafal-gorecki authored May 6, 2024
1 parent c64a23e commit 008abd8
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 157 deletions.
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

0 comments on commit 008abd8

Please sign in to comment.