ELSA Robot
- To install teleop-twist-keyboard
sudo apt-get install ros-melodic-teleop-twist-keyboard
- The project has two packages
elsa
andros_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
- 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
- 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
- Use camera data to obtain the images to do SFM and build the 3D_point_cloud_map
ELSA Result
- The below image shows the
/base_link
and/odom
coordinate frames and trasformations between them in rviz
Coordinate Transformations (TF) in rviz
- The below image shows the robot movement in rviz based on the odometry published to
/odom
topic
Odometry of the ELSA Robot in rviz
- The below image shows the laserscan from YDLIDAR X2 being pubilshed to
/scan
Laser Scan in rviz
- The below image shows the TF tree based on coordinate transforms being published to
/tf
TF Tree
- 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