My small differential drive robot

Google Photos
My little diff drive robot

Google Photos

Google Photos
Battery pack and encoder drive

Google Photos
Close up

I thought I’d just post these pics and a short description. I’ll add more commentary later.

I’m running ROS2 galactic with Ubuntu 20.04.
The camera will show an image in rviz2. The TOF sensor will show a point cloud in rviz2. I’ve run the nav2 stack, mapped a room and had it follow a path.
I really like using ROS2. I can drive it around with a joystick or the keyboard.
Shoutout to Josh for the inspiration and well done videos!


More information here:

Parts list:
Jetson Nano B01
Waveshare Wireless-AC8265 module for Nano
Adafruit Feather M4 Express (Arduino)
IMX219 Camera
DC Motor + Stepper FeatherWing Add-on
BEMONOC 25GA370 DC Encoder Metal Gearmotor
Slamtec RPLIDAR A1M8
SparkFun 9DoF IMU Breakout-ICM-20948
SparkFun Qwiic ToF Imager -VL53L5CX
INIU Power Bank, LED Display 10000mAh Portable Charger
HDMI Dummy Plug (for Nomachine remote access)

The chassis is 3D printed with PLA. I have a Qidi X-MAX printer that I really like.

The wheels are 3D printed and I use rubber bands as the tires.

I use the Arduino to handle the motor PID functions and other details like battery level.
I looked into ROS for Arduino but it seemed easier to write a simple communications driver and a ROS node.

Future plans:
The Nano is a great little device but I’ll probably swap it for a Jetson Xavier I have that runs a lot faster with the same form factor. Since the Xavier needs more power I’ll need to redo the battery configuration.

Ubuntu 22.04? ROS2 Humble? I wish Nvidia would officially support these releases in Jetpack.

Visual SLAM with two cameras
Use the TOF sensor to help with object/boundary detection


Nice robot! I really like the compact size.


Thanks, I’m probably on the third chassis configuration. 3D printing makes it easy to keep adding on. :slightly_smiling_face:

Nice, I like it! How have you found the VL53L5CX? I’ve been curious to try one of that family of chips to see what they’re like as a replacement for ultrasonic etc.

A common complaint! I haven’t had to do much with Jetsons but when I have I just use Docker. It’s a bit of a pain but once you get it going it can make the whole process a bit smoother.

I’ve heard this complaint a LOT so I think I’ll probably do a video on it at some point.

Thanks Josh. I like how Sparkfun makes it easy to daisy chain the little sensor boards. I’ve only gotten so far as to run a node and display a pointcloud in rviz. I followed Lou Amadio’s tutorial to get started.

I am looking through some of your projects ros_arduino bridge, serial_motor_demo as I need a better way to have ROS talk to the Arduino that controls the motors.

I also finally swapped the Jetson Nano for a Jetson Xavier and NAV2 runs much better!

I would love to see a video on Docker. I know docker basics but it still feels easier to run everything natively without containers. Perhaps more study is what’s really needed for me. :slight_smile:

Nice! Yeah Docker can be a bit confusing, I don’t use it as much as I should and am only just starting to get a bit more fluent with it due to this same problem at work (client has a Jetson but needs to run new stuff on it).

And at home I’ve been using it the “wrong” way like a VM, where I keep a container “alive” and just start/stop it as needed.

Yeah basically if you use Jetsons with ROS you have to use docker. There is no way around it because nVidia don’t support recent Ubuntu builds and you hit the whole which Ubuntu for which ROS for which Jetson conundrum… and docker is the only way out of it… or sell a kidney to buy an AGX just to run any Ubuntu more recent than 18.04.

Thanks Dingo_aus. I understand the issue is Nvidia not supporting 22.04 with Jetpack but you can run a container with Humble on Ubuntu 20.04 on the Jetson. If you’re really comfortable working in docker, then it’s a moot point but it’s also one more thing to have to learn before you can use Humble on a Jetson.

A docker video would be awesome → Josh :slight_smile:


Thanks @MarcW for pointing me to that tutorial. I am following this now to get docker and ros2 on my nano.

It is my first time with docker and I am getting confused between the polyhobbyist’s tutorial jetbot repo and the my_bot repo I made from Josh’s. where in the folder structure should the docker setup files go?

Docker video is definitely coming haha, I think this is one of my most requested topics.

There are MANY different ways you can set up docker which makes it confusing for new users.
The most basic way, the Dockerfile can sort of go anywhere (probably not the root of your workspace, either in a subdirectory or somewhere else on your computer). You build it and then it’s installed to your system and you can run it from your directory, and you need to mount your files in.

You can also use Docker Compose (with a docker-compose.yaml file, probably in your workspace) to help tidy up this process.

The simplest, but also sort of more complex because it’s hiding things behind the scenes), is to use VS Code dev containers, either with a custom devcontainer.json or using ijnek’s new template . In this case the .devcontainer directory goes/ends up in your workspace.

I also highly recommend Allison Thackston’s tutorial from ROS World 2021.

I’ve not watched Lou’s tutorials but they seem very detailed, I might have to take a look at some point.

For what it’s worth, I’m currently doing it like 3 different ways and I don’t think any of them are particularly recommended. :stuck_out_tongue:


@JoshNewans Thanks! I will check out that video this weekend.

Lou’s tutorial uses a dockerfile and a docker-compose.yaml file run through VS Code dev containers.

1 Like