ROS IMU+Odometry project - dead reckoning navigation for robot
Budget: $30 – $250 USD
I have a driving robot based on a raspberry pi 4 B for which I need to design a dead reckoning navigation. After driving e.g. 1m, I would like to receive information from sensors that I have traveled about 1m (I know that the accuracy may vary). After starting the navigation, I would like a point simulating a robot to appear in Rviz and record its track and plots the distance traveled. Information about the distance traveled was displayed in the RVIZ or in a separate window.
As IMU I use Vectornav where the libraries are available here:
https://github.com/dawonn/vectornav
As Encoder I use DFRobot motor and encoder. Libraries and info are available here:
https://github.com/DFRobot/DFRobot_RaspberryPi_Motor
Design:
1. Turn on the robot.
2. Run roscore, run nodes (attachment 1),
3. I run the RVIZ and receive a visualization of the position and distance traveled,
4. I receive information about the distance and direction traveled
-Node Vectornav IMU / Odom- from this node we get accelerations and orientation (if needed)
-Node Encoders - from this node we get information about the distance traveled (wheel diameter is 7cm = 0.07m)
-Dead reckoning navigation node - receiving information from Vectornav from IMU (linear acceleration) and from encoders, and on the basis of both data we determine the distance traveled - how much the robot has traveled and whether it has moved and where. I suppose the IMU data should be integrated to get the speed and calculate the distance. More in tutorials below (linked)
-Rviz node- visualization of the traveled distance and position in RVIZ
Comments:
When fusing data, please compare the data with the IMU and the encoders. For example, if the difference between the IMU and the encoder is greater than 10 cm, consider the data from the IMU as true, because the wheels may have slipped. And if the encoder is not moving and the data from the IMU shows motion, do not show it as motion.
I attached nodes graph and data received from Vectornav library.
For more information or to clarify any of the issues please contact me.
Tutorials based on which you can model:
-How to fuse Odometry & IMU using Robot Localization Package
https://www.youtube.com/watch?v=QZ5q59H2qaI
-Sensor Fusion in Mobile Autonomous Robot | ROS | IMU + Wheel Odometry | Kalman Fliter
https://www.youtube.com/watch?v=0yICGqriN3g
http://docs.ros.org/en/melodic/api/robot_localization/html/index.html
-How to know if robot has moved one meter using Odometry
https://www.youtube.com/watch?v=CixYuADbUYE
-Tracking Raspberry Pi Robot's Distance with Encoders
https://www.youtube.com/watch?v=cLtMcqRetO0&t=266s
-Understanding dead reckoning robot navigation with ROS
https://www.youtube.com/watch?v=tLv8uI50Bdw
Libraries that can come in handy:
https://github.com/nahmed087/Vectornav-ROS-Driver
https://github.com/KumarRobotics/imu_vn_100
https://github.com/akashgaurav/vectornav
https://github.com/nisargnp/DeadReckoning/tree/master/app/src/main/java/nisargpatel/deadreckoning/stepcounting (The principle of counting based on dead reckoning navigation on the phone)
It also can help:
https://navigation.ros.org/setup_guides/index.html
https://www.purplemath.com/modules/sectors3.htm
https://en.ans.wiki/105/how-to-convert-angular-velocity-in-revolutions-per-minute-rpm-to-linear-speed-in-meters-per-second-m-slash-s.html
https://forum.arduino.cc/t/how-to-measure-speed-distance-direction-and-acceleration-using-encoders/687895/9.html
As IMU I use Vectornav where the libraries are available here:
https://github.com/dawonn/vectornav
As Encoder I use DFRobot motor and encoder. Libraries and info are available here:
https://github.com/DFRobot/DFRobot_RaspberryPi_Motor
Design:
1. Turn on the robot.
2. Run roscore, run nodes (attachment 1),
3. I run the RVIZ and receive a visualization of the position and distance traveled,
4. I receive information about the distance and direction traveled
-Node Vectornav IMU / Odom- from this node we get accelerations and orientation (if needed)
-Node Encoders - from this node we get information about the distance traveled (wheel diameter is 7cm = 0.07m)
-Dead reckoning navigation node - receiving information from Vectornav from IMU (linear acceleration) and from encoders, and on the basis of both data we determine the distance traveled - how much the robot has traveled and whether it has moved and where. I suppose the IMU data should be integrated to get the speed and calculate the distance. More in tutorials below (linked)
-Rviz node- visualization of the traveled distance and position in RVIZ
Comments:
When fusing data, please compare the data with the IMU and the encoders. For example, if the difference between the IMU and the encoder is greater than 10 cm, consider the data from the IMU as true, because the wheels may have slipped. And if the encoder is not moving and the data from the IMU shows motion, do not show it as motion.
I attached nodes graph and data received from Vectornav library.
For more information or to clarify any of the issues please contact me.
Tutorials based on which you can model:
-How to fuse Odometry & IMU using Robot Localization Package
https://www.youtube.com/watch?v=QZ5q59H2qaI
-Sensor Fusion in Mobile Autonomous Robot | ROS | IMU + Wheel Odometry | Kalman Fliter
https://www.youtube.com/watch?v=0yICGqriN3g
http://docs.ros.org/en/melodic/api/robot_localization/html/index.html
-How to know if robot has moved one meter using Odometry
https://www.youtube.com/watch?v=CixYuADbUYE
-Tracking Raspberry Pi Robot's Distance with Encoders
https://www.youtube.com/watch?v=cLtMcqRetO0&t=266s
-Understanding dead reckoning robot navigation with ROS
https://www.youtube.com/watch?v=tLv8uI50Bdw
Libraries that can come in handy:
https://github.com/nahmed087/Vectornav-ROS-Driver
https://github.com/KumarRobotics/imu_vn_100
https://github.com/akashgaurav/vectornav
https://github.com/nisargnp/DeadReckoning/tree/master/app/src/main/java/nisargpatel/deadreckoning/stepcounting (The principle of counting based on dead reckoning navigation on the phone)
It also can help:
https://navigation.ros.org/setup_guides/index.html
https://www.purplemath.com/modules/sectors3.htm
https://en.ans.wiki/105/how-to-convert-angular-velocity-in-revolutions-per-minute-rpm-to-linear-speed-in-meters-per-second-m-slash-s.html
https://forum.arduino.cc/t/how-to-measure-speed-distance-direction-and-acceleration-using-encoders/687895/9.html