ROS 2 Jazzy workspace for a small differential-drive autonomous robot running on a Raspberry Pi. The currently validated hardware is an RPLIDAR A1 and a BNO055 connected directly to the Pi. Motor encoders and motor control will be added through an Arduino Nano.
The current bringup launches the live RPLIDAR, BNO055, robot model, RViz-ready TF tree, and SLAM Toolbox mapping.
RPLIDAR ── /scan ───────────────┐
├── SLAM Toolbox ── /map, map → odom
TF: odom → base_link → laser ────┘
BNO055 ── /imu/data ── ready for future EKF fusion
The present odom → base_footprint transform is intentionally fixed for the
LiDAR-only mapping test. It must be replaced by EKF output once encoder
odometry exists.
cd ~/lidar_ws
source /opt/ros/jazzy/setup.bash
colcon build --symlink-install
source install/setup.bash
ros2 launch robot_bringup robot_bringup.launch.py rviz:=trueThe RPLIDAR is expected at /dev/ttyUSB0; override it when necessary:
ros2 launch robot_bringup robot_bringup.launch.py serial_port:=/dev/ttyUSB0| Package | Responsibility |
|---|---|
bno055_ros |
BNO055 I2C driver; publishes /imu/data. |
my_robot_description |
URDF robot geometry and fixed sensor frames. |
rplidar_ros |
Vendor RPLIDAR ROS 2 driver; publishes /scan. |
robot_bringup |
Launches current hardware, TF, RViz, and SLAM Toolbox. |
arduino_base |
Nano firmware and USB serial bridge for L298N, encoders, and /cmd_vel. |
nav2_ros |
Placeholder for the future Nav2 integration. |
- Architecture
- Hardware and calibration
- Temporary Nano and motor-driver setup
- Development and validation
- Agent conventions
- Bringup-specific guide
After firmware upload, encoder calibration, and lifted-wheel motor testing, run the full real-sensor mapping stack:
ros2 launch robot_bringup mapping.launch.pyIt fuses /wheel/odom and /imu/data with robot_localization, producing the
dynamic odom → base_footprint transform required for reliable SLAM. Do not use
this launch for driving until motor direction, encoder direction, and the
emergency timeout have been physically verified.