/optical-odometry

Alternative method to generate odometry data for indoor robots using optical flow sensor.

Primary LanguagePython

Description

Alternative method to generate odometry data for indoor robots using optical flow sensor.

Note: This branch tests the ideology by utilizing RGB camera and performing cross corelation algorithm in gazebo simulation environment.

Devices that can be used as optical flow sensors

  • USB mouse - requires USB driver
  • Optical Flow sensor module, e.g MATEKSYS 3901-L0X, Avago ADNS-9500 - requires low level communication driver as well as has some minimum height issues.
  • General Purpose Camera, e.g RaspberryPi camera - requires to design a custom cross-corelation algorithm.

Challenges:

Performance highly depends on the surface of the ground. Rough terrains, high reflective surfaces are not suitable.

Node Structure:

  • Low level driver: Communicates with hardware : publishes data on individual sensor topic - x2 for each sensor
  • High level driver: which publishes data on topic odom by subscribing to individual sensor topics and performing the mathematical operations.

Parameters:

  • Position of sensor from center of robot - x, y, yaw

Topics:

  • /optical_flow_sensor_a
  • /optical_flow_sensor_b
  • /odom

Services:

  • Reset initial pose

Frames:

  • odom => base_link

⚠️ Note: The initial position fo the robot is consider to be that from when the launch file is launched.

Mathematical Model

Note: Naming Convention: RGB => x, y, z

Positive direction for rotation follows right hand thumb.

General Math Model

(Rx)M1: Translation in x-direction of Robot interpreted by Sensor M1
(Ry)M1 : Translation in y-direction of Robot interpreted by Sensor M1
(Rψ)M1 : Rotation about z-axis of Robot interpreted by Sensor M1

θ, (M1)θ : Orientational offset of sensor M1 wrt Robot
(M1)px : Positional offset of sensor M1 wrt Robot in x-direction
(M1)py : Positional offset of sensor M1 wrt Robot in y-direction

Rx : Translation in x-direction of Robot
Ry : Translation in y-direction of Robot
Rψ : Rotation about z-axis of Robot

Special Case

Tested On

  • Ubuntu 22.04
  • ROS2 Humble
  • Gazebo Classic V11

Usage

To test the system in simulation environment,

Clone repository in your workspace

git clone git@github.com:maker-ATOM/optical-odometry.git

and perform,

colcon build --packages-select optical_odometry_gazebo --symlink-install

in the root of your workspace.

Launch the bringup file which launches rviz2, gazebo and spawns the turtlebot3.

ros2 launch optical_odometry_gazebo bringup.launch.py

ToDos

Issues

Handy Commands