Overview • Prerequisites • Directory Structure • How To Launch • Testing
This project is a part of Udacity's Robotics Software Engineer Nanodegree Program. In this project, I used ROSbot as a mobile robot and aws-robomaker-small-house-world as a gazebo world to replicate realistic simulation.
- The script file that performs mapping is
test_slam.sh
. This script is used to manually test SLAM.
- The script file that performs localization and navigation is
test_navigation.sh
. This script file is used for manual navigation test. The robot should be able to navigate in the environment after a 2D Nav Goal command is issued. - The file starts map_server node, amcl from package navigation node and move_base from navigation package node.To know more about this package, checkout my other project focused on amcl pakgae here.
This script file runs pick_objects node from pick_objects package in addition to the test_navigation.sh
. This file will send multiple goals for the robot to reach.The robot travels to the desired pickup zone, displays a message that it reached its destination, waits 5 seconds, travels to the desired drop off zone, and displays a message that it reached the drop off zone.
This script file runs add_marker node from add_marker package in addition to the test_navigation.sh
. and The node analyzes command line arguments, set marker properties and publishes topic visualization_marker to rviz.
The marker from 'add_marker.sh` should initially be published at the pickup zone. After 5 seconds it should be hidden. Then after another 5 seconds it should appear at the drop off zone. The home_service.sh file that will run all the nodes as:
- Initially show the marker at the pickup zone.
- Hide the marker once your robot reach the pickup zone.
- Wait 5 seconds to simulate a pickup.
- Show the marker at the drop off zone once your robot reaches it.
- Gazebo >= 7.0
- ROS >= Kinetic
- ROS navigation package
sudo apt-get install ros-${ROS_DISTRO}-navigation
- ROS map_server package
sudo apt-get install ros-${ROS_DISTRO}-map-server
- ROS move_base package
sudo apt-get install ros-${ROS_DISTRO}-move-base
- ROS amcl package
sudo apt-get install ros-${ROS_DISTRO}-amcl
- xterm
sudo apt-get install -y xterm
- make >= 4.1(mac, linux), 3.81(Windows)
- Linux: make is installed by default on most Linux distros
- Mac: install Xcode command line tools to get make
- Windows: Click here for installation instructions
- gcc/g++ >= 5.4
- Linux: gcc / g++ is installed by default on most Linux distros
- Mac: same deal as make - install Xcode command line tools
- Windows: recommend using MinGW
.Home-Service-Robot # Home-Service-Robot Project
├── catkin_ws # Catkin workspace
│ ├── images
│ ├── scripts
│ │ ├── add_marker.sh # shell script that launches the turtlebot , AMCL , rviz , and add_markers node
│ │ ├── home_service.sh # script file that launches home-service-robot
│ │ ├── pick_objects.sh # script file that launches the turtlebot , AMCL , rviz and your pick_objects node
│ │ ├── test_navigation.sh # Localization and Navigation Testing script
│ │ ├── test_slam.sh # SLAM testing script
│ ├── src
│ │ ├── add_markers
│ │ │ ├── src
│ │ │ │ ├── add_markers.cpp #add_marker node
│ │ │ ├── CMakeLists.txt
│ │ │ ├── package.xml
│ │ ├── aws-robomaker-small-house-world # folder that contains small-house world
│ │ ├── my_robot # my_robot package
│ │ │ ├── launch # launch folder for launch files
│ │ │ │ ├── mapping.launch
│ │ │ │ ├── robot_description.launch
│ │ │ │ ├── world.launch # Launches bookstore world
│ │ │ │ ├── teleop.launch # To drive the rosbot
│ │ │ ├── meshes # meshes folder for sensors
│ │ │ │ ├── astra.stl
│ │ │ │ ├── box.stl
│ │ │ │ ├── rplidar.stl
│ │ │ │ ├── upper.stl
│ │ │ │ ├── wheel.stl
│ │ │ ├── realsense2_camera # folder that contains launch files for realsense camera
│ │ │ ├── realsense2_description # folder that contains description files for realsense camera
│ │ │ ├── urdf # urdf folder for xarco files
│ │ │ │ ├── materials.xacro #contains material properties used in rosbot
│ │ │ │ ├── my_robot.xacro
│ │ │ │ ├── rosbot.gazebo #contains plugins to interact with rosbot
│ │ │ ├── worlds # world folder for world files
│ │ │ │ ├── empty.world
│ │ ├── pick_objects
│ │ │ ├── src
│ │ │ │ ├── pick_objects.cppadd_markers.cpp # pick_objects node
│ │ │ ├── CMakeLists.txt
│ │ │ ├── package.xml
│ │ ├── slam-gmapping # folder that contains launch file for SLAM testing
│ │ ├── teleop_twist_keyboard # folder that contains teleop node
│ │ ├── CMakeLists.txt # compiler instructions
$ cd /home/workspace/catkin_ws/src/
$ git clone https://github.com/Vamshi2198/Home-Service-Robot
$ source /opt/ros/${ROS_DISTRO}/setup.bash
Note : The world file proivided is empy because it only contains the url of remote repository, for this purpose you need to clone the aws-bookstore-world and place it inside your src folder. Also, delete the folder named aws-robomaker-bookstore-world manually before cloning.
$ cd /home/workspace/catkin_ws/src/Home-Service-Robot/src/
$ git clone https://github.com/aws-robotics/aws-robomaker-small-house-world
Also, repeat the same with teleop_twist_keyboard packages. i.e, remove the empty file folder and clone the packages
$ cd /home/workspace/catkin_ws/src/Home-Service-Robot/src/
$ git clone https://github.com/ros-teleop/teleop_twist_keyboard
$ cd /home/workspace/catkin_ws/
$ catkin_make
$ cd /home/workspace/catkin_ws/
$ source devel/setup.bash
$ ./home_service.sh
$ chmod +x <scriptfile>
if you want to test individual scrpits follow the same procedure as above.
After launching the home_service.sh
script file, you can see the marker appears in blue and is picked up and dropped off depending on the location parameters.
The code was tested on the following specifications:
- Processor:
Intel Core i7-10875H
- Graphics:
Nvidia GeForce GTX 1650 Ti 4GB GDDR6
- OS:
Ubuntu 20.04.3 LTS
- Kernal:
5.10.60.1-microsoft-standard-WSL2
- ROS:
noetic