Skip to content

Commit

Permalink
ROS package for a small house Gazebo world
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelgundry committed Mar 1, 2019
1 parent 7d5b90d commit 2333d24
Show file tree
Hide file tree
Showing 406 changed files with 721,848 additions and 4 deletions.
20 changes: 20 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
cmake_minimum_required(VERSION 2.8.3)
project(aws_robomaker_small_house_world)

find_package(catkin REQUIRED COMPONENTS
gazebo_ros
turtlebot3_description
turtlebot3_navigation # required for copy of .rviz file
)

catkin_package()

install(DIRECTORY launch models worlds maps photos
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

# Copy the rviz model for easier access in AWS RoboMaker RViz
install(FILES ${turtlebot3_navigation_DIR}/../rviz/turtlebot3_navigation.rviz
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/rviz
RENAME turtlebot3_navigation.rviz
)
125 changes: 121 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,124 @@
## AWS Robomaker Small House World
# AWS RoboMaker Small House World ROS package

A house world with multiple rooms and furniture for AWS RoboMaker and Gazebo simulations.
**This is a pre-release. Do not consume.**

## License Summary
![Gazebo01](docs/images/gazebo_01.png)

# Include the world from another package

* Update .rosinstall to clone this repository and run `rosws update`
```
- git: {local-name: src/aws-robomaker-small-house-world, uri: 'https://github.com/aws-robotics/aws-robomaker-small-house-world.git', version: master}
```
* Add the following to your launch file:
```xml
<launch>
<!-- Launch World -->
<include file="$(find aws_robomaker_small_house_world)/launch/small_house.launch"/>
...
</launch>
```

# Load directly into Gazebo (without ROS)
```bash
export GAZEBO_MODEL_PATH=`pwd`/models
gazebo worlds/small_house.world
```

# ROS Launch with Gazebo viewer (without a robot)
```bash
# build for ROS
rosdep install --from-paths . --ignore-src -r -y
colcon build

# run in ROS
source install/setup.sh
roslaunch aws_robomaker_small_house_world view_small_house.launch
```

# Robot Simulation
Do not use (0,0,0) for the initial position as it will collide with the lounge chairs. Instead, use (-3.5,1.0,0.0).

With Turtlebot Waffle PI initially positioned between the living and kitchen:
```
export TURTLEBOT3_MODEL=waffle_pi
export ROBOT_INITIAL_POSE="-x 3.5 -y 1.0 -z 0.0 -R 0.0 -P 0.0 -Y 0.0"
roslaunch turtlebot_gazebo turtlebot_world.launch world_file:=`pwd`/worlds/small_house.world
```

# Building
Include this as a .rosinstall dependency in your SampleApplication simulation workspace. ~colcon build` will build this repository.

To build it outside an application, note there is no robot workspace. It is a simulation workspace only.

```bash
$ rosws update
$ rosdep install --from-paths . --ignore-src -r -y
$ colcon build
```


# Navigation
A SLAM-generated map for *Turtlebot Waffle PI* is included with a pre-defined route.

## Run Navigation with Gazebo viewer:
```bash
export TURTLEBOT3_MODEL=waffle_pi
roslaunch aws_robomaker_small_house_world small_house_turtlebot_navigation.launch gui:=true
```

## Run Navigation with RViz (and Gazebo viewer):
```bash
export TURTLEBOT3_MODEL=waffle_pi
roslaunch aws_robomaker_small_house_world small_house_turtlebot_navigation.launch open_rviz:=true gui:=true
```

### Run RViz separately for navigation

This will show you the SLAM map and current plan.

Locally,
```
rviz -d rviz/turtlebot3_navigation.rviz
```

In RoboMaker RViz viewer, use File -> Open:
```
.../workspace/<robot|simulation>-application/bundle/opt/aws_robomaker_small_house_world/share/aws_robomaker_small_house_world/rviz/turtlebot3_navigation.rviz
```

![NavPath](docs/images/nav_path_rviz_gazebo.png)

# How to Replace Photos in Picture Frames

Picture frames use two textures for the model:
- `aws_portraitA_01.png` - Frame texture
- `aws_portraitA_02.png` - Picture texture

To change a picture, one has to replace the `aws_portraitA_02.png` file. The new image will look best with same aspect ratio as the replaced image.

Below is a table showing portrait type to picture resolution data and custom images from photos/.

| Portrait Model | Resolution | Photo |
| --- | --- | --- |
| DeskPortraitA_01 | 650x1024 | |
| DeskPortraitA_02 | 650x1024 | doug |
| DeskPortraitB_01 | 650x1024 | |
| DeskPortraitB_02 | 650x1024 | |
| DeskPortraitC_01 | 1024x1024 | |
| DeskPortraitC_02 | 1024x1024 | |
| DeskPortraitD_01 | 1024x1024 | |
| DeskPortraitD_02 | 1024x1024 | |
| DeskPortraitD_03 | 1024x1024 | |
| DeskPortraitD_04 | 1024x1024 | ray |
| PortraitA_01 | 700x1024 | tim |
| PortraitA_02 | 700x1024 | anamika |
| PortraitB_01 | 700x1024 | renato |
| PortraitB_02 | 700x1024 | brandon |
| PortraitB_03 | 700x1024 | miaofei |
| PortraitC_01 | 650x1024 | sean |
| PortraitD_01 | 1024x450 | |
| PortraitD_02 | 1024x450 | |
| PortraitE_01 | 700x1024 | maggie |
| PortraitE_02 | 700x1024 | iftach |

This sample code is made available under a modified MIT license. See the LICENSE file.
Binary file added docs/images/gazebo_01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/nav_path_rviz_gazebo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions launch/small_house.launch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<launch>
<!-- Always set GUI to false for AWS RoboMaker Simulation
Use gui:=true on roslaunch command-line to run with a gui.
-->
<arg name="gui" default="false"/>

<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find aws_robomaker_small_house_world)/worlds/small_house.world"/>
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="$(arg gui)"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<arg name="verbose" default="true"/>
</include>
</launch>
40 changes: 40 additions & 0 deletions launch/small_house_turtlebot_navigation.launch
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<launch>
<!-- Turtlebot robot model -->
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>

<!--
Only allow users to set (x,y,yaw), otherwise initial
2D pose estimates will be wrong
-->
<arg name="x_pos" default="3.5"/>
<arg name="y_pos" default="1.0"/>
<arg name="yaw" default="0.0"/>

<!--
Always set GUI to false for AWS RoboMaker Simulation
Use gui:=true on roslaunch command-line to run with a gui.
-->
<arg name="gui" default="false"/>

<!-- Load the small house world into Gazebo -->
<include file="$(find aws_robomaker_small_house_world)/launch/small_house.launch">
<arg name="gui" value="$(arg gui)"/>
</include>

<!-- Spawn the robot into Gazebo with the turtlebot description -->
<include file="$(find turtlebot3_description_reduced_mesh)/launch/spawn_turtlebot.launch">
<arg name="x_pos" default="$(arg x_pos)"/>
<arg name="y_pos" default="$(arg y_pos)"/>
<arg name="yaw" default="$(arg yaw)"/>
</include>

<!-- Enable navigation system -->
<include file="$(find aws_robomaker_small_house_world)/launch/turtlebot3_navigation.launch">
<arg name="map_file" value="$(find aws_robomaker_small_house_world)/maps/turtlebot3_$(arg model)/map.yaml"/>
<!-- Initial pose must match the starting position of the robot for an aligned map -->
<arg name="initial_pose_x" value="$(arg x_pos)"/>
<arg name="initial_pose_y" default="$(arg y_pos)"/>
<arg name="initial_pose_a" default="$(arg yaw)"/>
<arg name="open_rviz" value="false"/>
</include>
</launch>
22 changes: 22 additions & 0 deletions launch/small_house_turtlebot_slam.launch
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<launch>
<!-- World -->
<arg name="gui" default="false"/>
<include file="$(find aws_robomaker_small_house_world)/launch/small_house.launch">
<arg name="gui" value="$(arg gui)"/>
</include>

<!-- Spawn robot into simulation -->
<include file="$(find turtlebot3_description_reduced_mesh)/launch/spawn_turtlebot.launch"/>

<!-- SLAM
Launch this command to generate a occupancy map for the Turtlebot. This map
can then be used by turtlebot3_navigation.
See http://emanual.robotis.com/docs/en/platform/turtlebot3/slam/#slam
-->
<include file="$(find turtlebot3_slam)/launch/turtlebot3_slam.launch"/>
<arg name="open_rviz" default="false"/>
<arg name="slam_methods" default="gmapping"/>
</launch>
37 changes: 37 additions & 0 deletions launch/turtlebot3_navigation.launch
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<!-- Copied from turtlebot3_navigation, allow initial pose arguments -->
<launch>
<!-- Arguments -->
<arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
<arg name="map_file" default="$(find turtlebot3_navigation)/maps/map.yaml"/>
<arg name="open_rviz" default="false"/>
<arg name="initial_pose_x" default="0.0"/>
<arg name="initial_pose_y" default="0.0"/>
<arg name="initial_pose_a" default="0.0"/>

<!-- Turtlebot3
<include file="$(find turtlebot3_bringup)/launch/turtlebot3_remote.launch">
<arg name="model" value="$(arg model)" />
</include>
-->

<!-- Map server -->
<node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/>

<!-- AMCL -->
<include file="$(find turtlebot3_navigation)/launch/amcl.launch">
<arg name="initial_pose_x" default="$(arg initial_pose_x)"/>
<arg name="initial_pose_y" default="$(arg initial_pose_y)"/>
<arg name="initial_pose_a" default="$(arg initial_pose_a)"/>
</include>

<!-- move_base -->
<include file="$(find turtlebot3_navigation)/launch/move_base.launch">
<arg name="model" value="$(arg model)" />
</include>

<!-- rviz -->
<group if="$(arg open_rviz)">
<node pkg="rviz" type="rviz" name="rviz" required="true"
args="-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz"/>
</group>
</launch>
6 changes: 6 additions & 0 deletions launch/view_small_house.launch
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<launch>
<!-- Show Gazebo GUI on launch -->
<include file="$(find aws_robomaker_small_house_world)/launch/small_house.launch">
<arg name="gui" value="true"/>
</include>
</launch>
5 changes: 5 additions & 0 deletions maps/turtlebot3_waffle_pi/map.pgm

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions maps/turtlebot3_waffle_pi/map.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
image: map.pgm
resolution: 0.050000
origin: [-10.000000, -10.000000, 0.000000]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196

Binary file added models/.DS_Store
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 2333d24

Please sign in to comment.