STS3215 pan/tilt + LD19: a no-SDK 3D scanning module for ROS 2 Jazzy

I put together a small ROS 2 subsystem that turns a 2-DOF pan/tilt platform and a cheap 2D LiDAR into a stop-and-capture 3D scanner, and figured it might be useful to someone else here.

The setup: two Feetech STS3215 serial-bus servos aim an LDROBOT LD19. A node sweeps the platform and an assembler stacks the 2D scans into a `PointCloud2` using the live TF tree. There’s an optional MQTT bridge so an external controller (in my case a microcontroller mission queue on a rover) can trigger scans and get a completion handshake back.

It’s a *complete* project — it even includes a fix to the LiDAR driver (upstream `ldlidar_stl_ros2` won’t build on recent GCC/glibc; the patched fork is linked below). It talks to the rover over a well-defined set of MQTT messages, but every command also has an equivalent ROS 2 topic, so if you want a pure ROS 2 setup you just don’t launch the bridge. (Personally I love the MQTT side — it lets me drive the whole thing from a tablet.)

No vendor SDK — the Feetech STS/SMS half-duplex protocol is implemented directly over pyserial, including handling the URT-1 adapter’s habit of echoing every TX byte back on the RX line (the kind of thing that eats an evening if you don’t know it’s coming). The assembler is driver-agnostic: it consumes standard `sensor_msgs/LaserScan` on `/scan`, so any conformant 2D LiDAR should work.

It’s running on an RK3588 today and is built to go headless on a Pi 5.

This is the first piece I’m open-sourcing from a larger autonomous rover project, GPL-3.0. I’d genuinely welcome feedback — particularly from anyone who’s done multi-LiDAR or TF-timing work, since the scan-to-TF synchronization was the fussiest part to get right. But it does work! Happy to answer questions about any of it.

- Project: GitHub - aa2mz/pan_tilt_lidar: A ROS 2 (Jazzy) subsystem that turns a 2-DOF pan/tilt platform and a 2D LiDAR into a 3D scanner. · GitHub

- Patched LiDAR driver: GitHub - aa2mz/ldlidar_stl_ros2: LDROBOT DTOF LiDAR ROS2 Package · GitHub

Some pictures / videos here might help. =)

Also if you want some help open sourcing and certifying the hardware I can give you a few pointers.

1 Like

Looks interesting!

Curious if the echo is a truly a feature of the URT-1 or possibly the line discipline on the serial interface that a “stty -echo” might fix?

Thank you Katherine Scott, though I had to look up what open sourcing hardware in this example might mean. I’m a overworked hobbist; I think the picture, the urdf and naming the brand of duct tape I used is about as much as I can do for this one. (Someone else asked me to characterize the pointing accuracy of the servos… ) I see that all documentation is important but I hope that someone who actually needs the information will find this setup simple enough and have the resources to do that themselves. Thanks again. -Ed.T

p.s. I apologize calling it “complete” without matching open hardware . :thinking:

Thank you kgregson. It’s a good thought. Console type lines typically do echo. But this connection is opened as raw binary so if the port was echoing would be a big bug. FWIW, I think Feetech sees it as part of their “rugged protocol.” -Ed.T

1 Like