A research project for developing an autonomous differential drive mobile robot using ROS and the ROS navigation stack. See the research folder for notes about the project as I am researching and learning differential drive robots.
- Design a CAD model for a differential drive AGV with a 3D printed chassis
- Install Ubuntu and ROS Noetic on a SBC (Orange Pi 5)
- Create a ROS Package for the AGV
- Create URDF (Unified Robot Description Format) and xacro files
- Setup Simulation Environment with Gazebo
- Create Program for Embedded Microcontroller for Motor Control
- Publish Measured Wheel Velocities to ROS from Microcontroller
- Setup ROS Control
- Setup Hardware Interface to handle communication between microcontroller and ROS (using ROSSerial)
- Setup and Test diff_drive_controller. Tune PID values for wheel velocity control
- Create a teleop package for manual control of the robot using keyboard or joystick
- Setup RPLidar A1M8 Sensor Interface
- Create package for SLAM (Simultaneous Localization and Mapping) with slam_toolbox
- Generate a map of the environment using SLAM
- Integrate Robot Localization Package with IMU and Odometry
- Setup Navigation Stack with AMCL (Adaptive Monte Carlo Localization) and move_base
- Create Flask app to remotely control and monitor the robot
Generated a SLAM map of my basement using the graph-based SLAM algorithm from the slam_toolbox package. The map was generated using the RPLidar A1M8 sensor with a resolution of 0.3. Had some troubles getting asynchronous online SLAM to generate the map properly over my local network. As a result, I switched to Synchronous online SLAM and that seemed to resolve the issue.
Here is a Video demo of using slam_toolbox to generate a map of my basement with Synchronous Online SLAM.
- OpenCV Object Recognition with YOLOv7 (You Only Look Once) Model
- Flask Webserver for Teleoperation and Configuration of Robot