Welcome to the FRBot project, a Mobile Manipulator workspace for ROS2 Humble. This document provides a comprehensive guide to the system's architecture, setup, and operation.
- 🚀 Main Launch File
- 🛠️ System Configuration
- 🏗️ Package Structure
- 📦 Build Instructions
▶️ Execution- 🎯 Using Pick & Place
- 🔌 Topics
To bring the entire system online, use the main launch file:
ros2 launch robot_bringup full_system_with_pickplace.launch.pyThis command executes all system components in a coordinated sequence:
- Mobile Manipulator MoveIt + Hardware (Starts immediately)
- Dual RealSense Cameras + YOLO (Starts after 5 seconds)
- Web Interface (Starts after 8 seconds)
- Pick & Place Controller (Starts after 12 seconds)
The robot's hardware components are connected as follows:
| Component | Communication | Port / Channel |
|---|---|---|
| 🤖 Mobile Base (4WD) | RS485 Serial | /dev/ttyUSB0, /dev/ttyUSB1 |
| 🦾 Manipulator (4DOF) | USBCAN-UC12 | Channel 0 |
| 🤏 Gripper | Serial | /dev/ttyACM0 |
| 👁️ RealSense D405 | USB | Gripper Camera |
| 👁️ RealSense D455 | USB | Navigation Camera |
Click to expand the workspace package structure
frbot_ws/src/
│
├── robot_bringup/ # Main launch package
│ ├── launch/
│ │ ├── full_system_with_pickplace.launch.py # Main launch file
│ │ ├── mobile_manipulator_moveit.launch.py # MoveIt + Hardware
│ │ └── dual_realsense.launch.py # Cameras + YOLO
│ └── scripts/
│ └── topic_pick_place.py # Pick & Place controller
│
├── robot_description/ # URDF models
│ ├── urdf/
│ │ ├── mobile_manipulator_usbcan_hardware.xacro # Main URDF
│ │ ├── robot_core.xacro
│ │ ├── ros2_control_mobile_manipulator_usbcan.urdf.xacro
│ │ ├── arm_only/ # Manipulator-only URDF
│ │ └── mobile_only/ # Mobile base-only URDF
│ └── meshes/ # 3D mesh files
│
├── moveit/
│ └── mobile_manipulator_moveit_config/ # MoveIt configuration
│ ├── config/ # SRDF, kinematics, controllers
│ └── launch/
│
├── drivers/
│ ├── myactuator_hardware/ # Manipulator ros2_control driver
│ │ └── src/myactuator_hardware_interface.cpp
│ ├── md_motor_hardware/ # Mobile base ros2_control driver
│ │ └── src/md_4wd_hardware.cpp
│ ├── myactuator_rmd/ # USBCAN driver library
│ └── serial-ros2/ # Serial communication library
│
├── robot_web_interface/ # Web-based interface
│ ├── launch/web_interface.launch.py
│ └── www/ # HTML/CSS/JS files
│
├── yolo_realsense/ # YOLO object detection node
│ └── yolo_realsense/yolo_node.py
│
├── navigation/ # (Unused) Navigation packages
│ ├── robot_nav2/
│ └── robot_slam/
│
└── simulation/ # (Unused) Simulation packages
└── robot_gazebo/
To build the workspace, follow these steps:
# Navigate to your workspace directory
cd ~/frbot_ws
# Source the ROS2 environment
source /opt/ros/humble/setup.bash
# Build the packages
colcon build --symlink-install
# Source the new setup file
source install/setup.bashLaunch the entire robot system with the default parameters:
ros2 launch robot_bringup full_system_with_pickplace.launch.pyYou can customize the launch with the following arguments:
ros2 launch robot_bringup full_system_with_pickplace.launch.py \
rviz:=true \
can_channel:=0 \
gripper_port:=/dev/ttyACM0 \
port_front:=/dev/ttyUSB0 \
port_rear:=/dev/ttyUSB1 \
enable_pickplace:=trueThe pick and place functionality is triggered automatically when YOLO detects an object and publishes to the /target_point topic.
For manual testing, you can publish a point directly:
ros2 topic pub /target_point geometry_msgs/PointStamped \
"{header: {frame_id: 'd405_optical_frame'}, point: {x: 0.3, y: 0.0, z: 0.5}}"Here are some of the key topics used in the system:
| Topic | Type | Description |
|---|---|---|
/target_point |
geometry_msgs/PointStamped |
Target coordinates for picking |
/camera/camera/color/image_rect_raw |
sensor_msgs/Image |
D405 camera color image |
/camera/camera/depth/image_rect_raw |
sensor_msgs/Image |
D405 camera depth image |
/cmd_vel |
geometry_msgs/Twist |
Velocity command for mobile base |