The TurtleBot projects were some of the basic building blocks for mobile robotics during my university degree. They gave me a chance to work through the parts of a mobile robot one at a time: how it finds a way through an environment, how it can interact with something, and how it figures out where it is. Most of the work was done in ROS, first in simulation and then with some tuning for the real robot.
Planning
The planning project was about getting the TurtleBot to explore an unknown environment. I implemented a frontier detector together with a global planner and a local planner, with the local part using a Dynamic Window Approach (DWA) to choose between possible velocity commands. The planner uses the map and laser data to find unexplored areas, generate a path towards them, and check the candidate trajectories against the robot’s hitbox before sending a command. A lot of the later work was parameter tuning, visualizing the DWA trajectories in RViz, and getting the behaviour to work on the real robot rather than only in simulation.
The source code is available in the planning-miniproject repository.
Intervention
The intervention project focused on making the robot do something in the world instead of only driving around it. I worked on the TurtleBot’s arm and gripper, including the kinematics, end-effector control, and the behaviours needed to pick something up. The behaviour tree waits for an ArUco marker, moves the arm to the corresponding pose, changes the gripper state, and coordinates the pickup sequence. There are also separate controllers for the base and the arm, so the project involved connecting the different ROS nodes and making the whole sequence work together.
The source code is available in the intervention-miniproject repository.
Localization
The localization project was about estimating the TurtleBot’s pose from its sensors. I started with differential-drive dead reckoning and then worked on combining the available measurements with an Extended Kalman Filter. The repository also contains experiments with LiDAR data, GTSAM, and split-and-merge line fitting, as well as tools for visualizing trajectories and generating plots from recorded bags. The commit history is a fairly good record of the process here: there was a lot of testing, parameter tuning, and trying different ways of turning the laser scan into something useful for localization.
The source code is available in the localization_miniproject repository.