├── .github └── PULL_REQUEST_TEMPLATE.md ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── NOTICE ├── README.md ├── docs ├── .DS_Store └── images │ ├── personDetectionDiagram.png │ ├── screenshot01.png │ ├── screenshot02.png │ └── screenshot03.png ├── github_deploy.pem.enc ├── roboMakerSettings.json ├── robot_ws ├── .rosinstall └── src │ ├── LICENSE.txt │ └── person_detection_robot │ ├── CMakeLists.txt │ ├── config │ ├── cloudwatch_logs_config.yaml │ ├── cloudwatch_metrics_config.yaml │ ├── h264_encoder_config.yaml │ └── kvs_config.yaml │ ├── launch │ ├── deploy_person_detection.launch │ ├── kinesis.launch │ ├── monitoring.launch │ └── person_detection.launch │ ├── nodes │ ├── rekognize │ ├── rekognize_tts │ └── rotate │ ├── package.xml │ ├── setup.py │ └── src │ └── person_detection_robot │ └── __init__.py ├── scripts ├── build.sh ├── bundle.sh └── setup.sh └── simulation_ws ├── .rosinstall └── src ├── LICENSE.txt ├── aws_robomaker_simulation_common ├── CMakeLists.txt ├── README.md ├── nodes │ └── route_manager ├── package.xml ├── setup.py ├── src │ └── aws_robomaker_simulation_common │ │ └── __init__.py └── worlds │ └── empty.world ├── person_detection_simulation ├── CMakeLists.txt ├── launch │ ├── small_house.launch │ └── small_house_turtlebot_navigation.launch ├── package.xml └── routes │ └── route.yaml └── turtlebot3_description_reduced_mesh ├── CMakeLists.txt ├── launch └── spawn_turtlebot.launch ├── meshes ├── bases │ ├── burger_base.stl │ ├── burger_base_decimated.stl │ ├── waffle_base.stl │ ├── waffle_base_for_open_manipulator.stl │ ├── waffle_pi_base.stl │ ├── waffle_pi_base_for_open_manipulator.stl │ └── waffle_pi_base_reduced.stl ├── sensors │ ├── astra.dae │ ├── astra.jpg │ ├── lds.stl │ ├── r200.dae │ └── r200.jpg └── wheels │ ├── left_tire.stl │ ├── left_tire_reduced.stl │ ├── right_tire.stl │ └── right_tire_reduced.stl ├── package.xml └── urdf ├── common_properties.xacro ├── turtlebot3_burger.gazebo.xacro ├── turtlebot3_burger.urdf.xacro ├── turtlebot3_burger_for_autorace.gazebo.xacro ├── turtlebot3_burger_for_autorace.urdf.xacro ├── turtlebot3_waffle.gazebo.xacro ├── turtlebot3_waffle.urdf.xacro ├── turtlebot3_waffle_for_open_manipulator.urdf.xacro ├── turtlebot3_waffle_pi.gazebo.xacro ├── turtlebot3_waffle_pi.urdf.xacro └── turtlebot3_waffle_pi_for_open_manipulator.urdf.xacro /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | *Issue #, if available:* 2 | 3 | *Description of changes:* 4 | 5 | 6 | By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: generic 3 | compiler: 4 | - gcc 5 | notifications: 6 | email: 7 | on_success: change 8 | on_failure: always 9 | recipients: 10 | - ros-contributions@amazon.com 11 | env: 12 | matrix: 13 | - ROS_DISTRO=kinetic ROS_VERSION=1 GAZEBO_VERSION=7 14 | - ROS_DISTRO=kinetic ROS_VERSION=1 GAZEBO_VERSION=9 15 | - ROS_DISTRO=melodic ROS_VERSION=1 GAZEBO_VERSION=9 16 | global: 17 | - secure: LLgChre6NXu2cUefhXJ/LLbW7MUrZ5d/fS9M1fjWIAc4kqGyJczihs9W6wSXZF4qYI1Yo4I8PmQPTNnswKFAbsSusPd5v3nqqI/LSGfvPCGs8Z9A3CGtM4WJ/eNngx9HpPfU1vMODLuHM4Y2dYbWfHmottW/JUUX02JmQ/nSSNG5l/8wCptGVA6bRBZQGsxOPC22Yn9I5hvX3Pxs75vs1ej1kexk1x4txAlbGL0+NfjBDw+92+h0qS0ELLZJALnVNefRzvYn6Jb53ehbqhldCJWPX48WToYhb4HEIVwx1GC5WF0K227kFLKRTxycL+ZgOQc6uvRAx8aghHS8ODuRdCzrhuEnFxO24szSfxguZCAoxqNeHos7lh6Glqk2uzgUNG/A1q1pa4cvYSQIyzde3q8j+6daFXQd9EFAzjBsiHDBS8OchnZKBVe1SPbRshrVFXwzIWCiFZP1pm2zmr6cWdFi26DEwZJ3k0Q2a6EPBIgoG9U+SEgzMwzIpj58WBl8dasvR7+GtRZ56C+TSKc6PQd2w8CFXDu9yos/5m14N2avBqHKnsxxfAoCpUhjVZ2nxShRRMkVDosPqL0bTtbb/Y5xs5mQMzB3GOpvsQ5CTzLsPwLo/r+IpfGMvfy3Bwl7mR5f/k5BfsIicT5mjsFYgmctfsMwWvsnv8HX8XoS4bo= 18 | - secure: UlU+m/MQ+39MO5XRkd7bPcVkv3txF1ny5MxfETErmGOazJLssz6aJMX5qg4sB2K42lrJyMnAHADLMF8ZwavXNm5LzvVjeQUiWl+scvh6CvSWwQKq5sVKVhtYQsfJr5HV1oDYOcSsuKI3WYIpRJ8bqjBVIBo5JWdpJFjoV/ts2hPPFiQen+G+u4o6kF0lCaK7JKKfhfANI36lrpzHVWQRnbK9QoFGkVUUN6exlSdhXrgPfDOPAKr6N7YyHsKcq+vIzvAvwIRty7tzu4IrpdDg9VADWRSxflr1axLhunuoLU5HNuaAr8+pnA64dLGnQl/ZOjOzfIkrWMoXLX0NFU7gxbXu31Jxs4LPaovdQZA7wATOXrgBvG7w7AXDDPBW2cuW6bcknYioi1FIFRau/HqRtdx9jyYUuF0uCIdL2kgkJlMbt/2alhGJCMuJipjQSrYA5IjHg6uJtgOsouk32vF6+Kti+wQis/YIb5kRikr8TrOiIZQenaJVw+cnYMtR86Y4btFFWXq+AL9e4xJJFzazerLMtt8uN8bx0SQ9Qp4GQMiWir+UHtX9Cflxb8Bg9+hlV8NF77AkJL4q8nzGrY4lqX9/gFVk8r1drPir8cyuxHEcDWW1wiQqBgdilGP68JJOtK4MTyc8bHrDtuentolxdF+q4P0OYaQvumzgtJ42Cx8= 19 | - SA_NAME=person-detection 20 | - SA_PACKAGE_NAME=person_detection_robot 21 | - NO_TEST=true 22 | - GH_USER_NAME="travis-ci" 23 | - GH_USER_EMAIL="travis@travis-ci.org" 24 | - AWS_DEFAULT_REGION=us-west-2 25 | before_install: 26 | - sudo apt update && sudo apt install moreutils 27 | - pip install --user awscli 28 | - openssl aes-256-cbc -K $encrypted_13642953d095_key -iv $encrypted_13642953d095_iv 29 | -in github_deploy.pem.enc -out github_deploy.pem -d 30 | install: 31 | - git clone https://github.com/aws-robotics/travis-scripts.git .ros_ci 32 | script: 33 | - . .ros_ci/add_tag.sh && set +e 34 | - while sleep 9m; do echo "=====[ $SECONDS seconds still running ]====="; done & 35 | - .ros_ci/ce_build.sh 36 | - kill %1 37 | before_deploy: 38 | - . .ros_ci/before_deploy.sh && set +e 39 | deploy: 40 | - provider: s3 41 | access_key_id: "$AWS_ACCESS_KEY_ID" 42 | secret_access_key: "$AWS_SECRET_ACCESS_KEY" 43 | bucket: "$S3_BUCKET_NAME" 44 | region: "us-west-2" 45 | local_dir: shared 46 | skip_cleanup: true 47 | wait-until-deployed: true 48 | on: 49 | branch: ros1 50 | upload-dir: travis/${SA_NAME}/${ROS_DISTRO}/gazebo${GAZEBO_VERSION} 51 | - provider: script 52 | script: bash .ros_ci/codepipeline_deploy.sh 53 | on: 54 | branch: ros1 55 | after_deploy: 56 | - .ros_ci/post_deploy.sh 57 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional 4 | documentation, we greatly value feedback and contributions from our community. 5 | 6 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary 7 | information to effectively respond to your bug report or contribution. 8 | 9 | 10 | ## Reporting Bugs/Feature Requests 11 | 12 | We welcome you to use the GitHub issue tracker to report bugs or suggest features. 13 | 14 | When filing an issue, please check [existing open](https://github.com/aws/aws-robomaker-sample-application-persondetection/issues), or [recently closed](https://github.com/aws/aws-robomaker-sample-application-persondetection/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), issues to make sure somebody else hasn't already 15 | reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: 16 | 17 | * A reproducible test case or series of steps 18 | * The version of our code being used 19 | * Any modifications you've made relevant to the bug 20 | * Anything unusual about your environment or deployment 21 | 22 | 23 | ## Contributing via Pull Requests 24 | Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: 25 | 26 | 1. You are working against the latest source on the *master* branch. 27 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 28 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. 29 | 30 | To send us a pull request, please: 31 | 32 | 1. Fork the repository. 33 | 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change. 34 | 3. Ensure local tests pass. 35 | 4. Commit to your fork using clear commit messages. 36 | 5. Send us a pull request, answering any default questions in the pull request interface. 37 | 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. 38 | 39 | GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and 40 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). 41 | 42 | 43 | ## Finding contributions to work on 44 | Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels (enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any ['help wanted'](https://github.com/aws/aws-robomaker-sample-application-persondetection/labels/help%20wanted) issues is a great place to start. 45 | 46 | 47 | ## Code of Conduct 48 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 49 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 50 | opensource-codeofconduct@amazon.com with any additional questions or comments. 51 | 52 | 53 | ## Security issue notifications 54 | If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. 55 | 56 | 57 | ## Licensing 58 | 59 | See the [LICENSE](https://github.com/aws/aws-robomaker-sample-application-persondetection/blob/master/LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. 60 | 61 | We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes. 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 4 | software and associated documentation files (the "Software"), to deal in the Software 5 | without restriction, including without limitation the rights to use, copy, modify, 6 | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 7 | permit persons to whom the Software is furnished to do so. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 10 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 11 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 12 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 13 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 14 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: all setup build build_robot build_simulation bundle bundle_robot bundle_simulation clean clean_robot_build clean_robot_bundle clean_simulation_build clean_simulation_bundle 2 | .DEFAULT_GOAL := all 3 | 4 | all: bundle 5 | 6 | # This forces each step in 'ci' to run in serial, but each step will run all of its commands in parallel 7 | ci: 8 | $(MAKE) setup 9 | $(MAKE) build 10 | $(MAKE) bundle 11 | 12 | setup: 13 | scripts/setup.sh 14 | 15 | build: build_robot build_simulation 16 | 17 | build_robot: 18 | scripts/build.sh ./robot_ws 19 | 20 | build_simulation: 21 | scripts/build.sh ./simulation_ws 22 | 23 | bundle: bundle_robot bundle_simulation 24 | 25 | bundle_robot: build_robot 26 | scripts/bundle.sh ./robot_ws 27 | 28 | bundle_simulation: build_simulation 29 | scripts/bundle.sh ./simulation_ws 30 | 31 | clean: clean_robot_build clean_robot_bundle clean_simulation_build clean_simulation_bundle 32 | 33 | clean_robot_build: 34 | rm -rf ./robot_ws/build ./robot_ws/install 35 | 36 | clean_robot_bundle: 37 | rm -rf ./robot_ws/bundle 38 | 39 | clean_simulation_build: 40 | rm -rf ./simulation_ws/build ./simulation_ws/install 41 | 42 | clean_simulation_bundle: 43 | rm -rf ./simulation_ws/bundle 44 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | This product includes software developed by 4 | Amazon Technologies, Inc (http://www.amazon.com/). 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AWS RoboMaker Sample Application - Navigation and Person Detection 2 | 3 | This application demonstrates the use of Amazon Rekognition to recognize people's faces 4 | and Amazon Polly to synthesize speech. 5 | 6 | 7 | _RoboMaker sample applications include third-party software licensed under open-source licenses and is provided for demonstration purposes only. Incorporation or use of RoboMaker sample applications in connection with your production workloads or a commercial products or devices may affect your legal rights or obligations under the applicable open-source licenses. Source code information can be found [here](https://s3.console.aws.amazon.com/s3/buckets/robomaker-applications-us-east-1-72fc243f9355/person-detection/?region=us-east-1)._ 8 | 9 | 10 | ![](docs/images/screenshot01.png) 11 | 12 | ## Usage 13 | 14 | ## Requirements 15 | 16 | - [ROS Kinetic](http://wiki.ros.org/kinetic/Installation/Ubuntu) / [ROS Melodic](http://wiki.ros.org/melodic/Installation/Ubuntu) - Other versions may work, however they have not been tested 17 | - [Colcon](https://colcon.readthedocs.io/en/released/user/installation.html) - Used for building and bundling the application. 18 | 19 | ## AWS Account Setup 20 | 21 | ### Resources 22 | This sample application uses Amazon Kinesis and Amazon Rekognition to recognize faces. See [here](#architecture-details) for details. 23 | The easiest method is to reuse the resources create by the AWS RoboMaker sample application. To do that follow these steps: 24 | 1. Sign in to the AWS RoboMaker console at https://us-west-2.console.aws.amazon.com/robomaker/home/. 25 | 2. In the AWS RoboMaker console, expand Resources on the left and then select Sample applications. 26 | 3. In the **Try RoboMaker sample applications** page, select **Navigation and person recognition** and then select Launch. 27 | 4. There will be a banner at the top of the page listing the number of resources that have been created. When all of the resources have been created 28 | it will open the **simulation job detail** page. At this point cancel the simulation job. This will not delete any of the resources. 29 | 5. Open the AWS CloudFormation console at https://console.aws.amazon.com/cloudformation/ and find the stack with AWSRoboMakerPersonDetection in the name. 30 | 6. Expand the **Parameters** tab and find the **LaunchId** Key. 31 | 7. In the runtime environment for the robot application set the `LAUNCH_ID` environmental variable to the **LaunchId** value from CloudFormation. 32 | In AWS RoboMaker the environmental variable can be set as an option when running a simulation job. 33 | In a Linux environment this can be accomplisehd with `export LAUNCH_ID=` 34 | 8. When the robot application is run the launch files will use the `LAUNCH_ID` to connect to the correct Kinesis data stream and Kinesis video stream. 35 | 36 | When setting up resources using the above method new faces can be added to Rekognition with the following steps: 37 | 1. Open the AWS CloudFormation console at https://console.aws.amazon.com/cloudformation/ and find the stack with AWSRoboMakerPersonDetection in the name. 38 | 2. Expand the **Resources** tab and find the Physical ID of the Amazon S3 bucket with the Logical ID **BundlesBucket**. 39 | 3. Copy the image into the **photos** folder of the bucket with the following command 40 | ```bash 41 | aws s3 cp path/to/image s3:///photos/persons_name.png 42 | ``` 43 | 44 | If you'd like more detailed control over the resources follow the instructions here: https://docs.aws.amazon.com/rekognition/latest/dg/recognize-faces-in-a-video-stream.html. 45 | Make sure that the names of the Kinesis video stream and data stream match those in src/person_detection_robot/launch/kinesis.launch. 46 | 47 | ### Permissions 48 | 49 | To publish to Amazon CloudWatch Metrics and Logs the IAM user configured in the environment in which the node is running 50 | will need the following permissions: 51 | ``` 52 | logs:PutLogEvents 53 | logs:DescribeLogStreams 54 | logs:CreateLogStream 55 | logs:CreateLogGroup 56 | ``` 57 | For more information about the CloudWatch Metrics node see here: https://github.com/aws-robotics/cloudwatchmetrics-ros1 58 | 59 | For more information about the CloudWatch Logs node see here: https://github.com/aws-robotics/cloudwatchlogs-ros1 60 | 61 | 62 | To use the Kinesis node you will need an IAM user with the following permissions: 63 | ``` 64 | kinesisvideo:CreateStream 65 | kinesisvideo:TagStream 66 | kinesisvideo:DescribeStream 67 | kinesisvideo:GetDataEndpoint 68 | kinesisvideo:PutMedia 69 | kinesis:ListShards 70 | kinesis:GetShardIterator 71 | kinesis:GetRecords 72 | ``` 73 | For more information on the Amazon Kinesis node see here: https://github.com/aws-robotics/kinesisvideo-ros1 74 | 75 | To use the Polly node you will need an IAM user with the following permissions: 76 | ``` 77 | polly:SynthesizeSpeech 78 | ``` 79 | For more information on the Amazon Polly node see here https://github.com/aws-robotics/tts-ros1 80 | 81 | Information about attaching permissions to an IAM user can be found here: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html 82 | 83 | Information about configuring AWS credentials can be found here: https://docs-aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-multiple-profiles 84 | 85 | 86 | ## Build 87 | 88 | ### Install requirements 89 | Follow links above for instructions on installing required software. 90 | 91 | ### Pre-build commands 92 | 93 | ```bash 94 | sudo apt-get update 95 | rosdep update 96 | ``` 97 | 98 | ### Robot 99 | 100 | ```bash 101 | cd robot_ws 102 | rosws update 103 | rosdep install --from-paths src --ignore-src -r -y 104 | colcon build 105 | ``` 106 | 107 | ### Simulation 108 | 109 | ``` 110 | cd simulation_ws 111 | rosws update 112 | rosdep install --from-paths src --ignore-src -r -y 113 | colcon build 114 | ``` 115 | 116 | ## Run 117 | 118 | Launch the application with the following commands: 119 | 120 | - *Running Robot Application on a Robot* 121 | 122 | Once the bundle has been created, it can be deployed using RoboMaker. For information about deploying using RoboMaker, see [this documentation](https://docs.aws.amazon.com/robomaker/latest/dg/gs-deploy.html). You can follow those instructions 123 | to cross-compile the sample application for the ARMHF architecture supported by the Raspberry PI, using a RoboMaker 124 | Development environment. 125 | 126 | You must also complete the Raspberry Pi camera setup for the TurtleBot WafflePi, outlined 127 | [here](http://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_raspi_cam/#raspberry-pi-camera). 128 | 129 | You must run the following command before running the Robot Application on the robot. 130 | ```bash 131 | sudo chmod 777 /dev/video0 132 | ``` 133 | 134 | You may also upload and run the bundle manually. Once the bundle has been manually uploaded to the target TurtleBot WafflePi, ssh into the TurtleBot and run 135 | 136 | ```bash 137 | tar xvf robot_ws_armhf_bundle.tar 138 | mkdir dependencies && tar xvzf dependencies.tar.gz -C dependencies 139 | mkdir workspace && tar xvzf workspace.tar.gz -C workspace 140 | export LAUNCH_ID=YOUR_LAUNCH_ID 141 | BUNDLE_CURRENT_PREFIX=$(pwd)/dependencies source $(pwd)/dependencies/setup.sh 142 | BUNDLE_CURRENT_PREFIX=$(pwd)/workspace source $(pwd)/workspace/setup.sh 143 | roslaunch person_detection_robot deploy_person_detection.launch 144 | ``` 145 | 146 | See the [colcon-bundle documentation](https://github.com/colcon/colcon-bundle#bundle-usage) for more details. 147 | 148 | Finally, note the `width` and `height` parameters for the node `raspicam_node` on `deploy_person_detection.launch` might require 149 | some adjustment depending on the resolution of the specific robot camera. 150 | 151 | - *Running Robot Application Elsewhere* 152 | ```bash 153 | source robot_ws/install/local_setup.sh 154 | roslaunch person_detection_robot person_detection.launch 155 | ``` 156 | 157 | - *Running Simulation Application* 158 | ```bash 159 | source simulation_ws/install/local_setup.sh 160 | TURTLEBOT3_MODEL=waffle_pi roslaunch person_detection_simulation [command] 161 | ``` 162 | There are two simulation launch commands: 163 | - `small_house.launch` - A world with a kitchen, bedroom and living areas. The Turtlebot3 spawned is stationary waiting commands. 164 | - `small_house_turtlebot_navigation.launch` - A small house with TB3 autonomously navigating to goal points on a route. 165 | 166 | ## Using this sample with RoboMaker 167 | 168 | You first need to install colcon-ros-bundle. Python 3.5 or above is required. 169 | 170 | ```bash 171 | pip3 install colcon-ros-bundle 172 | ``` 173 | 174 | After colcon-ros-bundle is installed you need to build your robot or simulation, then you can bundle with: 175 | 176 | ```bash 177 | # Bundling Robot Application 178 | cd robot_ws 179 | source install/local_setup.sh 180 | colcon bundle 181 | 182 | # Bundling Simulation Application 183 | cd simulation_ws 184 | source install/local_setup.sh 185 | colcon bundle 186 | ``` 187 | 188 | This produces the artifacts `robot_ws/bundle/output.tar` and `simulation_ws/bundle/output.tar` respectively. 189 | 190 | You'll need to upload these to an s3 bucket, then you can use these files to 191 | [create a robot application](https://docs.aws.amazon.com/robomaker/latest/dg/create-robot-application.html), 192 | [create a simulation application](https://docs.aws.amazon.com/robomaker/latest/dg/create-simulation-application.html), 193 | and [create a simulation job](https://docs.aws.amazon.com/robomaker/latest/dg/create-simulation-job.html) in RoboMaker. 194 | 195 | ## Architecture Details 196 | ![ArchitectureDiagram](docs/images/personDetectionDiagram.png) 197 | 198 | ## AWS ROS Packages used by this Sample 199 | 200 | - RoboMakerUtils-Common 201 | - RobomakerUtils-ROS1 202 | - CloudWatch-Common 203 | - CloudWatchLogs-ROS1 204 | - CloudWatchMetrics-ROS1 205 | - HealthMetricsCollector-ROS1 206 | - KinesisVideo-Common 207 | - KinesisVideo-ROS1 208 | - KinesisVideoEncoder-Common 209 | - KinesisVideoEncoder-ROS1 210 | - MonitoringMessages-ROS1 211 | - TTS-ROS1 212 | 213 | 214 | ## License 215 | 216 | MIT-0 - See LICENSE for further information 217 | 218 | ## How to Contribute 219 | 220 | Create issues and pull requests against this Repository on Github 221 | -------------------------------------------------------------------------------- /docs/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/docs/.DS_Store -------------------------------------------------------------------------------- /docs/images/personDetectionDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/docs/images/personDetectionDiagram.png -------------------------------------------------------------------------------- /docs/images/screenshot01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/docs/images/screenshot01.png -------------------------------------------------------------------------------- /docs/images/screenshot02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/docs/images/screenshot02.png -------------------------------------------------------------------------------- /docs/images/screenshot03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/docs/images/screenshot03.png -------------------------------------------------------------------------------- /github_deploy.pem.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/github_deploy.pem.enc -------------------------------------------------------------------------------- /roboMakerSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "runConfigurations":[ 3 | { 4 | "id":"PersonDetection_Cfg01", 5 | "name":"PersonDetection Robot", 6 | "type":"colcon build", 7 | "cfg":{ 8 | "workingDir":"./PersonDetection/robot_ws", 9 | "cmdArgs":"" 10 | } 11 | }, 12 | { 13 | "id":"PersonDetection_Cfg02", 14 | "name":"PersonDetection Robot", 15 | "type":"colcon bundle", 16 | "cfg":{ 17 | "workingDir":"./PersonDetection/robot_ws", 18 | "cmdArgs":"" 19 | } 20 | }, 21 | { 22 | "id":"PersonDetection_Cfg03", 23 | "name":"PersonDetection Simulation", 24 | "type":"colcon build", 25 | "cfg":{ 26 | "workingDir":"./PersonDetection/simulation_ws", 27 | "cmdArgs":"" 28 | } 29 | }, 30 | { 31 | "id":"PersonDetection_Cfg04", 32 | "name":"PersonDetection Simulation", 33 | "type":"colcon bundle", 34 | "cfg":{ 35 | "workingDir":"./PersonDetection/simulation_ws", 36 | "cmdArgs":"" 37 | } 38 | }, 39 | { 40 | "id":"PersonDetection_SimulationJob1", 41 | "name":"PersonDetection Small House", 42 | "type":"simulation", 43 | "cfg":{ 44 | "robotApp":{ 45 | "name":"RoboMakerPersonDetectionRobot", 46 | "s3Bucket":"", 47 | "sourceBundleFile":"./PersonDetection/robot_ws/bundle/output.tar", 48 | "architecture":"X86_64", 49 | "robotSoftwareSuite":{ 50 | "version":"", 51 | "name":"ROS" 52 | }, 53 | "launchConfig":{ 54 | "packageName":"person_detection_robot", 55 | "launchFile":"person_detection.launch" 56 | } 57 | }, 58 | "simulationApp":{ 59 | "name":"RoboMakerPersonDetectionSimulation", 60 | "s3Bucket":"", 61 | "sourceBundleFile":"./PersonDetection/simulation_ws/bundle/output.tar", 62 | "architecture":"X86_64", 63 | "launchConfig":{ 64 | "packageName":"person_detection_simulation", 65 | "launchFile":"small_house_turtlebot_navigation.launch", 66 | "environmentVariables":{ 67 | "TURTLEBOT3_MODEL":"waffle_pi" 68 | } 69 | }, 70 | "robotSoftwareSuite":{ 71 | "name":"ROS", 72 | "version":"" 73 | }, 74 | "simulationSoftwareSuite":{ 75 | "name":"Gazebo", 76 | "version":"" 77 | }, 78 | "renderingEngine":{ 79 | "name":"OGRE", 80 | "version":"1.x" 81 | } 82 | }, 83 | "simulation":{ 84 | "outputLocation":"", 85 | "failureBehavior":"Fail", 86 | "maxJobDurationInSeconds":28800, 87 | "iamRole":"", 88 | "vpcConfig": { 89 | "assignPublicIp": true, 90 | "securityGroups": [ "" ], 91 | "subnets": [ "" ] 92 | } 93 | } 94 | } 95 | }, 96 | { 97 | "id":"PersonDetection_wf1", 98 | "type":"workflow", 99 | "name":"PersonDetection - Build and Bundle All", 100 | "runCfgIds":[ 101 | "PersonDetection_Cfg01", 102 | "PersonDetection_Cfg02", 103 | "PersonDetection_Cfg03", 104 | "PersonDetection_Cfg04" 105 | ] 106 | } 107 | ] 108 | } 109 | 110 | -------------------------------------------------------------------------------- /robot_ws/.rosinstall: -------------------------------------------------------------------------------- 1 | # Amazon ROS CloudServiceIntegration package dependencies 2 | - git: {local-name: src/deps/utils-common, uri: 'https://github.com/aws-robotics/utils-common', version: 'release-latest'} 3 | - git: {local-name: src/deps/utils-ros1, uri: 'https://github.com/aws-robotics/utils-ros1', version: 'release-latest'} 4 | - git: {local-name: src/deps/cloudwatch-common, uri: 'https://github.com/aws-robotics/cloudwatch-common', version: 'release-latest'} 5 | - git: {local-name: src/deps/cloudwatchlogs-ros1, uri: 'https://github.com/aws-robotics/cloudwatchlogs-ros1', version: 'release-latest'} 6 | - git: {local-name: src/deps/kinesisvideo-common, uri: 'https://github.com/aws-robotics/kinesisvideo-common', version: 'release-latest'} 7 | - git: {local-name: src/deps/kinesisvideo-ros1, uri: 'https://github.com/aws-robotics/kinesisvideo-ros1', version: 'release-latest'} 8 | - git: {local-name: src/deps/kinesisvideo-encoder-common, uri: 'https://github.com/aws-robotics/kinesisvideo-encoder-common', version: 'release-latest'} 9 | - git: {local-name: src/deps/kinesisvideo-encoder-ros1, uri: 'https://github.com/aws-robotics/kinesisvideo-encoder-ros1', version: 'release-latest'} 10 | - git: {local-name: src/deps/tts-ros1, uri: 'https://github.com/aws-robotics/tts-ros1', version: 'release-latest'} 11 | -------------------------------------------------------------------------------- /robot_ws/src/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2018 Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | 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: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | 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. 8 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # Set minimum required version of cmake, project name and compile options 3 | ################################################################################ 4 | cmake_minimum_required(VERSION 2.8.3) 5 | project(person_detection_robot) 6 | 7 | ################################################################################ 8 | # Find catkin packages and libraries for catkin and system dependencies 9 | ################################################################################ 10 | find_package(catkin REQUIRED COMPONENTS 11 | rospy 12 | std_msgs 13 | sensor_msgs 14 | geometry_msgs 15 | nav_msgs 16 | message_generation 17 | cloudwatch_logger 18 | kinesis_video_streamer 19 | kinesis_video_msgs 20 | h264_video_encoder 21 | ) 22 | 23 | ################################################################################ 24 | # Setup for python modules and scripts 25 | ################################################################################ 26 | catkin_python_setup() 27 | 28 | ################################################################################ 29 | # Declare ROS messages, services and actions 30 | ################################################################################ 31 | #add_action_files( 32 | # FILES 33 | # Turtlebot3.action 34 | #) 35 | 36 | #generate_messages( 37 | # DEPENDENCIES 38 | # std_msgs 39 | # geometry_msgs 40 | # nav_msgs 41 | #) 42 | 43 | ################################################################################ 44 | # Declare ROS dynamic reconfigure parameters 45 | ################################################################################ 46 | 47 | ################################################################################ 48 | # Declare catkin specific configuration to be passed to dependent projects 49 | ################################################################################ 50 | catkin_package( 51 | DEPENDS 52 | rospy 53 | std_msgs 54 | geometry_msgs 55 | nav_msgs 56 | message_runtime 57 | cloudwatch_logger 58 | kinesis_video_streamer 59 | kinesis_video_msgs 60 | h264_video_encoder 61 | ) 62 | 63 | ################################################################################ 64 | # Build 65 | ################################################################################ 66 | include_directories( 67 | include 68 | ${catkin_INCLUDE_DIRS} 69 | ) 70 | 71 | ################################################################################ 72 | # Install 73 | ################################################################################ 74 | catkin_install_python(PROGRAMS 75 | nodes/rotate 76 | nodes/rekognize 77 | nodes/rekognize_tts 78 | DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 79 | ) 80 | 81 | install(DIRECTORY launch config 82 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 83 | ) 84 | 85 | ################################################################################ 86 | # Test 87 | ################################################################################ 88 | 89 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/config/cloudwatch_logs_config.yaml: -------------------------------------------------------------------------------- 1 | # name of the log group to use. If it doesn't exist, will try to create it first 2 | # default value is: ros_log_group 3 | log_group_name: person_detection_example 4 | 5 | # name of the log stream to send logs to. If it doesn't exist, will try to create it first 6 | # default value is: ros_log_stream 7 | log_stream_name: Turtlebot3 8 | 9 | # how often to send a batch of logs to cloudwatch in the log group and log stream specified 10 | # default value is: 5.0 11 | publish_frequency: 5.0 12 | 13 | # whether to subscribe to the rosout_agg topic to get logs 14 | # default value is: true 15 | sub_to_rosout: true 16 | 17 | # other topics to subscribe to get logs 18 | # default value is: empty list 19 | topics: [] 20 | 21 | #aws region configuration 22 | aws_client_configuration: 23 | region: "us-west-2" 24 | connect_timeout_ms: 9000 25 | request_timeout_ms: 9000 26 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/config/cloudwatch_metrics_config.yaml: -------------------------------------------------------------------------------- 1 | # An optional metric namespace parameter. If provided it will set the namespace for all metrics provided by this node to 2 | # the provided value. If the node is running on a AWS RoboMaker system then the provided launch file will ignore this parameter in 3 | # favor of the namespace specified by the AWS RoboMaker ecosystem 4 | aws_metrics_namespace: "roboMakerSampleAppCloudWatchRobotMetrics" 5 | 6 | # An optional list of topics to listen to. If not provided or is empty the node will just listen on the global "metrics" 7 | # topic. If this list is not empty then the node will not subscribe to the "metrics" topic and will only subscribe to the 8 | # topics in the list. 9 | #aws_monitored_metric_topics: ["metrics"] 10 | 11 | # This is the AWS Client Configuration used by the AWS service client in the Node. If given the node will load the 12 | # provided configuration when initializing the client. 13 | aws_client_configuration: 14 | # Specifies where you want the client to communicate. Examples include us-east-1 or us-west-1. You must ensure that 15 | # the service you want to use has an endpoint in the region you configure. 16 | region: "us-west-2" 17 | 18 | # Built in the constructor and pulls information from your operating system. Do not alter the user agent. 19 | #userAgent: "" 20 | 21 | # Use this to override the http endpoint used to talk to a service. If you set this, you must also set authenticationRegion. 22 | #endpointOverride: "" 23 | 24 | # These settings allow you to configure a proxy for all communication with AWS. Examples of when this functionality 25 | # might be useful include debugging in conjunction with the Burp suite, or using a proxy to connect to the Internet. 26 | #proxyHost: "" 27 | #proxyPort: 0 28 | #proxyUserName: "" 29 | #proxyPassword: "" 30 | 31 | # Enables you to tell the HTTP client where to find your SSL certificate trust store (for example, a directory 32 | # prepared with OpenSSL's c_rehash utility). You shouldn't need to do this unless you are using symlinks in your 33 | # environment. This has no effect on Windows or OS X. 34 | #caPath: "" 35 | #caFile: "" 36 | 37 | # Values that determine the length of time, in milliseconds, to wait before timing out a request. You can increase 38 | # this value if you need to transfer large files, such as in Amazon S3 or Amazon CloudFront. 39 | requestTimeoutMs: 2000 40 | connectTimeoutMs: 2000 41 | 42 | # The maximum number of allowed connections to a single server for your HTTP communications. The default value is 25. 43 | # You can set this value as high as you can support the bandwidth. We recommend a value around 25. 44 | #maxConnections: 25 45 | 46 | 47 | # Use dual stack endpoint in the endpoint calculation. You must ensure that the service you want to use supports ipv6 in the region you select. 48 | #useDualStack: false 49 | 50 | # Enable adjustment for clock skew 51 | #enableClockSkewAdjustment: true 52 | 53 | # If set to true the http stack will follow redirect codes 54 | #followRedirects: false 55 | 56 | # Specifies whether to enable SSL certificate verification. If necessary, you can disable SSL certificate verification by setting verifySSL to false. 57 | #verifySSL: true 58 | 59 | # This is the storage resolution level for presenting metrics in CloudWatch. 60 | # Valid values are 1 and 60. Setting this to 1 specifies this metric as a 61 | # high-resolution metric, so that CloudWatch stores the metric with sub-minute 62 | # resolution down to one second. Setting this to 60 specifies this metric as a 63 | # regular-resolution metric, which CloudWatch stores at 1-minute resolution. 64 | # Currently, high resolution is available only for custom metrics. For more 65 | # information about high-resolution metrics, see http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html 66 | storage_resolution: 1 67 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/config/h264_encoder_config.yaml: -------------------------------------------------------------------------------- 1 | # This sample YAML config file is catered towards running the H264 Encoder Node on a Raspberry Pi based system 2 | 3 | # The name of the topic to which the H264 encoder node should subscribe to obtain the feed desired to be encoded 4 | # The topic must be a sensor_msgs/Image message 5 | #subscription_topic: "/raspicam_node/image" 6 | subscription_topic: "/camera/rgb/image_raw" 7 | 8 | # The name of the topic to which H264 encoder node should publish the encoded video stream 9 | # The topic will be a kinesis_video_msgs/KinesisVideoFrame message 10 | publication_topic: "/video/encoded" 11 | 12 | # The size of the subscribed and publishing message queues (default: 100) 13 | # queue_size: 100 14 | 15 | # The desired output width of the encoded video stream (default: width of the input image stream) 16 | # output_width: 17 | 18 | # The desired output height of the encoded video stream (default: height of the input image stream) 19 | # output_height: 20 | 21 | # The numerator when expressing the frame rate as a rational number 22 | fps_numerator: 30 23 | 24 | # The denominator when expressing the frame rate as a rational number (default: 1) 25 | fps_denominator: 1 26 | 27 | # The target bit rate in bits per second of the output video stream 28 | bitrate: 2048000 29 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/config/kvs_config.yaml: -------------------------------------------------------------------------------- 1 | # Kinesis Video Stream name. If a stream by the given name doesn't exist, it will be created. 2 | stream_name: "RoboMakerSampleAppPersonDetectionStream" 3 | 4 | # Topic name to subscribe and receive the image/video data from. 5 | subscription_topic: /video/encoded 6 | 7 | # Topic type 8 | # 1: KinesisVideoFrame transport, enabling h264 streaming 9 | # 2: sensor_msgs::Image transport. 10 | # 3: Like 1 but with AWS Rekognition support built-in. Results will be read from 'rekognition_data_stream' and published onto 'rekognition_topic_name'. 11 | topic_type: 3 12 | 13 | # Frame rate should match the encoder's (and the camera's) frame rate. 14 | frame_rate: 30 15 | 16 | # Rather than using the input's timestamps, let the Producer SDK create timestamps as the frames arrive. 17 | frame_timecodes: false 18 | 19 | #### If topic_type is 3, we expect the following parameters. 20 | ### The Kinesis Data Stream from which to read Rekognition's analysis results. 21 | rekognition_data_stream: "AmazonRekognitionPersonDetectionStream" 22 | ### The ROS topic on which to publish the results. 23 | rekognition_topic_name: "/rekognition/results" 24 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/launch/deploy_person_detection.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | /raspicam_node/image 23 | compressed 24 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/launch/kinesis.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | $(arg image_topic) 28 | 29 | 30 | 31 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | $(arg rekognition_data_stream)-$(arg launch_id) 40 | $(arg stream_name)-$(arg launch_id) 41 | 42 | 43 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/launch/monitoring.launch: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | $(arg aws_region) 24 | $(arg log_group_name)-$(arg launch_id) 25 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/launch/person_detection.launch: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/nodes/rekognize: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ 3 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 6 | software and associated documentation files (the "Software"), to deal in the Software 7 | without restriction, including without limitation the rights to use, copy, modify, 8 | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 12 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 13 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 14 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 15 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 16 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 17 | """ 18 | 19 | 20 | import json 21 | 22 | import rospy 23 | import actionlib 24 | from std_msgs.msg import String 25 | 26 | class Rekognizer: 27 | 28 | def __init__(self, rekognition_topic="/rekognition/results"): 29 | 30 | #Listen for rekognition results 31 | self.rekognition_subscriber = rospy.Subscriber(rekognition_topic, String, self.rekognize_callback) 32 | 33 | #Publish names extraced from rekognition results 34 | self.output_publisher = rospy.Publisher("/rekognized_people", String) 35 | 36 | def rekognize_callback(self, msg): 37 | image_ids = [] 38 | try: 39 | msg = json.loads(msg.data) 40 | if msg["FaceSearchResponse"]: 41 | rospy.logdebug("Rekognition result has FaceSeachResponse, looking for matched faces") 42 | for face in msg['FaceSearchResponse'][0]['MatchedFaces']: 43 | rospy.logdebug("Matched face: %s", face) 44 | # Default 'unnamed' is required for indexed images without ExternalImageId 45 | name = face['Face'].get('ExternalImageId', 'unknown') 46 | rospy.logdebug("Matched face has name: %s", name) 47 | image_ids.append(name) 48 | else: 49 | return 50 | except ValueError as e: 51 | rospy.logerr("Error loading json message from rekognition:\n%s", e) 52 | return 53 | 54 | if not image_ids: 55 | rospy.loginfo("Rekognition result has no faces") 56 | return 57 | 58 | names =" and ".join([image_id.replace("_"," ") for image_id in image_ids]) 59 | text = "I see {}".format(names) 60 | self.output_publisher.publish(text) 61 | rospy.loginfo(text) 62 | 63 | 64 | def main(): 65 | rospy.init_node("rekognize", log_level=rospy.INFO) 66 | 67 | rekognizer = Rekognizer() 68 | 69 | rospy.spin() 70 | 71 | 72 | if __name__ == '__main__': 73 | main() 74 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/nodes/rekognize_tts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ 3 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 6 | software and associated documentation files (the "Software"), to deal in the Software 7 | without restriction, including without limitation the rights to use, copy, modify, 8 | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 12 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 13 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 14 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 15 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 16 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 17 | """ 18 | 19 | 20 | import json 21 | 22 | import rospy 23 | import actionlib 24 | from tts.msg import SpeechAction, SpeechGoal 25 | from std_msgs.msg import String 26 | 27 | class Rekognizer: 28 | 29 | def __init__(self, rekognition_topic="/rekognition/results"): 30 | 31 | #Listen for rekognition results 32 | self.rekognition_subscriber = rospy.Subscriber(rekognition_topic, String, self.rekognize_callback) 33 | 34 | #Action client for Polly 35 | self.client = actionlib.SimpleActionClient("tts", SpeechAction) 36 | 37 | def rekognize_callback(self, msg): 38 | image_ids = [] 39 | try: 40 | msg = json.loads(msg.data) 41 | if msg["FaceSearchResponse"]: 42 | rospy.logdebug("Rekognition result has FaceSeachResponse, looking for matched faces") 43 | for face in msg['FaceSearchResponse'][0]['MatchedFaces']: 44 | rospy.logdebug("Matched face: %s", face) 45 | # Default 'unnamed' is required for indexed images without ExternalImageId 46 | name = face['Face'].get('ExternalImageId', 'unknown') 47 | rospy.logdebug("Matched face has name: %s", name) 48 | image_ids.append(name) 49 | else: 50 | return 51 | except ValueError as e: 52 | rospy.logerr("Error loading json message from rekognition:\n%s", e) 53 | return 54 | 55 | if not image_ids: 56 | rospy.loginfo("Rekognition result has no faces") 57 | return 58 | 59 | names =" and ".join([image_id.replace("_"," ") for image_id in image_ids]) 60 | 61 | #Create Polly Request 62 | self.client.wait_for_server() 63 | 64 | goal = SpeechGoal() 65 | goal.text = "I see {}".format(names) 66 | rospy.loginfo("Sending Polly request: '%s'", goal.text) 67 | self.client.send_goal(goal) 68 | 69 | 70 | 71 | def main(): 72 | rospy.init_node("rekognize", log_level=rospy.INFO) 73 | 74 | rekognizer = Rekognizer() 75 | 76 | rospy.spin() 77 | 78 | 79 | if __name__ == '__main__': 80 | main() 81 | 82 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/nodes/rotate: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ 3 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 6 | software and associated documentation files (the "Software"), to deal in the Software 7 | without restriction, including without limitation the rights to use, copy, modify, 8 | merge, publish, distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 12 | INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 13 | PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 14 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 15 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 16 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 17 | """ 18 | 19 | 20 | import rospy 21 | from geometry_msgs.msg import Twist 22 | 23 | class Rotator(): 24 | def __init__(self): 25 | self._cmd_pub = rospy.Publisher('/cmd_vel', Twist, queue_size=1) 26 | 27 | def rotate_forever(self): 28 | self.twist = Twist() 29 | 30 | direction = 1 31 | angular_speed = 0.2 32 | r = rospy.Rate(0.1) 33 | while not rospy.is_shutdown(): 34 | self.twist.angular.z = direction * angular_speed 35 | self._cmd_pub.publish(self.twist) 36 | rospy.loginfo("Rotating Robot: %s", self.twist) 37 | r.sleep() 38 | 39 | 40 | def main(): 41 | rospy.init_node('rotate') 42 | try: 43 | rotator = Rotator() 44 | rotator.rotate_forever() 45 | except rospy.ROSInterruptException: 46 | pass 47 | 48 | if __name__ == '__main__': 49 | main() 50 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | person_detection_robot 4 | 1.1.0 5 | 6 | AWS RoboMaker robot application demonstrating ROS intergration for AWS Rekognition and AWS Polly. 7 | 8 | MIT 9 | AWS RoboMaker 10 | AWS RoboMaker 11 | catkin 12 | rospy 13 | std_msgs 14 | sensor_msgs 15 | geometry_msgs 16 | nav_msgs 17 | cloudwatch_logger 18 | kinesis_manager 19 | kinesis_video_streamer 20 | kinesis_video_msgs 21 | h264_encoder_core 22 | h264_video_encoder 23 | tts 24 | 25 | turtlebot3 26 | turtlebot3_msgs 27 | 28 | message_generation 29 | message_runtime 30 | message_runtime 31 | turtlebot3_bringup 32 | 33 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/setup.py: -------------------------------------------------------------------------------- 1 | ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD 2 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 3 | 4 | from distutils.core import setup 5 | from catkin_pkg.python_setup import generate_distutils_setup 6 | 7 | # fetch values from package.xml 8 | setup_args = generate_distutils_setup( 9 | packages=['person_detection_robot'], 10 | package_dir={'': 'src'} 11 | ) 12 | 13 | setup(**setup_args) 14 | -------------------------------------------------------------------------------- /robot_ws/src/person_detection_robot/src/person_detection_robot/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/robot_ws/src/person_detection_robot/src/person_detection_robot/__init__.py -------------------------------------------------------------------------------- /scripts/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | COLCON_LOG_PATH="$@/logs" colcon build --base-paths "$@" --build-base "$@/build" --install-base "$@/install" 4 | -------------------------------------------------------------------------------- /scripts/bundle.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | COLCON_LOG_PATH="$@/logs" colcon bundle --base-paths "$@" --build-base "$@/build" --install-base "$@/install" --bundle-base "$@/bundle" 4 | -------------------------------------------------------------------------------- /scripts/setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -ex 4 | 5 | apt-get update 6 | source /opt/ros/$ROS_DISTRO/setup.sh 7 | rosdep update 8 | 9 | apt-get install -y python3-apt python3-pip 10 | pip3 install -U setuptools 11 | pip3 install -U colcon-common-extensions colcon-ros-bundle 12 | 13 | rosdep install --from-paths ./robot_ws/src --ignore-src -r -y 14 | rosdep install --from-paths ./simulation_ws/src --ignore-src -r -y 15 | -------------------------------------------------------------------------------- /simulation_ws/.rosinstall: -------------------------------------------------------------------------------- 1 | - git: {local-name: src/deps/aws-robomaker-small-house-world, uri: "https://github.com/aws-robotics/aws-robomaker-small-house-world", version: v0.0.1} 2 | - git: {local-name: src/deps/turtlebot3, uri: "https://github.com/ROBOTIS-GIT/turtlebot3", version: d3cdcc6647812ae9a83f05e626cdae322923ac84} 3 | - git: {local-name: src/deps/turtlebot3_simulations, uri: "https://github.com/ROBOTIS-GIT/turtlebot3_simulations", version: 1.2.0} 4 | -------------------------------------------------------------------------------- /simulation_ws/src/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2018 Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | 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: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | 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. 8 | -------------------------------------------------------------------------------- /simulation_ws/src/aws_robomaker_simulation_common/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(aws_robomaker_simulation_common) 3 | 4 | find_package(catkin REQUIRED COMPONENTS 5 | gazebo_ros 6 | turtlebot3_description 7 | turtlebot3_navigation # required for copy of .rviz file 8 | ) 9 | 10 | catkin_package() 11 | catkin_python_setup() 12 | 13 | install(DIRECTORY worlds 14 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 15 | ) 16 | 17 | catkin_install_python(PROGRAMS 18 | nodes/route_manager 19 | DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 20 | ) 21 | 22 | # Copy the rviz models for easier access in AWS RoboMaker RViz 23 | install(FILES ${turtlebot3_navigation_DIR}/../rviz/turtlebot3_navigation.rviz 24 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/rviz 25 | RENAME turtlebot3_navigation.rviz 26 | ) 27 | -------------------------------------------------------------------------------- /simulation_ws/src/aws_robomaker_simulation_common/README.md: -------------------------------------------------------------------------------- 1 | # AWS RoboMaker Simulations Common utilities and helpers 2 | 3 | ### Route Manager 4 | Node that sends a route of target goals to the robot. Sends to the move_base server. 5 | 6 | Includes in your .launch: 7 | ``` 8 | 9 | ... 10 | 11 | 12 | 13 | ... 14 | 15 | ``` 16 | -------------------------------------------------------------------------------- /simulation_ws/src/aws_robomaker_simulation_common/nodes/route_manager: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """ 3 | Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"). 6 | You may not use this file except in compliance with the License. 7 | A copy of the License is located at 8 | 9 | http://aws.amazon.com/apache2.0 10 | 11 | or in the "license" file accompanying this file. This file is distributed 12 | on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 | express or implied. See the License for the specific language governing 14 | permissions and limitations under the License. 15 | """ 16 | 17 | 18 | import random 19 | import itertools 20 | import rospy 21 | import actionlib 22 | import tf.transformations 23 | from geometry_msgs.msg import Point, Quaternion 24 | from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal 25 | 26 | 27 | class RouteManager(): 28 | '''Send goals to move_base server for the specified route. Routes forever. 29 | 30 | Loads the route from yaml. 31 | Use RViz to record 2D nav goals. 32 | Echo the input goal on topic /move_base_simpl/goal 33 | 34 | Format: 35 | 36 | order: inorder 37 | poses: 38 | - pose: 39 | position: 40 | x: -5.41667556763 41 | y: -3.14395284653 42 | z: 0.0 43 | orientation: 44 | x: 0.0 45 | y: 0.0 46 | z: 0.785181432231 47 | w: 0.619265789851 48 | 49 | ''' 50 | 51 | # return an iterator over the goals 52 | route_modes = { 53 | 'inorder': lambda goals: itertools.cycle(goals), 54 | 'random' : lambda goals: (random.choice(goals) for i in itertools.count()), 55 | } 56 | 57 | def __init__(self): 58 | self.route = [] 59 | 60 | self.client = actionlib.SimpleActionClient('move_base', MoveBaseAction) 61 | self.client.wait_for_server() 62 | 63 | self.route_mode = rospy.get_param('~mode') 64 | if self.route_mode not in RouteManager.route_modes: 65 | rospy.logerr("Route mode '%s' unknown, exiting route manager", self.route_mode) 66 | return 67 | 68 | poses = rospy.get_param('~poses') 69 | if not poses: 70 | rospy.loginfo("Route manager initialized no goals, unable to route") 71 | 72 | self.goals = RouteManager.route_modes[self.route_mode](poses) 73 | rospy.loginfo("Route manager initialized with %s goals in %s mode", len(poses), self.route_mode) 74 | 75 | def to_move_goal(self, pose): 76 | goal = MoveBaseGoal() 77 | goal.target_pose.header.stamp = rospy.Time.now() 78 | goal.target_pose.header.frame_id = "map" 79 | goal.target_pose.pose.position = Point(**pose['pose']['position']) 80 | goal.target_pose.pose.orientation = Quaternion(**pose['pose']['orientation']) 81 | return goal 82 | 83 | def route_forever(self): 84 | rate = rospy.Rate(1) 85 | while not rospy.is_shutdown(): 86 | try: 87 | rospy.loginfo("Route mode is '%s', getting next goal", self.route_mode) 88 | current_goal = self.to_move_goal(next(self.goals)) 89 | rospy.loginfo("Sending target goal: %s", current_goal) 90 | self.client.send_goal(current_goal) 91 | 92 | if not self.client.wait_for_result(): 93 | rospy.logerr("Move server not ready, will try again...") 94 | else: 95 | if self.client.get_result(): 96 | rospy.loginfo("Goal done: %s", current_goal) 97 | rate.sleep() 98 | except StopIteration: 99 | rospy.loginfo("No goals, stopping route manager") 100 | return 101 | 102 | 103 | def main(): 104 | rospy.init_node('route_manager') 105 | try: 106 | route_manger = RouteManager() 107 | route_manger.route_forever() 108 | except rospy.ROSInterruptException: 109 | pass 110 | 111 | if __name__ == '__main__': 112 | main() 113 | -------------------------------------------------------------------------------- /simulation_ws/src/aws_robomaker_simulation_common/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | aws_robomaker_simulation_common 4 | 1.0.0 5 | 6 | AWS RoboMaker simulation package for commonly used nodes and helpers. 7 | 8 | Apache 2.0 9 | AWS RoboMaker 10 | AWS RoboMaker 11 | catkin 12 | gazebo_ros 13 | gazebo 14 | gazebo_plugins 15 | 16 | 17 | moveit_ros 18 | dwa_local_planner 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /simulation_ws/src/aws_robomaker_simulation_common/setup.py: -------------------------------------------------------------------------------- 1 | ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD 2 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 3 | 4 | from distutils.core import setup 5 | from catkin_pkg.python_setup import generate_distutils_setup 6 | 7 | # fetch values from package.xml 8 | setup_args = generate_distutils_setup( 9 | packages=['aws_robomaker_simulation_common'], 10 | package_dir={'': 'src'} 11 | ) 12 | 13 | setup(**setup_args) 14 | -------------------------------------------------------------------------------- /simulation_ws/src/aws_robomaker_simulation_common/src/aws_robomaker_simulation_common/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/aws_robomaker_simulation_common/src/aws_robomaker_simulation_common/__init__.py -------------------------------------------------------------------------------- /simulation_ws/src/aws_robomaker_simulation_common/worlds/empty.world: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | model://sun 11 | 12 | 13 | 14 | 15 | model://ground_plane 16 | 17 | 18 | 19 | 1000.0 20 | 0.001 21 | 1 22 | 23 | 24 | quick 25 | 150 26 | 0 27 | 1.400000 28 | 1 29 | 30 | 31 | 0.00001 32 | 0.2 33 | 2000.000000 34 | 0.01000 35 | 36 | 37 | 38 | 39 | 0.4 0.4 0.4 1 40 | 0.7 0.7 0.7 1 41 | true 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /simulation_ws/src/person_detection_simulation/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(person_detection_simulation) 3 | 4 | find_package(catkin REQUIRED COMPONENTS 5 | gazebo_ros 6 | turtlebot3_description # required to install .rviz model 7 | ) 8 | 9 | find_package(gazebo REQUIRED) 10 | 11 | catkin_package() 12 | 13 | install(DIRECTORY launch routes 14 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 15 | ) 16 | 17 | # Copy the rviz model for easier access in AWS RoboMaker RViz 18 | install(FILES ${turtlebot3_description_DIR}/../rviz/model.rviz 19 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/rviz 20 | RENAME turtlebot3_model.rviz 21 | ) 22 | -------------------------------------------------------------------------------- /simulation_ws/src/person_detection_simulation/launch/small_house.launch: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /simulation_ws/src/person_detection_simulation/launch/small_house_turtlebot_navigation.launch: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /simulation_ws/src/person_detection_simulation/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | person_detection_simulation 4 | 1.1.0 5 | 6 | AWS RoboMaker sample application for demonstrating Rekognition by detecting faces. 7 | 8 | MIT 9 | AWS RoboMaker 10 | AWS RoboMaker 11 | catkin 12 | roscpp 13 | std_msgs 14 | sensor_msgs 15 | geometry_msgs 16 | nav_msgs 17 | tf 18 | gazebo_ros 19 | gazebo_plugins 20 | turtlebot3_description 21 | turtlebot3_navigation 22 | dwa_local_planner 23 | gazebo 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /simulation_ws/src/person_detection_simulation/routes/route.yaml: -------------------------------------------------------------------------------- 1 | mode: inorder 2 | poses: 3 | - pose: 4 | position: 5 | x: 5.18359947205 6 | y: 1.49744713306 7 | z: 0.0 8 | orientation: 9 | x: 0.0 10 | y: 0.0 11 | z: 0.616004101266 12 | w: 0.787742944889 13 | - pose: 14 | position: 15 | x: 8.28222084045 16 | y: 2.15264034271 17 | z: 0.0 18 | orientation: 19 | x: 0.0 20 | y: 0.0 21 | z: 0.683600667576 22 | w: 0.729856237412 23 | - pose: 24 | position: 25 | x: 8.30155944824 26 | y: 1.45175802708 27 | z: 0.0 28 | orientation: 29 | x: 0.0 30 | y: 0.0 31 | z: 0.692198508036 32 | w: 0.721707160469 33 | - pose: 34 | position: 35 | x: 2.79818558693 36 | y: -3.52509260178 37 | z: 0.0 38 | orientation: 39 | x: 0.0 40 | y: 0.0 41 | z: -0.714142405688 42 | w: 0.700000445999 43 | - pose: 44 | position: 45 | x: 2.74850773811 46 | y: -1.83957350254 47 | z: 0.0 48 | orientation: 49 | x: 0.0 50 | y: 0.0 51 | z: 0.999988948932 52 | w: -0.00470127781847 53 | - pose: 54 | position: 55 | x: -5.90015792847 56 | y: -3.1342818737 57 | z: 0.0 58 | orientation: 59 | x: 0.0 60 | y: 0.0 61 | z: 0.972519248953 62 | w: -0.23282248692 63 | - pose: 64 | position: 65 | x: -5.64541149139 66 | y: -2.90587878227 67 | z: 0.0 68 | orientation: 69 | x: 0.0 70 | y: 0.0 71 | z: 0.687801419469 72 | w: 0.725898896112 73 | - pose: 74 | position: 75 | x: -5.38433218002 76 | y: -3.19463539124 77 | z: 0.0 78 | orientation: 79 | x: 0.0 80 | y: 0.0 81 | z: 0.710423492797 82 | w: 0.703774438924 83 | - pose: 84 | position: 85 | x: -5.41667556763 86 | y: -3.14395284653 87 | z: 0.0 88 | orientation: 89 | x: 0.0 90 | y: 0.0 91 | z: 0.785181432231 92 | w: 0.619265789851 93 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(turtlebot3_description_reduced_mesh) 3 | 4 | find_package(catkin REQUIRED COMPONENTS 5 | gazebo_ros 6 | ) 7 | 8 | catkin_package(DEPENDS gazebo_ros) 9 | 10 | install(DIRECTORY launch meshes urdf 11 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 12 | ) 13 | 14 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/launch/spawn_turtlebot.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 20 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/burger_base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/burger_base.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/burger_base_decimated.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/burger_base_decimated.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_base.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_base_for_open_manipulator.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_base_for_open_manipulator.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_pi_base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_pi_base.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_pi_base_for_open_manipulator.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_pi_base_for_open_manipulator.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_pi_base_reduced.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/bases/waffle_pi_base_reduced.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/sensors/astra.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/sensors/astra.jpg -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/sensors/lds.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/sensors/lds.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/sensors/r200.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/sensors/r200.jpg -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/left_tire.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/left_tire.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/left_tire_reduced.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/left_tire_reduced.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/right_tire.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/right_tire.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/right_tire_reduced.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-robomaker-sample-application-persondetection/b3da722f9f40c4322bd6892180b263366d37017a/simulation_ws/src/turtlebot3_description_reduced_mesh/meshes/wheels/right_tire_reduced.stl -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | turtlebot3_description_reduced_mesh 4 | 1.1.0 5 | 6 | A copy of the TurtleBot3 models with reduced poly counts. Based off turtlebot3_description package. 7 | 8 | Apache 2.0 9 | AWS RoboMaker 10 | AWS RoboMaker 11 | catkin 12 | gazebo_ros 13 | gazebo_plugins 14 | gazebo 15 | 16 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/common_properties.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_burger.gazebo.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Gazebo/DarkGrey 8 | 9 | 10 | 11 | 0.1 12 | 0.1 13 | 500000.0 14 | 10.0 15 | 0.001 16 | 0.1 17 | 1 0 0 18 | Gazebo/FlatBlack 19 | 20 | 21 | 22 | 0.1 23 | 0.1 24 | 500000.0 25 | 10.0 26 | 0.001 27 | 0.1 28 | 1 0 0 29 | Gazebo/FlatBlack 30 | 31 | 32 | 33 | 0.1 34 | 0.1 35 | 1000000.0 36 | 100.0 37 | 0.001 38 | 1.0 39 | Gazebo/FlatBlack 40 | 41 | 42 | 43 | 44 | true 45 | $(arg imu_visual) 46 | 47 | Gazebo/FlatBlack 48 | 49 | 50 | 51 | 52 | cmd_vel 53 | odom 54 | odom 55 | world 56 | true 57 | base_footprint 58 | false 59 | true 60 | true 61 | false 62 | 30 63 | wheel_left_joint 64 | wheel_right_joint 65 | 0.160 66 | 0.066 67 | 1 68 | 10 69 | na 70 | 71 | 72 | 73 | 74 | 75 | true 76 | imu_link 77 | imu_link 78 | imu 79 | imu_service 80 | 0.0 81 | 200 82 | 83 | 84 | gaussian 85 | 86 | 0.0 87 | 2e-4 88 | 0.0000075 89 | 0.0000008 90 | 91 | 92 | 0.0 93 | 1.7e-2 94 | 0.1 95 | 0.001 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | Gazebo/FlatBlack 104 | 105 | 0 0 0 0 0 0 106 | $(arg laser_visual) 107 | 5 108 | 109 | 110 | 111 | 360 112 | 1 113 | 0.0 114 | 6.28319 115 | 116 | 117 | 118 | 0.120 119 | 3.5 120 | 0.015 121 | 122 | 123 | gaussian 124 | 0.0 125 | 0.01 126 | 127 | 128 | 129 | scan 130 | base_scan 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_burger.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 162 | 163 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_burger_for_autorace.gazebo.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Gazebo/DarkGrey 9 | 10 | 11 | 12 | 0.1 13 | 0.1 14 | 500000.0 15 | 10.0 16 | 0.001 17 | 0.1 18 | 1 0 0 19 | Gazebo/FlatBlack 20 | 21 | 22 | 23 | 0.1 24 | 0.1 25 | 500000.0 26 | 10.0 27 | 0.001 28 | 0.1 29 | 1 0 0 30 | Gazebo/FlatBlack 31 | 32 | 33 | 34 | 0.1 35 | 0.1 36 | 1000000.0 37 | 100.0 38 | 0.001 39 | 1.0 40 | Gazebo/FlatBlack 41 | 42 | 43 | 44 | 45 | true 46 | $(arg imu_visual) 47 | 48 | Gazebo/FlatBlack 49 | 50 | 51 | 52 | 53 | cmd_vel 54 | odom 55 | odom 56 | world 57 | true 58 | base_footprint 59 | false 60 | true 61 | true 62 | false 63 | 30 64 | wheel_left_joint 65 | wheel_right_joint 66 | 0.160 67 | 0.066 68 | 1 69 | 10 70 | na 71 | 72 | 73 | 74 | 75 | 76 | true 77 | imu_link 78 | imu 79 | imu_service 80 | 0.0 81 | 200 82 | 83 | 84 | gaussian 85 | 86 | 0.0 87 | 2e-4 88 | 0.0000075 89 | 0.0000008 90 | 91 | 92 | 0.0 93 | 1.7e-2 94 | 0.1 95 | 0.001 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | Gazebo/FlatBlack 104 | 105 | 0 0 0 0 0 0 106 | $(arg laser_visual) 107 | 5 108 | 109 | 110 | 111 | 360 112 | 1 113 | 0.0 114 | 6.28319 115 | 116 | 117 | 118 | 0.120 119 | 3.5 120 | 0.015 121 | 122 | 123 | gaussian 124 | 0.0 125 | 0.01 126 | 127 | 128 | 129 | scan 130 | base_scan 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | true 139 | $(arg camera_visual) 140 | 141 | 1.085595 142 | 143 | 320 144 | 240 145 | R8G8B8 146 | 147 | 148 | 0.03 149 | 100 150 | 151 | 152 | 153 | true 154 | 30.0 155 | camera 156 | camera_rgb_optical_frame 157 | image 158 | camera_info 159 | 0.07 160 | 0.0 161 | 0.0 162 | 0.0 163 | 0.0 164 | 0.0 165 | 166 | 167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_burger_for_autorace.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_waffle.gazebo.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Gazebo/DarkGrey 9 | 10 | 11 | 12 | 0.1 13 | 0.1 14 | 500000.0 15 | 10.0 16 | 0.001 17 | 0.1 18 | 1 0 0 19 | Gazebo/FlatBlack 20 | 21 | 22 | 23 | 0.1 24 | 0.1 25 | 500000.0 26 | 10.0 27 | 0.001 28 | 0.1 29 | 1 0 0 30 | Gazebo/FlatBlack 31 | 32 | 33 | 34 | 0.1 35 | 0.1 36 | 1000000.0 37 | 100.0 38 | 0.001 39 | 1.0 40 | Gazebo/FlatBlack 41 | 42 | 43 | 44 | 0.1 45 | 0.1 46 | 1000000.0 47 | 100.0 48 | 0.001 49 | 1.0 50 | Gazebo/FlatBlack 51 | 52 | 53 | 54 | 55 | true 56 | $(arg imu_visual) 57 | 58 | Gazebo/Grey 59 | 60 | 61 | 62 | 63 | cmd_vel 64 | odom 65 | odom 66 | world 67 | true 68 | base_footprint 69 | false 70 | true 71 | true 72 | false 73 | 30 74 | wheel_left_joint 75 | wheel_right_joint 76 | 0.287 77 | 0.066 78 | 1 79 | 10 80 | na 81 | 82 | 83 | 84 | 85 | 86 | true 87 | imu_link 88 | imu_link 89 | imu 90 | imu_service 91 | 0.0 92 | 200 93 | 94 | 95 | gaussian 96 | 97 | 0.0 98 | 2e-4 99 | 0.0000075 100 | 0.0000008 101 | 102 | 103 | 0.0 104 | 1.7e-2 105 | 0.1 106 | 0.001 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | Gazebo/FlatBlack 115 | 116 | 0 0 0 0 0 0 117 | $(arg laser_visual) 118 | 5 119 | 120 | 121 | 122 | 360 123 | 1 124 | 0.0 125 | 6.28319 126 | 127 | 128 | 129 | 0.120 130 | 3.5 131 | 0.015 132 | 133 | 134 | gaussian 135 | 0.0 136 | 0.01 137 | 138 | 139 | 140 | scan 141 | base_scan 142 | 143 | 144 | 145 | 146 | 147 | 148 | true 149 | $(arg camera_visual) 150 | 151 | 1.3439 152 | 153 | 1920 154 | 1080 155 | R8G8B8 156 | 157 | 158 | 159 | 0.03 160 | 100 161 | 162 | 163 | 164 | 0.2 165 | true 166 | 30.0 167 | camera 168 | camera_rgb_optical_frame 169 | rgb/image_raw 170 | depth/image_raw 171 | depth/points 172 | rgb/camera_info 173 | depth/camera_info 174 | 0.4 175 | 0.07 176 | 0.0 177 | 0.0 178 | 0.0 179 | 0.0 180 | 0.0 181 | 0.0 182 | 0.0 183 | 0.0 184 | 0 185 | 0 186 | 187 | 188 | 189 | 190 | 191 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_waffle.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_waffle_for_open_manipulator.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_waffle_pi.gazebo.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Gazebo/DarkGrey 9 | 10 | 11 | 12 | 0.1 13 | 0.1 14 | 500000.0 15 | 10.0 16 | 0.001 17 | 0.1 18 | 1 0 0 19 | Gazebo/FlatBlack 20 | 21 | 22 | 23 | 0.1 24 | 0.1 25 | 500000.0 26 | 10.0 27 | 0.001 28 | 0.1 29 | 1 0 0 30 | Gazebo/FlatBlack 31 | 32 | 33 | 34 | 0.1 35 | 0.1 36 | 1000000.0 37 | 100.0 38 | 0.001 39 | 1.0 40 | Gazebo/FlatBlack 41 | 42 | 43 | 44 | 0.1 45 | 0.1 46 | 1000000.0 47 | 100.0 48 | 0.001 49 | 1.0 50 | Gazebo/FlatBlack 51 | 52 | 53 | 54 | 55 | true 56 | $(arg imu_visual) 57 | 58 | Gazebo/Grey 59 | 60 | 61 | 62 | 63 | cmd_vel 64 | odom 65 | odom 66 | world 67 | true 68 | base_footprint 69 | false 70 | true 71 | true 72 | false 73 | 30 74 | wheel_left_joint 75 | wheel_right_joint 76 | 0.287 77 | 0.066 78 | 1 79 | 10 80 | na 81 | 82 | 83 | 84 | 85 | 86 | true 87 | imu_link 88 | imu_link 89 | imu 90 | imu_service 91 | 0.0 92 | 200 93 | 94 | 95 | gaussian 96 | 97 | 0.0 98 | 2e-4 99 | 0.0000075 100 | 0.0000008 101 | 102 | 103 | 0.0 104 | 1.7e-2 105 | 0.1 106 | 0.001 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | Gazebo/FlatBlack 115 | 116 | 0 0 0 0 0 0 117 | $(arg laser_visual) 118 | 5 119 | 120 | 121 | 122 | 360 123 | 1 124 | 0.0 125 | 6.28319 126 | 127 | 128 | 129 | 0.120 130 | 3.5 131 | 0.015 132 | 133 | 134 | gaussian 135 | 0.0 136 | 0.01 137 | 138 | 139 | 140 | scan 141 | base_scan 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | true 150 | $(arg camera_visual) 151 | 152 | 1.085595 153 | 154 | 640 155 | 480 156 | R8G8B8 157 | 158 | 159 | 0.03 160 | 100 161 | 162 | 163 | 164 | true 165 | 30.0 166 | camera 167 | camera_rgb_optical_frame 168 | rgb/image_raw 169 | rgb/camera_info 170 | 0.07 171 | 0.0 172 | 0.0 173 | 0.0 174 | 0.0 175 | 0.0 176 | 177 | 178 | 179 | 180 | 181 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_waffle_pi.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | -------------------------------------------------------------------------------- /simulation_ws/src/turtlebot3_description_reduced_mesh/urdf/turtlebot3_waffle_pi_for_open_manipulator.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | --------------------------------------------------------------------------------