ROS 2 Jazzy · Ubuntu 24.04
A distributed ROS 2 system split across two workspaces: a lightweight edge node running on a Raspberry Pi, and a compute-heavy brain running on a CUDA-enabled laptop. Together they drive a 4WD mobile base with a 6-DOF xArm manipulator, 3D LiDAR, and RGB-D vision.
https://youtu.be/pPVNTSV94Bw?si=5ImayjD9v3hi-nGu
Four ROS2 nodes communicating over well-defined topics and message types:
| Node | Role |
|---|---|
| Perception Node | ZED Mini interface, object detection, depth filtering |
| TF Broadcaster Node | Converts detections to TF frames, maintains ROS2 TF tree |
| IK & Control Node | Analytical IK solver + trajectory generation |
| Arm Controller | Joint position controller → xArm 1s hardware interface |
End-to-end pipeline from camera input to physical pick execution:
Pipeline Steps:
- ZED Mini Camera captures RGB + depth frames
- Object Detection Node identifies target, extracts 3D (x, y, z) in camera frame
- Hand-Eye Calibration (ArUco markers, AX = XB) resolves
zed_camera_link → base_link - TF Broadcasting publishes
target_linkinto the ROS2 TF tree - Custom Processing Node computes joint angles via IK
- Joint Trajectory Command sends angles to the xArm controller
- xArm Motion Execution picks the object
Raw stereo point cloud used for depth-aware object localization:
Occupancy grid generated during navigation for path planning on the mobile base:
| Module | Status |
|---|---|
| 4WD Mobile Base | ✅ Operational |
| xArm Driver (Serial Bridge) | ✅ Operational |
| 2D LiDAR (RPLidar) | ✅ Operational |
| 3D LiDAR Integration | ✅ Added to system |
| 3D Mapping (FAST-LIO) | ✅ 3D map successfully generated |
| Autonomous Navigation (Nav2) | 🔧 In Progress |
| cobot_perception (ZED Mini + IK) | 🔧 In Development |
Latest: Added a 3D LiDAR to the system and successfully created a 3D map using FAST-LIO. Currently working on full autonomous navigation with Nav2.
CoBot-ROS2/
├── CoBot-ROS2/ # Edge Node workspace (Raspberry Pi)
│ ├── src/
│ │ ├── bumperbot_* # Core robot packages
│ │ ├── xarm_driver/ # Serial bridge to xArm servos
│ │ ├── cobot_perception/ # ZED Mini vision + ikpy IK solver
│ │ └── my_robot_bringup/ # Launch files for the Pi
│ └── README.md
│
├── cobot_compute_ws/ # Compute Brain workspace (Laptop / CUDA)
│ ├── src/
│ │ ├── bumperbot_* # Shared packages built on laptop side
│ │ └── my_robot_bringup/ # SLAM, Nav2, EKF launch files
│ └── README.md
│
├── docs/images/ # Project images for documentation
└── README.md # You are here
cd CoBot-ROS2
source install/setup.bash
ros2 launch my_robot_bringup edge_node.launch.pycd cobot_compute_ws
source install/setup.bash
ros2 launch my_robot_bringup compute_brain.launch.pyBoth machines must share the same ROS_DOMAIN_ID:
export ROS_DOMAIN_ID=42
export ROS_LOCALHOST_ONLY=0



