ROS 2 Humble. For contributors who change launch files, nodes, ros2_control config, or CI in this repository only.
Sibling robot description / sim launches: ../thais_urdf/doc/DEVELOPER.md when both repos live under the same workspace src/ (e.g. lucy_ws/src). On GitHub: Sentience-Robotics/thais_urdf → doc/DEVELOPER.md.
Conventions follow common packaging practice (REP-149: accurate package.xml, install rules, documented launch entry points).
| Package | Responsibility |
|---|---|
lucy_bringup |
Jetson system bringup: micro-ROS agents, rosbridge_server, camera_ros, RealSense, delayed include of lucy_ros2_control. |
lucy_ros2_control |
Hardware ros2_control: LucySystemHardware plugin, lucy_controllers.yaml, control.launch.py. |
camera_ros |
MJPEG → sensor_msgs/msg/CompressedImage; GStreamer pipeline; pytest. |
lucy_ros_packages/
├── doc/
│ ├── DEVELOPER.md # this file
│ └── ROS2_CONTROL.md # ros2_control concepts + Lucy implementation
├── lucy_bringup/
├── lucy_ros2_control/
└── camera_ros/
cd lucy_ws # or your colcon workspace root
source /opt/ros/humble/setup.bash
colcon build --symlink-install \
--packages-select lucy_bringup lucy_ros2_control camera_ros
source install/setup.bashHygiene
package.xml:exec_dependfor anything launched at runtime;depend/buildtool_dependfor build-time Python/C++.CMakeLists.txt: install everything consumers need undershare/${PROJECT_NAME}/(orlib/) soros2 pkg prefix <pkg>is sufficient.- Tests: enable
BUILD_TESTING; extendament_lint/ pytest when behavior changes. - Version: bump
<version>inpackage.xmlon visible behavior or API changes.
| Item | Detail |
|---|---|
| Launch | ros2 launch lucy_bringup lucy.launch.py |
| Args | device0, device1 (default /dev/ttyACM0, /dev/ttyACM1); audio args declared but audio nodes are commented out in lucy.launch.py; RealSense via realsense.launch.py. |
| Scripts | system_scripts/*.sh → installed under lib/lucy_bringup. |
| Runtime deps | micro_ros_agent, lucy_ros2_control, rosbridge_server, camera_ros, audio_common, realsense2_camera, launch, launch_ros. |
Developers
lucy_ros2_controlis included after a 3 sTimerActionso serial/rosbridge can settle; if you change ordering, re-validate hardware bringup.- See
REALSENSE.md,AUDIO.mdin this package for subsystems.
| Item | Detail |
|---|---|
| Launch | ros2 launch lucy_ros2_control control.launch.py |
| Plugin | lucy_ros2_control.xml → lucy_ros2_control/LucySystemHardware; C++ implementation under hardware/. |
| Config | config/lucy_controllers.yaml — must match joint names in thais_urdf xacro (inmoov_ros2_control.xacro). |
| Architecture | doc/ROS2_CONTROL.md — general ros2_control → Lucy topics, YAML, launches, pitfalls. |
When you change controllers or joints
- Edit
config/lucy_controllers.yaml. - Update
thais_urdfros2_control xacro in the same change set (or coordinated PRs). - Align any external UI / teleop joint lists (e.g. control panel config).
| Item | Detail |
|---|---|
| Launch | ros2 launch camera_ros camera.launch.py (fps, device, USB ids, …). |
| Tests | colcon test --packages-select camera_ros with BUILD_TESTING=ON. |
.github/workflows/ci.yml runs in osrf/ros:humble-desktop on pull_request and on push to main / master / dev only (avoids duplicate runs when a PR branch is pushed):
rosdep install --from-paths srcforcamera_ros,lucy_bringup,lucy_ros2_controlcolcon buildwithBUILD_TESTING=ONcolcon test— ament linters,camera_rospytests,lucy_bringuplaunchpy_compiletests,lucy_ros2_controlYAML testspytest-cov—camera_ros(scripts/),lucy_bringup(launch/),lucy_ros2_control(test/) → Cobertura XML + HTML underws/build/coverage_reports/; Codecov flaglucy_ros_packages(optionalCODECOV_TOKEN)
Local commands: README.md → Tests and coverage (local).
- New runtime dependency → correct
package.xmlin the affected package. - New launch or config →
install()in that package’sCMakeLists.txt. - New topic/service → document in the package
README.md. - Control / joints → always coordinate with
thais_urdf(see itsdoc/DEVELOPER.md).
| Goal | Command |
|---|---|
| Full Jetson stack | ros2 launch lucy_bringup lucy.launch.py |
| Control stack only | ros2 launch lucy_ros2_control control.launch.py (requires thais_urdf installed in overlay — provides default URDF share) |
| USB camera | ros2 launch camera_ros camera.launch.py |
RViz / Gazebo combo launches live in thais_urdf.