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

Humble docker #124

Merged
merged 5 commits into from
Dec 2, 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
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ git clone https://github.com/husarion/rosbot_ros src/rosbot_ros
Building:

```bash
export HUSARION_ROS_BUILD=hardware
export HUSARION_ROS_BUILD_TYPE=hardware

source /opt/ros/$ROS_DISTRO/setup.bash

Expand All @@ -69,7 +69,7 @@ rm -r src/rosbot_ros/rosbot_gazebo
sudo rosdep init
rosdep update --rosdistro $ROS_DISTRO
rosdep install -i --from-path src --rosdistro $ROS_DISTRO -y
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
colcon build --symlink-install --packages-up-to rosbot --cmake-args -DCMAKE_BUILD_TYPE=Release
```

Flash firmware:
Expand All @@ -93,7 +93,7 @@ ros2 launch rosbot_bringup combined.launch.py
Building:

```bash
export HUSARION_ROS_BUILD=simulation
export HUSARION_ROS_BUILD_TYPE=simulation

source /opt/ros/$ROS_DISTRO/setup.bash

Expand All @@ -106,7 +106,7 @@ cp -r src/ros2_controllers/imu_sensor_broadcaster src && rm -rf src/ros2_control
sudo rosdep init
rosdep update --rosdistro $ROS_DISTRO
rosdep install -i --from-path src --rosdistro $ROS_DISTRO -y
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
colcon build --symlink-install --packages-up-to rosbot --cmake-args -DCMAKE_BUILD_TYPE=Release
```

Running:
Expand Down
3 changes: 1 addition & 2 deletions docker/.env
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
SERIAL_PORT=/dev/ttyUSB0
ROS_NAMESPACE=robot1
ROBOT_NAMESPACE=rosbot
29 changes: 0 additions & 29 deletions docker/Dockerfile

This file was deleted.

34 changes: 34 additions & 0 deletions docker/Dockerfile.hardware
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
ARG ROS_DISTRO=humble

FROM husarnet/ros:${ROS_DISTRO}-ros-core

WORKDIR /ros2_ws

ENV HUSARION_ROS_BUILD_TYPE=hardware

COPY .. src/rosbot_ros

RUN apt-get update && apt-get install -y \
python3-pip \
ros-dev-tools \
stm32flash \
ros-${ROS_DISTRO}-teleop-twist-keyboard && \
# Setup workspace
vcs import src < src/rosbot_ros/rosbot/rosbot_hardware.repos && \
rm -r src/rosbot_ros/rosbot_gazebo && \
# Install dependencies
rosdep init && \
rosdep update --rosdistro $ROS_DISTRO && \
rosdep install --from-paths src -y -i && \
# Build
source /opt/ros/$ROS_DISTRO/setup.bash && \
colcon build --symlink-install --packages-up-to rosbot --cmake-args -DCMAKE_BUILD_TYPE=Release && \
# Get version
echo $(cat /ros2_ws/src/rosbot/package.xml | grep '<version>' | sed -r 's/.*<version>([0-9]+.[0-9]+.[0-9]+)<\/version>/\1/g') >> /version.txt && \
# Size optimization
export SUDO_FORCE_REMOVE=yes && \
apt-get remove -y \
ros-dev-tools && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
35 changes: 35 additions & 0 deletions docker/Dockerfile.simulation
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
ARG ROS_DISTRO=humble

FROM husarnet/ros:${ROS_DISTRO}-ros-core

WORKDIR /ros2_ws

ENV HUSARION_ROS_BUILD_TYPE=simulation

COPY .. src/rosbot_ros

RUN apt-get update && apt-get install -y \
python3-pip \
ros-dev-tools \
stm32flash \
ros-${ROS_DISTRO}-teleop-twist-keyboard && \
# Setup workspace
vcs import src < src/rosbot_ros/rosbot/rosbot_hardware.repos && \
vcs import src < src/rosbot_ros/rosbot/rosbot_simulation.repos && \
cp -r src/ros2_controllers/imu_sensor_broadcaster src && rm -rf src/ros2_controllers && \
# Install dependencies
rosdep init && \
rosdep update --rosdistro $ROS_DISTRO && \
rosdep install --from-paths src -y -i && \
# Build
source /opt/ros/$ROS_DISTRO/setup.bash && \
colcon build --symlink-install --packages-up-to rosbot --cmake-args -DCMAKE_BUILD_TYPE=Release && \
# Get version
echo $(cat /ros2_ws/src/rosbot/package.xml | grep '<version>' | sed -r 's/.*<version>([0-9]+.[0-9]+.[0-9]+)<\/version>/\1/g') >> /version.txt && \
# Size optimization
export SUDO_FORCE_REMOVE=yes && \
apt-get remove -y \
ros-dev-tools && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
22 changes: 22 additions & 0 deletions docker/compose.hardware.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Quick Start
#
# 1. Run `docker compose -f compose.hardware.yaml up` on the ROSbot
# 2. Open a shell inside a docker container `docker compose -f compose.hardware.yaml exec -it rosbot bash`
# 3. Run `ros2 run teleop_twist_keyboard teleop_twist_keyboard` inside the container

