This repository is for the same goal of the prototype edited to be suitable for our Smart Wheelchair final product; Indoor Navigation using ROS. It also contains the description, mapping, localization, and navigation code for the wheelchair which takes the movement order from the Gaze Controller.
- The patient's house is scanned, a complete grid-based map is created and saved, then all final destinations are defined on the map through coordinates.
- The desired rooms/final goals location are mapped to i.e. letters A, B, C, and D which is sent to ROS system to move the wheelchair to the target place through a path free of obstacles to ensure safety.
- While ROS System is run in this mode, the user is asked to the next destination.
- slam: wheelchair description
URDF
, simulationGazebo
, visualizationRViz
, and mappinggmapping launch file
. - move_robot: sending goals to the ROS navigation Stack
wheelchair navigation
AMCL and Navigation parameters. - odom_pub: taking
odometry information
from encoder ticks on Arduino. - teleop_twist_keyboard: keyboard control of the wheelchair
Steps to build "each in a new terminal tab"
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
cd src/
git clone https://github.com/RoboBrain23/ROS_Wheelchair.git
cd ~/catkin_ws/
catkin_make
To launch the urdf Wheelchair description
model in Gazebo
, start to view the simulated model and take information from the robot's camera in RViz
, and moving the wheelchair in gazebo by keyboard
roslaunch slam gazebo.launch
cd catkin_ws/src/slam/rviz
rviz -d map.rviz
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
- After setup, run SLAM:
roslaunch slam gmapping.launch
cd catkin_ws/src/slam/rviz
rviz -d map.rviz
To create a map of your environment, drive the wheelchair around the environment you want to map.
wheelchair_map.mp4
Once you completed mapping the whole environment, save the map:
rosrun map_server map_saver ~/catkin_ws/src/slam/maps/name_of_map
The final scanned in previous demo be like:
Autonomous Navigation can be done using the following -- giving the final destination:
launch the urdf model in Gazebo, and RViz visualization using the saved map
roslaunch slam gazebo.launch
cd catkin_ws/src/slam/rviz
rviz -d navigate.rviz
Using amcl package for localization, Run amcl.launch
. The amcl algorithm implements Monte Carlo localization for state estimation.
We will use amcl with a map built in the previous step. In the second part, we will create our map using the gmapping package and then use the resulting map for localization.
The move_base package implements an action that will attempt to reach it with the wheelchair. This node links a global and local planner to accomplish its global navigation task. The move_base node also maintains two costmaps, one for the global planner and another for a local planner that are used to accomplish navigation tasks. Run move_base.launch
.
roslaunch slam amcl.launch map:='name_of_map'
roslaunch slam move_base.launch
wheelchair_nav_gui.mp4
- Red arrows, in the beginning, indicate the wheelchair probable location in RViz.
- Set a goal for the wheelchair in RVIZ (Click "2D Nav goal" and pinpoint the desired location and direction on the map).
- Green line indicates the path planned.
- The wheelchair avoids obstacles "according to the pre-saved map" and also
Dynamic obstacles
that are added when it navigates.
launch the wheelchair model in Gazebo and simulate in RViz
roslaunch slam gazebo.launch
cd catkin_ws/src/slam/rviz
rviz -d navigate.rviz
Then run amcl.launch
, giving the name of the map you have created and saved. Run move_base.launch
to move the wheelchair though the path planned by the global planner to accomplish the global navigation task. Finally send the location coordinates of the gaol to navigation-stack using move_robot node
:
roslaunch slam amcl.launch map:='name_of_map'
roslaunch slam move_base.launch
rosrun move_robot move_robot