ROS based indoor guidance and delivery robot for hospitals.
Authors:
- Anubhav Paras (Driver)
- Sakshi Kakde (Navigator)
- Siddharth Telang (Design Keeper)
In recent times the need for robots in hospitals is increasing rapidly. The applications range from high-end surgery to assisting staff with non-patient-facing tasks. Most of the times at the hospitals, we wish to keep minimum human contact. However, as the number of patients and visitors in the hospitals is soaring, we need more people to assist the medical staff in their activities and share the workload. Thus, a balance is required between these two where we can have safety(minimum people) as well as shared workload. In such a scenario, this balance can be achieved if robots are deployed to assist the medical faculty in their day-to-day work. The tasks of such assistant robots can be:
- Disinfecting the hospital area
- Fetching and delivering items from central supply
- Distributing masks, PPE kits, sanitizers
- Delivering medications to patients
With this thought, we propose to ACME robotics our assistant robot, NurseBot, that would have the following capabilities:
- Service-triggered guidance : the robot would be be able to guide anyone from one part of the hospital to another,for example, patients from their room to radiology room,guiding new visitors from entry to their required location and back to exit, and guiding people in case of emergency.
- Service-triggered delivery : Carrying medicines, sup-plies, test samples, PPE kits, etc. from a pickup location to target location within the hospital.
MIT License
Copyright (c) 2021 Anubhav Paras, Sakshi Kakde, Siddharth Telang
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Link to the quadchart.
Link to proposal report.
- ROS-based modules (mapping, navigation, planner and control) in C++ for a robot to guide people and deliver items in an indoor hospital environment.
- Simulations of the modules in Gazebo and RViz.
- Overview of proposed work including timeline, risks, mitigations and UML diagrams.
- GitHub repository with README.
- Continuous integration and code coverage with TravisCIand Coveralls.
- Memory leaks check and profiling using Valgrind.
- Developer-level documentation.
- In case the fast dynamic obstacles are not detected, we will put a constraint that the dynamic obstacles should be stationary.
- In case the local path planner fails for dynamic obstacles,the robot will simple wait for the obstacle to disappear.
The following are the current designs for the Nursebot ROS package:
Activity flow diagrams can be found here.
The following are the custom ros msg and ros action being used by publisher-subscriber and ros action client-server respectively:
Agile Development Process will be used in the development process with Test-Driven Development.
Refer the document for product backlog.
Refer the sheet for AIP sprint.
- Ubuntu 18.04(LTS)
- C++ 14+
- CMake
- OpenCV
- Travis CI
- Coveralls
- OpenCV 4.5.0 (covered under the open-source Apache 2 License)
- ROS Melodic
- RViz, Gazebo 9.0
- TIAGo++ ROS Package
- Eigen 3.4 the Mozilla Public License 2.0
- Boost 1.65 Boost software license
- GMock BSD 3-Clause "New" or "Revised" License
- GTest BSD 3-Clause "New" or "Revised" License
- Make sure you have ROS Melodic installed in your computer. If not, refer to site.
sudo apt-get install -y -qq lcov
pip install --user cpp-coveralls
-
Create a workspace:
mkdir ~/nursebot_ws cd ~/nursebot_ws
-
Copy the tiago_dual_public.rosinstall file in
~/nursebot_ws
. Then run the following instruction in order to clone all the required repositories within the workspace:rosinstall src /opt/ros/melodic tiago_dual_public.rosinstall
-
Set up rosdep
rosdep update
-
Then you may run the following instruction to make sure that all dependencies referenced in the workspace are installed:
rosdep install --from-paths src --ignore-src -y --rosdistro melodic --skip-keys="opencv2 opencv2-nonfree pal_laser_filters speed_limit_node sensor_to_cloud hokuyo_node libdw-dev python-graphitesend-pip python-statsd pal_filters pal_vo_server pal_usb_utils pal_pcl pal_pcl_points_throttle_and_filter pal_karto pal_local_joint_control camera_calibration_files pal_startup_msgs pal-orbbec-openni2 dummy_actuators_manager pal_local_planner gravity_compensation_controller current_limit_controller dynamic_footprint dynamixel_cpp tf_lookup opencv3 joint_impedance_trajectory_controller cartesian_impedance_controller omni_base_description omni_drive_controller"
-
Build the workspace:
sudo apt-get install ros-melodic-fiducials source /opt/ros/melodic/setup.bash catkin_make -DCATKIN_ENABLE_TESTING=0
cd ~/nursebot_ws/src
git clone https://github.com/anubhavparas/nurse-bot.git
cd ~/nursebot_ws/
catkin_make
source devel/setup.bash
-
First copy and/or replace the configurations/simple_office_with_people world folder in
~/.pal/tiago_maps/configurations/
folder. This folder contains the pre-build maps and their configs after gmapping. Note: Copy the exact folder with the same name with its content. -
To run the demo, run the launch file:
cd ~/nursebot_ws/ source devel/setup.bash
roslaunch nurse_bot nursebot_demo.launch
-
In another terminal run (this is for tag detection):
roslaunch nurse_bot nursebot_aruco_detect.launch
- To enable rosbag recording. By default it is disabled.
- This will store the rosbag recording in a file
home/<username>/.ros/recorded_topics.bag
roslaunch nurse_bot nursebot_demo.launch is_record_bag:=true
- This will store the rosbag recording in a file
-
All the current 17 tests (gtest=8, rostest=9) for this projects are passing.
-
GMock library has been used to create mock of dependent classes.
-
Mocks can be found at mock folder.
-
Mocks were created for the following classes:
-
Build the test:
cd ~/nursebot_ws/ catkin_make catkin_make run_tests (to run all the test executables) (or) catkin_make run_tests nursebot_gtest (to run specific executable) (or) cd ~/nursebot_ws/build make tests cd ~/nursebot_ws/ rostest nurse_bot nursebot_gtest.test rostest nurse_bot nursebot_aruco_test.test rostest nurse_bot nursebot_controllers_test.test rostest nurse_bot nursebot_server_client_test.test
-
tests can be run using
rostest
too, once$catkin_make run_tests
have been run once.source devel/setup.bash rostest nurse_bot nursebot_gtest.test rostest nurse_bot nursebot_aruco_test.test rostest nurse_bot nursebot_controllers_test.test rostest nurse_bot nursebot_server_client_test.test
-
Test Results:
Run cppcheck: Results are stored in ./results/cppcheck_process.txt
, ./results/cppcheck_result.txt
sh run_cppcheck.sh
Run cpplint: Results are stored in ./results/cpplint_result.txt
sh run_cpplint.sh
To install doxygen run the following command:
sudo apt-get install doxygen
To generate the doxygen documents:
doxygen doxygen.config
The documents are generated in ./docs/doxygen
folder.