The aim of this project is to build an autonomous mobile robot capable of localization, mapping and autonomous planning in real-time. This project is still under development.
- Raspberry Pi
- Arduino nano
- Arduino RP2040 Connect
- RP Lidar
- Full components list...
Main controller of the robot, handles main logic and runs the control loop.
The control loop is responsible for the continuous operation of the robot, handling perception, planning, and control tasks.
-
Perception
- State Prediction:
- Retreaves odometry data from Arduino RP2040
- Uses an Extended Kalman Filter (EKF) to predict the new state (x, y, th, v, w).
- Visual Odometry:
- Processes data from the Lidar to create a local map.
- Uses ICP to compute map transformation.
- State Update:
- Refines the predicted state using visual odometry data.
- Mapping:
- If mapping is enabled, expands the global map with lidar data.
- State Prediction:
-
Planning
- Control Commands: Depending on the control type (position or velocity), sends appropriate commands to the RP2040 to move the robot.
The loop runs continuously at a specified interval, ensuring the robot can navigate and map its environment in real-time.
[robot.py]
Handles velocity control of motors and wheel odomtery. Receives commands from the Robot Controller and translates them into motor actions using a PID control. Sends encoder data to the Robot Controller each loop. The Arduino RP2040 communicates with the Raspberry Pi via UART2. [arduino code, raspberrypi driver]
Graphical interface to allow the end-user to remotely control the robot while receiving camera streaming and sensors feedback. Connects to RaspberryPI with multiple socket connections.
