Differential drive as a C++ library
+ Extended Kalman Filter math
+ translating it all into hand-coded software
= the hardest/coolest thing ever
Come on and S. L. A. M.!
This post is under construction!
This project was a practical introduction to robotic sensing, navigation, and machine learning in robotics.
It focused on bridging the gap between theoretical developments, simulation, and real hardware with an emphasis on developing low-level practical skills needed to implement algorithms from scratch in C++ on a real robot.
I coded fundamental robotic algorithms using C++ and the Robot Operating System (ROS) to implement my own SLAM on a Turtlebot3.
The basic navigation stack can be divided into three parts (and expanded into the following color-coded topics):
localization + mapping
feature-based mapping (online EKF)
localization + mapping
In order to divvy up the work over the course of ten weeks, and to provide some early insight into how various components relate to each other, the overall assignment was broken up into eight tasks.
A - adapt the model in the turtlebot3_description to fit the needs of this project. This allows for the visualization of a turtlebot3 model in Rviz.
B - write a "rigid2d" library for performing 2D rigid body transformations. For this task, we were not permitted to use any libraries other than the C++ standard library.
C - test the control of the turtlebot3 robot by driving a simulated turtle in a rectangular trajectory dictated by a node. Create a "/start" service to reset the environment and begin execution.
E - begin implementation of wheeled mobile robot kinematics. In particular, this task focused on developing (and visualizing) the software for differential drive control and dead-reckoning odometry.
F - implement basic turtlebot3 functionality and get familiar with the hardware. This task focused on the software that allowed control of the turtlebot3 from a computer.
G - write a simulator to simulate the robot kinematics and a sensor that detects the relative x, y positions of landmarks and a landmark ID used for landmark-based SLAM.
L - implement feature-based Kalman Filter SLAM.
S - implement the capability to sense landmarks for SLAM sensor measurements.
Mathematical derivations used to derive the relationship between wheel velocities and body twist are posted here. Associated software and its structure will be explained in a future revision of this post.