Skip to content

This project builds a ROS-based Autonomous Robot from scratch

License

Notifications You must be signed in to change notification settings

srujanpanuganti/elsa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ELSA - Explore, Localize, Map Simultaeneously and Act

elsa

ELSA Robot

Project Dependencies

  • To install teleop-twist-keyboard
sudo apt-get install ros-melodic-teleop-twist-keyboard
  • To install gmapping clone and build this
  • To install robot_localization, clone and build this

Project information:

  • The project has two packages elsa and ros_arduino_bridge
  • Follow the below instructions to build the project
cd ~/catkin_ws`
source devel/setup.bash
catkin_make --only-pkg-with-deps elsa
catkin_make --only-pkg-with-deps ros_arduino_bridge
  • Follow the below commands to execute the project
roslaunch elsa elsabot.launch
  • Use the below command to do keyboard teleop
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
  • To launch gmapping
roslaunch gmapping slam_mapping_pr2.lanch
  • To save the map
rosrun map_server map_saver -f /tmp/my_map
  • To use robot_localization package for filtered odometry data
    • roslaunch robot_localization ekf_template.launch --> This will be merged to the elsa project, as we are required to edit the EKF parameters according to our requirement

Docs:

  • Coordinate Transformations and Robot Dimensions can be found at docs/Robot dimensions and coordinate transformations.pdf
  • More info about the references used is provided in the reference section

Finished tasks:

  • Publish imu to /imu/raw_data topic
  • Publish encoder ticks to /ticks_pub/lwheel_ticks and /ticks_pub/lwheel_ticks topics
  • Publish Odometry data to /odom topic
  • Configured the ROS_Arduino_Bridge
  • Debug the ROS_Arduino_Bridge
    • Solder Arduino Nano
    • Connect the Arduino Nano to the Motor_Driver
    • Edit the scripts for the second USB port (/dev/ttyUSB*)
  • Publish encoder ticks to /arduino/lwheel_ticks and /arduino/lwheel_ticks topics
  • Publish velocoties to /cmd_vel topic
    • Publish sample Twist msg -- Seems like there's an error/lag
    • Debug the motor_driving
  • Finish the base_controller to subscribe to /cmd_vel topic to move the robot_base
  • Write a node to Publish raw images to a ROS topic
    • Resolve cv_bridge and opencv4 issue for ROS - the issue is specific to ROS-melodic and OpenCV4 combination
  • Transport Pi camaera v2 video stream using sensor_msgs/Image to a ROS topic
  • Setup either YDLidar X4 for 2D map creation - needed extra cable to power the LIDAR, since the RPi cannot provide enough power to drive the LIDAR motor
  • visualized the tf and odometry in rviz
    • Fix the odometry axis and tf axis alignment - made sure all the axis are aligning in same direction
  • rename the coordinate frames of the ydlidar to match with our convention
  • fix encoder direction
  • fix the motor direction
  • Use teleop_twist_keyboard to move the robot -- works perfectly
  • Use robot_localization package to filter the Odometry msg using ekf_lozalisation node
    • check if everything is working as expected -- need to tweak covariance matrix for better estimation
  • Fix the direction issue with rviz visualization -- Problem is with Odometry calculation -- robot_localization is solving this
  • Use slam techniques for mapping - Works
  • Tune the PID controller

To Do:

  • Use camera data to obtain the images to do SFM and build the 3D_point_cloud_map

Results:

Elsa in Action!

elsa

ELSA Result

  • The below image shows the /base_link and /odom coordinate frames and trasformations between them in rviz

tf

Coordinate Transformations (TF) in rviz

  • The below image shows the robot movement in rviz based on the odometry published to /odom topic

odom

Odometry of the ELSA Robot in rviz

  • The below image shows the laserscan from YDLIDAR X2 being pubilshed to /scan

ls

Laser Scan in rviz

  • The below image shows the TF tree based on coordinate transforms being published to /tf

tf_tree

TF Tree

References:

  • The TF tree can be found at elsa/docs/frames.pdf
  • The project uses the ROSArduinoBridge Package. However, many modifications are made according to the requirements
  • The Project also uses the SparkFun_RedBot_Arduino_Library Arduino Library. This library has been modified a little bit according to our requirement. The updated library can be found in /elsa/elsa/arduino/
  • The Projects also uses few insights from the package diff_drive
  • The project refers several tutorials from ROS wiki
  • The topics are published according to the coordinates frames as per REP103 standards and REP105 standards
  • The YDLIDAR uses the package provided by EAI YDLIDAR github
  • The Project uses robobt_localization package to fuse imu and encoder-based Odometry data, to provide filtered pose. Technical documentation for the robot_localization package can be found here