Elsa
This project builds a ROS-based Autonomous Robot from scratch
Install / Use
/learn @srujanpanuganti/ElsaREADME
ELSA - Explore, Localize, Map Simultaeneously and Act
<p align="center"> <img src="images/elsabot_2.jpeg" alt="elsa" width="600"> </p> <p align="center"> <em>ELSA Robot</em> </p>Project Dependencies
- To install teleop-twist-keyboard
sudo apt-get install ros-melodic-teleop-twist-keyboard
Project information:
- The project has two packages
elsaandros_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_datatopic - Publish encoder ticks to
/ticks_pub/lwheel_ticksand/ticks_pub/lwheel_tickstopics - Publish Odometry data to
/odomtopic - 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_ticksand/arduino/lwheel_tickstopics - Publish velocoties to
/cmd_veltopic- Publish sample Twist msg -- Seems like there's an error/lag
- Debug the motor_driving
- Finish the base_controller to subscribe to
/cmd_veltopic 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!
<p align="center"> <img src="images/elsa2.gif" alt="elsa" width="1080"> </p> <p align="center"> <em>ELSA Result</em> </p>- The below image shows the
/base_linkand/odomcoordinate frames and trasformations between them in rviz
- The below image shows the robot movement in rviz based on the odometry published to
/odomtopic
- The below image shows the laserscan from YDLIDAR X2 being pubilshed to
/scan
- The below image shows the TF tree based on coordinate transforms being published to
/tf
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
Related Skills
node-connect
351.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