services:
rosbot:
build:
context: ..
dockerfile: docker/Dockerfile.hardware
network_mode: host
ipc: host
restart: unless-stopped
devices:
- ${SERIAL_PORT:-/dev/ttyUSB0}
- /dev/bus/usb/ # FTDI
command: >
ros2 launch rosbot_bringup combined.launch.py
mecanum:=${MECANUM:-False}
namespace:=${ROBOT_NAMESPACE:-rosbot}
serial_port:=${SERIAL_PORT:-/dev/ttyUSB0}
32 changes: 32 additions & 0 deletions docker/compose.simulation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Quick Start
#
# 1. Run `xhost +local:docker && docker compose -f compose.simulation.yaml up` on the laptop
# (optionally you can chang `gpu-config` -> `cpu config`).
# 2. Open a shell inside a docker container `docker compose -f compose.simulation.yaml exec -it rosbot bash`
# 3. Run `ros2 run teleop_twist_keyboard teleop_twist_keyboard` inside the container

x-gpu-config:
&gpu-config
runtime: nvidia
environment:
- DISPLAY=${DISPLAY:?err}
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all

x-cpu-config:
&cpu-config
environment:
- DISPLAY=${DISPLAY:?err}

services:
rosbot:
build:
context: ..
dockerfile: docker/Dockerfile.simulation
network_mode: host
ipc: host
<<: [ *gpu-config]
command: >
ros2 launch rosbot_gazebo simulation.launch.py
mecanum:=${MECANUM:-False}
namespace:=${ROBOT_NAMESPACE:-rosbot}
19 changes: 0 additions & 19 deletions docker/compose.yaml

This file was deleted.

14 changes: 7 additions & 7 deletions docker/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ alias teleop := run-teleop-docker
# run teleop_twist_keybaord (inside rviz2 container)
run-teleop-docker: _run-as-user
#!/bin/bash
docker compose exec rosbot /bin/bash -c "/ros_entrypoint.sh ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r __ns:=/${ROS_NAMESPACE}"
docker compose exec rosbot /bin/bash -c "/ros_entrypoint.sh ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r __ns:=/${ROBOT_NAMESPACE}"

flash-firmware: _install-yq _run-as-user
#!/bin/bash
Expand All @@ -29,9 +29,9 @@ flash-firmware: _install-yq _run-as-user
gpio_chip=/dev/gpiochip4
serial_port=/dev/ttyS4
else
echo "Probably user laptop"
echo "Probably user computer"
gpio_chip=/dev/bus/usb
serial_port=$SERIAL_PORT
serial_port=/dev/ttyUSB0
enable_usb="--usb"
fi

Expand All @@ -42,13 +42,13 @@ flash-firmware: _install-yq _run-as-user
docker-rosbot \
ros2 run rosbot_utils flash_firmware ${enable_usb}

run:
run_hardware:
#/bin/bash
docker compose up
docker compose -f compose.hardware.yaml up

build:
build_hardware:
#/bin/bash
docker compose build
docker compose -f compose.hardware.yaml build

_run-as-root:
#!/bin/bash
Expand Down
5 changes: 2 additions & 3 deletions rosbot/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@
<depend>rosbot_bringup</depend>
<depend>rosbot_controller</depend>
<depend>rosbot_description</depend>
<depend>rosbot_utils</depend>

<depend condition="($HUSARION_ROS_BUILD == simulation)">rosbot_gazebo</depend>
<depend condition="($HUSARION_ROS_BUILD_TYPE == simulation)">rosbot_gazebo</depend>
<depend condition="($HUSARION_ROS_BUILD_TYPE == hardware)">rosbot_utils</depend>

<export>
<build_type>ament_cmake</build_type>
Expand Down