RPLIDAR A1 — LIDAR Container
ROS 2 container for the Slamtec RPLIDAR A1, built on top of a fork of the
official sllidar_ros2 driver.
Architecture
┌──────────────────────────────────────┐
│ sllidar_ros2 (rplidar_node) │
│ │
│ serial 115200 baud │
│ angle_compensate = true │
│ scan_mode = Sensitivity │
│ ▼ │
│ /dev/ttyUSB0 ──────> RPLIDAR A1 │
│ │
/scan <───────│ LaserScan @ ~10 Hz │
(sensor_msgs/ │ 360° scan, range 0.15–12 m │
LaserScan) │ │
└──────────────────────────────────────┘
How the build works
The driver source lives in lidar/sllidar_ros2/ as a git subtree of this
repository. The Dockerfile copies it directly from the
workspace — no network access is required at build time.
Workspace repo Docker build
────────────────────────── ──────────────────────────────────────────
lidar/sllidar_ros2/ ───> COPY lidar/sllidar_ros2/ src/sllidar_ros2/
(git subtree of fork) colcon build --packages-select sllidar_ros2
The upstream fork is maintained at:
https://github.com/m5p3nc3r/sllidar_ros2
Development workflow
Pulling upstream changes into the workspace
git subtree pull --prefix=lidar/sllidar_ros2 sllidar_ros2 main --squash
This fetches the latest commits from the fork, squashes them into a single
merge commit, and updates lidar/sllidar_ros2/ in the workspace.
Making local changes
Edit files inside lidar/sllidar_ros2/ as normal, then commit them to the
workspace repo:
git add lidar/sllidar_ros2/
git commit -m "lidar: describe the change"
Pushing changes back to the fork
git subtree push --prefix=lidar/sllidar_ros2 sllidar_ros2 main
This replays only the commits that touched lidar/sllidar_ros2/ and pushes
them to the fork's main branch.
First-time setup on a fresh clone
The subtree files are committed in the workspace repo, so a git clone of
this repo is all that is needed — there is no separate step to initialise the
subtree. To be able to pull or push to the fork later, add the remote:
git remote add sllidar_ros2 https://github.com/m5p3nc3r/sllidar_ros2.git
Changes relative to upstream
| File | Change |
|---|---|
src/sllidar_node.cpp |
/scan publisher QoS made configurable via scan_qos_depth (int) and scan_qos_reliability (best_effort|reliable) parameters. Defaults to best_effort, depth 2 — required for Nav2 / RViz2 compatibility. |
launch/sllidar_a1_launch.py |
Exposes scan_qos_depth and scan_qos_reliability as launch arguments. |
The upstream Slamtec repository is at:
https://github.com/slamtec/sllidar_ros2
Published topics
| Topic | Type | Description |
|---|---|---|
/scan |
sensor_msgs/LaserScan |
360° laser scan, BEST_EFFORT QoS, depth 2 |
Device
The RPLIDAR A1 connects via USB serial at /dev/ttyUSB0 (default), 115200 baud.
The container receives access to that device via the devices mapping in
docker-compose.yml. To use a different port, set
LIDAR_PORT in your .env file:
LIDAR_PORT=/dev/ttyUSB1