From fb103aaa99c1bfad8adec5089746cf4256c5ca2a Mon Sep 17 00:00:00 2001 From: Pimpest <82343504+pimpest@users.noreply.github.com> Date: Tue, 10 Feb 2026 13:11:58 +0100 Subject: [PATCH] added dockerfile and docker compose --- Dockerfile | 43 +++++++++++++++ docker-compose.yaml | 15 ++++++ scripts/docker_build.sh | 54 +++++++++++++++++++ toid_behaviors/CMakeLists.txt | 63 ++++++++++++++++++++++ toid_behaviors/package.xml | 35 ++++++++++++ toid_behaviors/toid_control_interfaces.xml | 7 +++ toid_bot_description/package.xml | 2 - toid_navigation/package.xml | 2 - 8 files changed, 217 insertions(+), 4 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yaml create mode 100755 scripts/docker_build.sh create mode 100644 toid_behaviors/CMakeLists.txt create mode 100644 toid_behaviors/package.xml create mode 100644 toid_behaviors/toid_control_interfaces.xml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..111d950 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,43 @@ +FROM ros:jazzy-ros-base + +ENV DEBIAN_FRONTEND=noninteractive + +# ---------- System dependencies ---------- +RUN apt-get update && apt-get install -y \ + python3-colcon-common-extensions \ + python3-rosdep \ + build-essential \ + udev \ + git + +# ---------- Initialize rosdep ---------- +RUN rosdep init || true +RUN rosdep update + +# ---------- Workspace ---------- +WORKDIR /ros_ws + +# ---------- Copy package.xml files ---------- +COPY toid_bot_description/package.xml toid_bot_description/package.xml +COPY toid_control/package.xml toid_control/package.xml +COPY toid_msgs/package.xml toid_msgs/package.xml +COPY toid_odometry/package.xml toid_odometry/package.xml +COPY toid_spinner_controller/package.xml toid_spinner_controller/package.xml +#COPY toid_navigation/package.xml toid_navigation/package.xml + +# ---------- Install dependencies ---------- +RUN . /opt/ros/jazzy/setup.sh && \ + rosdep install --from-paths ./ --ignore-src -r -y \ + && rm -rf /var/lib/apt/lists/* + +RUN rm -rf ./* + +RUN cat <> /root/.bashrc +source /opt/ros/jazzy/setup.bash +if [[-f ./install/setup.bash ]] + source ./install/setup.bash +if +EOF + + +CMD ["sleep", "infinity"] diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..1189dcd --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,15 @@ +services: + toid: + image: toid + container_name: toid + + privileged: true + network_mode: host + + volumes: + - ./:/ros_ws/src + + entrypoint: ["sleep","infinity"] + + profiles: + - base \ No newline at end of file diff --git a/scripts/docker_build.sh b/scripts/docker_build.sh new file mode 100755 index 0000000..b8bc6b2 --- /dev/null +++ b/scripts/docker_build.sh @@ -0,0 +1,54 @@ +#!/bin/bash +usage() { + cat < [] + docker_build.sh -h + + Build and push a docker image to a arm64v8 registry + + Targets: + base The pacakges aimed at running on the raspberry pi +EOF +} + + +TARGET="$1" +REGISTRY="$2" +ARGS="$2" + +if [[ $TARGET == "-h" || $TARGET == "--help" ]]; then + usage + exit 0 +fi + +if [[ $# -lt 2 ]]; then + echo "Error: Expected at least 2 arguments." + usage + exit 1 +fi + +trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT + +case $TARGET in + "base") + ssh -N \ + -o StrictHostKeyChecking=no \ + -o UserKnownHostsFile=/dev/null \ + -L 0.0.0.0:5000:localhost:5000 \ + $REGISTRY & + + echo "Building target: base" + + sudo docker buildx build \ + --platform linux/arm64 \ + -t localhost:5000/toid:latest \ + -f Dockerfile \ + --output type=registry \ + . + ;; + *) + echo "Target not defined" + exit 1 + ;; +esac diff --git a/toid_behaviors/CMakeLists.txt b/toid_behaviors/CMakeLists.txt new file mode 100644 index 0000000..93201c2 --- /dev/null +++ b/toid_behaviors/CMakeLists.txt @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.8) +project(toid_control) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +set(library_name toid_control) + +set(PACKAGE_DEPS + rclcpp + pluginlib + hardware_interface + rclcpp_lifecycle + rclcpp_components +) + +# find dependencies +find_package(ament_cmake REQUIRED) + +foreach(PACKAGE ${PACKAGE_DEPS}) + find_package(${PACKAGE} REQUIRED) +endforeach() + + +add_library( + ${library_name} + SHARED + src/toid_control.cpp +) + +target_include_directories( + ${library_name} + PRIVATE + include +) + +ament_target_dependencies(${library_name} + ${PACKAGE_DEPS} +) + +pluginlib_export_plugin_description_file(hardware_interface toid_control_interfaces.xml) + +install( + TARGETS ${library_name} + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin +) + +install( + DIRECTORY + launch + params + rviz + DESTINATION share/${PROJECT_NAME}/ +) + +ament_export_include_directories(include) +ament_export_libraries(${library_name}) +ament_export_dependencies(${PACKAGE_DEPS}) + +ament_package() diff --git a/toid_behaviors/package.xml b/toid_behaviors/package.xml new file mode 100644 index 0000000..d96c227 --- /dev/null +++ b/toid_behaviors/package.xml @@ -0,0 +1,35 @@ + + + + toid_control + 0.0.1 + Ros2 control compatible drivers for magrob + Pimpest + Apache-2.0 + + ament_cmake + + ros2launch + + rclcpp + rclcpp_lifecycle + rclcpp_components + pluginlib + + ros2_control + hardware_interface + + controller_manager + diff_drive_controller + robot_state_publisher + joint_state_broadcaster + + boost + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/toid_behaviors/toid_control_interfaces.xml b/toid_behaviors/toid_control_interfaces.xml new file mode 100644 index 0000000..53369d8 --- /dev/null +++ b/toid_behaviors/toid_control_interfaces.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/toid_bot_description/package.xml b/toid_bot_description/package.xml index 4d1a5ed..6312fe9 100644 --- a/toid_bot_description/package.xml +++ b/toid_bot_description/package.xml @@ -10,9 +10,7 @@ ament_cmake joint_state_publisher - joint_state_publisher_gui robot_state_publisher - rviz2 xacro ament_lint_auto diff --git a/toid_navigation/package.xml b/toid_navigation/package.xml index 2e2437a..23e46aa 100644 --- a/toid_navigation/package.xml +++ b/toid_navigation/package.xml @@ -8,7 +8,6 @@ MIT ament_cmake - navigation2 robot_state_publisher nav2_behaviors nav2_planner @@ -17,7 +16,6 @@ nav2_lifecycle_manager nav2_bringup ros2_control - rviz2 rsl ament_lint_auto