These docs are public and open source.Edit on GitHub
ROS 2 TOPICS
This page lists every topic the driver publishes and subscribes, with the message type on each.
TOPIC LIST
| Topic | Message type | Your role | What it carries |
|---|---|---|---|
| /scan | sensor_msgs/LaserScan | Subscribe | One planar sweep from the Lakibeam LiDAR, ~1440 samples, frame_id laser. Any subscriber receives it; no special QoS is needed. |
| /imu/fused | sensor_msgs/Imu | Subscribe | Orientation, linear acceleration (m/s²), and angular velocity (rad/s) at ~200 Hz, frame_id imu_link. Published by the controller node from the MCU state frame. |
| /mag | sensor_msgs/MagneticField | Subscribe | Magnetic field in teslas from the QMC6309 magnetometer, frame_id imu_link. Not part of the fused orientation on /imu/fused. |
| /odom | nav_msgs/Odometry | Subscribe | Wheel odometry at ~200 Hz, integrated on the MCU from the motor encoder. |
| /battery | sensor_msgs/BatteryState | Subscribe | Pack voltage and a 3S charge fraction at ~0.5 Hz. |
| /camera/color | sensor_msgs/Image | Subscribe | A JPEG-compressed color frame at 60 fps from the camera node. The bytes are raw JPEG with encoding="jpeg". Publisher is best-effort; a subscriber needs sensor-data QoS to receive it. |
| /drive | ackermann_msgs/AckermannDriveStamped | Publish | The topic your own node publishes to. The mux only forwards it while autonomy mode is armed. |
| /joy | sensor_msgs/Joy | Teleop | Flysky RC stick and switch state, published by the controller node from the receiver on the ESP32. The gamepad and mux nodes read it. |
| /gamepad_drive | ackermann_msgs/AckermannDriveStamped | Teleop | The drive command gamepad_node builds from the sticks. |
| /mux_out | ackermann_msgs/AckermannDriveStamped | Internal | The command the mux forwarded, teleop or autonomy. |
| /motor | ackermann_msgs/AckermannDriveStamped | Internal | The throttle-scaled command the controller node turns into the ESP32 serial command. |
| /dotmatrix/text | std_msgs/String | Publish | Text to the dot-matrix display on the back of the car. Handled by the led_matrix node over USB-UART. |
| /battery/voltage | std_msgs/Float32 | Subscribe | Pack voltage as a plain number. |
| /encoder/speed | std_msgs/Float32 | Subscribe | Wheel speed from the encoders, before it is integrated into /odom. |
| /rc/channels | std_msgs/Float32MultiArray | Internal | Raw channel values from the Flysky receiver, before the controller node turns them into /joy. |
| /edgetpu/inference | vision_msgs/Detection2DArray | Subscribe | Object detections from the inference node. Only publishes while a model is loaded and running. |
The driver starts at boot, so every topic above is already live when you log in. ros2 topic list on the car also prints /diagnostics, /parameter_events and /rosout, which are ROS 2 internals.
DRIVE PIPELINE
A drive message does not go straight to the motor. The mux node decides whether teleop or autonomy is in control, and the throttle node scales the speed to a safe range before the controller node touches the hardware.
// the drive pipeline
/drive→mux_node→/mux_out→throttle_node→/motor→controller→ESP32 board→ESC and steering servo
/gamepad_drive(teleop)→mux_node The SWB switch on the transmitter selects the source: up is teleop, down is /drive.
red = topic · white = node · grey = hardware
