This month I am following Dr John Vial 's 28-day robotics challenge.
The program blends ideas from teaching sprints, atomic habits, and the build in public manifesto.
I will document the process and share daily progress updates and key learnings in this repo as well as this twitter thread
Check out also my notes on the Live Sessions
- investigate the
/slam_toolbox
node usingros2 note info /slam_toolbox
and see what it is publishing. Maybe there is something you can use there? - fork, symlink or copy
bar_ws
to commit changes - move large files (currently inside
raw_video
folders) somewhere where they will be backed up e.g. in Dropbox
Video | Day | Title | Highlights |
---|---|---|---|
![]() |
Day 0 | 3 Ways To Get You Computer Setup With Robotics - The easy way, the hard way and the dangerous way | Setting things up. The repo provides a containerized environment super easy to setup. Leveraging WLS, docker and the Dev Containers VS Code extension eliminates the need to fiddle with dual boot, ubuntu or ROS installs version compatibility, or dependencies. |
![]() |
Day 1 | The Right Way And The Wrong Way To Drive A Robot | Day 1 started off easy with some simple teleop in simulation. Two highlights: first, I loved the 3D-scanned real scene in Gazebo, way more immersive than your usual turtlebot tutorial. Second, I finally got the chance to test OBS Studio for video production. Check the video! |
![]() |
Day 1_Bonus | 3D-Scanning And Importing Real Scenes Into Gazebo | I got trapped in this rabbit hole: scanning a real scene with Scaniverse, repairing the mesh in Blender and Instant Meshes, making a simplified collision model in FreeCAD and importing it all into Gazebo |
![]() |
Day 2 | How Robotic Systems Communicate And How You Can Listen | Day 2 brushes up on basic ros2 CLI commands which came actually handy as I spent ages troubleshooting pesky issues that prevented running the Krytn teleop. In the end it had probably been me clumsily touching things from inside and outside the container who caused the problem in the first place. In the meantime, the "Hard way" (running ubuntu "baremetal", no containers) is still not working for me. |
![]() |
Day 3 | Robot Eyes Why You Need To See Through Them | Day 3: looking through the eyes of the robot |
![]() |
Day 4 | Don't Let Your Robot Become Lost - How To Give It A Map | Day 4: mapping Game City café and exploring the contents of the launch files. I am now working bare metal in ubuntu 24.04, and it makes a difference: gazebo, rviz visualizations run smooth! |
![]() |
Day 5 | Self Driving Robot? How To Make A Robot Autonomous | Day 5: ROS2 package Nav2 enables autonomous navigation. Under the hood, a global planner calculates the best route to the goal using a static global costmap, and a local planner constantly scans for obstacles near the robot in a local costmap, and updates the path to avoid surprises. |
![]() |
Day 6 | How To Control An Autonomous Robot With Code Instead Of A GUI | Day 6 - we wrote a ROS2 Python node to publish directly to /goal_pose instead of manually clicking to choose a destination. Useful e.g. for docking the robot, although in practice it'll need much more refinement - actions, waypoints, sensors etc. Started to explore waypoints but had to move on. |
![]() |
Day 7 | How To Use CAD To Create Custom Robot Links | Day 7 - sketching a simple accessory for the robot in FreeCAD. The course touches on sketching over images/drawings, thinking pads and pockets, and keeping the model simple. From experience, I would add: using repositories of 3D models for components such as GrabCAD, and exporting the simplified model to STL. |
![]() |
Day 8 | How To Add Your Custom Link To Your Robot | Day 8 - I finally could give the CROSS FreeCAD workbench a try today, and I am impressed. Just the GUI interface to determine frame of reference transforms for joints and links and the 1-click export for a full robot description package make it well worth the setup effort. Another highlight was the URDF/xacro walkthrough and troubleshooting tips. Oh, and my Krytn robot is happily driving around with a shiny new tray. |
![]() |
Day 9 | 3 Steps To Finding Problems To Solve With Wheeled Robots & How To Choose When You Have Too Many | Day 9 - the task today was to research on configurations and applications of wheeled robots. I got so carried away I ended up making a long(ish) video and uploaded it to Youtube. |
![]() |
Day 10 | How To Control A Robot Arm - The Easy Way | Day 10 - First contact with MoveIt, the ROS2 package for robotic arms. From simple pick-and-place to advanced manipulation, MoveIt simplifies a lot motion planning and control. Plus, the spawning sequence at launch needs a bit more attention. |
![]() |
Day 11 | 7 Useful Commands That Will Let You Interrogate Any ROS 2 System | Day 11 -Time to take the plunge into the ROS2 CLI. As a bonus, I came across ros_network_viz and gave it a try - way better than the old rqt_graph to visually explore a ROS2 system, their elements and interdependencies |
![]() |
Day 12 | 3 Steps To Designing A Simple Gripper In CAD | Day12 - making a gripper for the robotic arm using FreeCAD and the CROSS workbench |
![]() |
Day 13 | How To Install A Gripper On Your Robot Arm In Simulation | Day 13 - installing the new gripper on the robotic arm, this time directly editing URDF and XACRO |
![]() |
Day 14 | How To Setup The ROS2 Standard For Joint Control And How To Control Joints With Code | Day 14 - configuring ros2_control for the gripper joint and creating a node that makes it move. Quite involved, and couldn't quite make it work reliably |
![]() |
Day 15 | The Easy Way To Setup Your Robot Arm - Configuring MoveIT 2 | Day 15 - configuring my_robot_arm involves defining self-collision, planning groups, named poses, ros2_control and MoveIt controllers, launch files… ROS is very verbose, so this means a zillion lines of python, yaml & urdf. Fortunately the MoveIt wizard guides you step by step and writes all the code for you ready to be integrated in your package. Mind you, there's a fair amount of manual tuning needed and I spent hours troubleshooting obscure error messages. Still worthwhile if we compare this with the effort it took on Day 14 manually configuring a single joint! |
![]() |
Day 16 | How To Control A Full Robot Arm With Code | Day 16 - writing a ROS2 node in Python that allows autonomously operating my_robot_arm instead of having to manually select positions then launching Plan & Execute |
![]() |
Day 17 (part 1) | How To Create A Gazebo World - Adding Something To Pickup | Day 17 – Part 1: Care for a Coke? I spawned a coffee table and a can of Coke into my simulated world, and taught the robot arm how to pick up the can. We no longer have a robot in the void, now we can actually do something useful with it - a massive leap forward. But teleoperating the arm while looking across to the Gazebo screen to "guesstimate" is really hard work. There must be a better way, and there is! |
![]() |
Day 17 (part 2) | How To Create A Gazebo World - Adding Something To Pickup | Day 17 - Part 2: Catch me if you can! Adding a RGB-D sensor (a depth camera) really helps - we can now see through our robot's eyes in RViz. Still, grasping is a remarkably difficult problem in robotics and it seems that our current setup does a terrible job at modelling friction |
![]() |
Day 18 | How To Stop Your Robot Arm From Hitting Things - Adding Collision Avoidance Sensors To Your Robot Arm | Day 18 - Safety first! Today I set up MoveIt with 3D perception to plan safe trajectories - and keep the robot arm from crashing into things. However, gripping requires contact! I wrote a ROS2 node to disable collision avoidance in the vicinity of the Coke can, so the robot could eventually grasp it. RViz has been most unhelpful recently, constantly misbehaving, crashing and throwing tantrums. Still, with some help from Dr Vial, I managed to make it. |
![]() |
Day 19 | How To Find Problems That Robot Arms Can Solve And How To Choose One | |
![]() |
Day 20 | A Starter Template For Designing Wheel Robots In CAD For ROS | |
![]() |
Day 21 | 3 Things To Consider When Choosing Your Robot Project | |
![]() |
Day 22 | How To Use Photos To Quickly Create Realistic Robot Models In CAD | |
![]() |
Day 23 | Exporting Your Robot From FreeCAD And Configuring ROS 2 Control So You Can Teleoperate It | |
![]() |
Day 24 | 3 Tips To Create a compelling an environment for your robot | |
![]() |
Day 25 | 2 Important Sensors To Consider Adding To Your Robot | |
![]() |
Day 26 | How To Iterate On A Robot Simulation To Make It More Realistic | |
![]() |
Day 27 | How To Configure Mapping & Navigation So Your Custom Robot Can Drive Itself | |
![]() |
Day 28 | How To Control Your Custom Robot With Code To Make It Really Autonomous |
GIT