{"id":16162457,"url":"https://github.com/sunsided/robond-homeservicerobot","last_synced_at":"2026-04-28T11:06:12.000Z","repository":{"id":141992945,"uuid":"269084835","full_name":"sunsided/RoboND-HomeServiceRobot","owner":"sunsided","description":"Picking up virtual objects, then dropping them off at a target location","archived":false,"fork":false,"pushed_at":"2020-06-05T11:23:14.000Z","size":6329,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-13T08:27:41.326Z","etag":null,"topics":["cpp","gazebo","gmapping-slam","ros","ros-kinetic","rviz","slam","udacity","udacity-nanodegree","udacity-robotics-nanodegree"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sunsided.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-03T12:40:32.000Z","updated_at":"2021-06-24T15:51:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"9089efcc-88cc-4f02-836d-fb66937a6a88","html_url":"https://github.com/sunsided/RoboND-HomeServiceRobot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2FRoboND-HomeServiceRobot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2FRoboND-HomeServiceRobot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2FRoboND-HomeServiceRobot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunsided%2FRoboND-HomeServiceRobot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunsided","download_url":"https://codeload.github.com/sunsided/RoboND-HomeServiceRobot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247589835,"owners_count":20963022,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","gazebo","gmapping-slam","ros","ros-kinetic","rviz","slam","udacity","udacity-nanodegree","udacity-robotics-nanodegree"],"created_at":"2024-10-10T02:30:14.181Z","updated_at":"2026-04-28T11:06:11.957Z","avatar_url":"https://github.com/sunsided.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Home Service Robot\n\nThe goal of this project is to bring together a couple of ROS/RViz/Gazebo concepts:\n\n- World and odometry simulation in Gazebo,\n- Visualization of the odometry, sensor and localization data, as well as virtual objects in RViz,\n- SLAM via gmapping, and\n- Adaptive Monte-Carle Localization via the AMCL package.\n\nThe robot in this scenario is tasked with picking up a virtual item from a start position,\nvisualized by a red sphere in RViz, in order to bring to to a goal position.\n\n![](.readme/pickup.webp)\n\nNavigation to the start and end positions is implemented in [`pick_objects_node.cpp`](src/pick_objects/src/pick_objects_node.cpp) and\nvisualization of the item is implemented in [`add_markers_node.cpp`](src/add_markers/src/add_markers_node.cpp).\n\n![](.readme/dropoff.webp)\n\nNote that in both cases, the start and goal positions are provided statically, and the whole\nimplementation can be (drastically) improved by publishing pick-up and drop-off locations via a dedicated topic.\n\nPrevious projects have shown that attempting to run SLAM on a synthetic world like this are bound to fail.\nHere's the intermediate result after leaving from the start position and taking a left turn around the\ncenter triangular room, back to the start position:\n\n![](.readme/slam.png)\n\nBecause this clearly fails, the map was instead created using the `pgm_map_creator` node directly from Gazebo\nand then retouched to add in doors.\nAdding more (natural) textures and items to this world would have improved SLAM, but also\ndeviated a bit from the main idea of this repo. Again, investing more time here would make this quite an\ninteresting project overall.\n\n---\n\nTo run the code, execute either one of these scripts; each of them will spin up all nodes required\nfor the individual test task at hand: \n\n- [`src/scripts/test_slam.sh`](src/scripts/test_slam.sh) for testing SLAM,\n- [`src/scripts/test_navigation.sh`](src/scripts/test_navigation.sh) for testing AMCL navigation,\n- [`src/scripts/pick_objects.sh`](src/scripts/pick_objects.sh) for testing navigation automation,\n- [`src/scripts/add_markers.sh`](src/scripts/add_markers.sh) for testing markers,\n- [`src/scripts/home_service.sh`](src/scripts/home_service.sh) for running the actual project.\n\nMake sure to `catkin_make` and `source devel/setup.bash` the workspace before.\n\n---\n\nTo build the project, you can try executing `./run-nvidia.sh` to drop\ninto an X11 aware Docker container with NVIDIA GPU support.\n\n\n## Docker environment\n\nAn issue exists with ROS Kinetic and TurtleBot in Docker, since the TurtleBot packages rely on\n`librealsense`, which in turn depends on a Kernel module that cannot be installed. This is pointed out by\n[IntelRealSense/librealsense#4781](https://github.com/IntelRealSense/librealsense/issues/4781), which\n(thankfully) also provides a workaround. That workaround is implemented in [`docker/build-librealsense.sh`](docker/build-librealsense.sh) and is executed as part of the Docker image build in [`build-docker.sh`](build-docker.sh).\n\n## Building with CLion IDE\n\n**Note:** This does not _really_ work, as CLion will be unable to find generated headers. It's still a bit\n          better than doing everything the hard way.\n\nThe full requirements for setting up CLion are given in the [sunsided/robond-ros-docker](https://github.com/sunsided/robond-ros-docker)\nrepository. In short, run SSHD in Docker, configure a Remote Host build to connect to it, then configure\nthe your build settings for ROS. For this repo and the included Dockerfile, this configuration will do:\n\n**CMake options:**\n\n```\n-DCATKIN_DEVEL_PREFIX:PATH=/workspace/devel -DCMAKE_PREFIX_PATH=/workspace/devel;/opt/ros/kinetic;/opt/ros/kinetic/share\n```\n\n**Environment:**\n\n```\nROS_ROOT=/opt/ros/kinetic/share/ros;ROS_PACKAGE_PATH=/workspace/src:/opt/ros/kinetic/share;ROS_MASTER_URI=http://localhost:11311;ROS_PYTHON_VERSION=2;ROS_VERSION=1;ROSLISP_PACKAGE_DIRECTORIES=/workspace/devel/share/common-lisp;ROS_DISTRO=kinetic;ROS_ETC_DIR=/opt/ros/kinetic/etc/ros;PYTHONPATH=/opt/ros/kinetic/lib/python2.7/dist-packages;PKG_CONFIG_PATH=/workspace/devel/lib/pkgconfig:/opt/ros/kinetic/lib/pkgconfig:/opt/ros/kinetic/lib/x86_64-linux-gnu/pkgconfig;LD_LIBRARY_PATH=/workspace/devel/lib:/opt/ros/kinetic/lib:/opt/ros/kinetic/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH;PATH=/opt/ros/kinetic/bin:$PATH\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsided%2Frobond-homeservicerobot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunsided%2Frobond-homeservicerobot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunsided%2Frobond-homeservicerobot/lists"}