From 212821793ab7846cb15d96562e2a659c825f87fd Mon Sep 17 00:00:00 2001 From: Matt Spencer Date: Thu, 16 Apr 2026 13:53:01 +0000 Subject: [PATCH] First run on target hardware The robot rotated with the ros2 topic pub command in the readme --- CMakeLists.txt | 9 -------- Dockerfile | 22 ++++++++----------- .../my_robot/my_robot}/__init__.py | 0 .../my_robot}/motor_controller_node.py | 1 + package.xml => src/my_robot/package.xml | 7 ++++-- src/my_robot/resource/my_robot | 0 setup.cfg => src/my_robot/setup.cfg | 0 setup.py => src/my_robot/setup.py | 4 ++++ 8 files changed, 19 insertions(+), 24 deletions(-) delete mode 100644 CMakeLists.txt rename {my_robot => src/my_robot/my_robot}/__init__.py (100%) rename {my_robot => src/my_robot/my_robot}/motor_controller_node.py (99%) rename package.xml => src/my_robot/package.xml (81%) create mode 100644 src/my_robot/resource/my_robot rename setup.cfg => src/my_robot/setup.cfg (100%) rename setup.py => src/my_robot/setup.py (67%) diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 6da01b4..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -cmake_minimum_required(VERSION 3.8) -project(my_robot) - -find_package(ament_cmake REQUIRED) -find_package(ament_cmake_python REQUIRED) - -ament_python_install_package(${PROJECT_NAME}) - -ament_package() diff --git a/Dockerfile b/Dockerfile index 51cbf14..b3b010b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,25 +3,18 @@ # ── Stage 1: build ──────────────────────────────────────────────────────────── FROM ros:kilted AS builder +SHELL ["/bin/bash", "-c"] + RUN apt-get update && apt-get install -y --no-install-recommends \ python3-colcon-common-extensions \ - python3-pip \ - ros-${ROS_DISTRO}-ament-cmake-python \ && rm -rf /var/lib/apt/lists/* WORKDIR /ws -# Install the vendored Raspbot hardware library -COPY raspbot_v2_interface/ raspbot_v2_interface/ -# PEP 668: newer Debian/Ubuntu marks the system Python as externally managed and blocks pip -# by default. --break-system-packages overrides this; safe here as the container is isolated. -RUN pip3 install --no-cache-dir --break-system-packages ./raspbot_v2_interface - # Copy the ROS package into the standard colcon src/ layout and build it -COPY package.xml setup.py setup.cfg CMakeLists.txt src/my_robot/ -COPY my_robot/ src/my_robot/my_robot/ +COPY src/my_robot/ src/my_robot/ -RUN . /opt/ros/${ROS_DISTRO}/setup.sh && \ +RUN source /opt/ros/${ROS_DISTRO}/setup.bash && \ colcon build --packages-select my_robot # ── Stage 2: runtime ────────────────────────────────────────────────────────── @@ -31,10 +24,13 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ros-${ROS_DISTRO}-rclpy \ ros-${ROS_DISTRO}-geometry-msgs \ ros-${ROS_DISTRO}-std-msgs \ + python3-smbus \ && rm -rf /var/lib/apt/lists/* -# Bring across the installed Raspbot library and the built ROS overlay -COPY --from=builder /usr/local/lib /usr/local/lib +# Install the Raspbot hardware library directly into site-packages +COPY raspbot_v2_interface/ /usr/local/lib/python3.12/dist-packages/raspbot_v2_interface/ + +# Bring across the built ROS overlay COPY --from=builder /ws/install /ws/install # Source both ROS base and the workspace overlay on every shell/exec diff --git a/my_robot/__init__.py b/src/my_robot/my_robot/__init__.py similarity index 100% rename from my_robot/__init__.py rename to src/my_robot/my_robot/__init__.py diff --git a/my_robot/motor_controller_node.py b/src/my_robot/my_robot/motor_controller_node.py similarity index 99% rename from my_robot/motor_controller_node.py rename to src/my_robot/my_robot/motor_controller_node.py index 7d07d8a..777431a 100644 --- a/my_robot/motor_controller_node.py +++ b/src/my_robot/my_robot/motor_controller_node.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 import rclpy from rclpy.node import Node from geometry_msgs.msg import Twist diff --git a/package.xml b/src/my_robot/package.xml similarity index 81% rename from package.xml rename to src/my_robot/package.xml index 9ab40c3..e5fe654 100644 --- a/package.xml +++ b/src/my_robot/package.xml @@ -10,8 +10,11 @@ geometry_msgs std_msgs - ament_cmake - ament_cmake_python + ament_python + + + ament_python + ament_copyright ament_flake8 ament_pep257 diff --git a/src/my_robot/resource/my_robot b/src/my_robot/resource/my_robot new file mode 100644 index 0000000..e69de29 diff --git a/setup.cfg b/src/my_robot/setup.cfg similarity index 100% rename from setup.cfg rename to src/my_robot/setup.cfg diff --git a/setup.py b/src/my_robot/setup.py similarity index 67% rename from setup.py rename to src/my_robot/setup.py index 4a9e3d1..1934ed2 100644 --- a/setup.py +++ b/src/my_robot/setup.py @@ -6,6 +6,10 @@ setup( name=package_name, version='0.0.1', packages=[package_name], + data_files=[ + ('share/ament_index/resource_index/packages', ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], install_requires=['setuptools'], zip_safe=True, entry_points={