This repository contains the utility tools to interact with the Phoenix simulator.
In order to install Phoenix you first need access to the Gitlab repo of Phoenix. Please ask Garrett Warnell for the authorization. After having your access, follow the instructions in the gitlab repo to install the Phoenix simulator and its prerequisites. After the basic Phoenix installation, you should follow the instructions in this page to install and activate Unity game engine for the Phoenix simulator.
You will run the simulator in the docker space. Hence, knowing how to control docker images and containers is essential. In this section, I present some of the most necessary commands to interact with docker space.
Use docker ps
to list the active containers with their Container ID's.
If there is no active container create one in phoenix-r1
directory as follows:
#Allow access to X11 (potentially unsafe, use with caution)
xhost +si:localuser:root
catkin-docker
If there is one, you can get a bash shell in the container using docker exec -it <container_id> /bin/bash
.
To delete a container use docker rm <container_id>
.
Finally after each start of a new bash shell complete the set up using source docker-build/install/setup.bash
.
phxlaunch phoenix_unity_launch experiment.xlaunch launch_unity:=true environment:=floodedgrounds
To change the spawn location of the robot set the following arguments:
phxlaunch phoenix_unity_launch experiment.xlaunch x:=10 y:=10 z:=1 yaw:=0
After running the simulator, bunch of windows will pop up. You will mainly need to use the Unity game engine and RVIZ windows. On the Unity window, if you press t + [ the camera will focus on the robot agent. By pressing rigth mouse and moving cursor, you can change the orientation of the camera. By pressing rigth mouse and playing with arrowkeys you can change the relative position of the camera with respect to the robot. On RVIZ window, by pressing t you can activate goto_region
node and send it waypoint commands using the cursor.
To match the orientation of the ground truth map and the orientation of the simulation, use yaw:=3.1
while running the simulator.
phxlaunch phoenix_unity_launch experiment.xlaunch x:=10 y:=10 z:=1 yaw:=0 environment:=lejeune_emout
To extract a map or gridworld from the existing Unity environments, you need to follow three steps.
Using this scene obj exporter we will extract the Unity environment to a point cloud like looking file (.obj).
Exporter sometimes doesn't work when imported after the asset files if the unity project is too loaded. Follow the following order:
- First open a new Unity project.
- Then import the exporter from the asset store on Unity.
- Then move the asset files under the
Assets
folder in the\Documents\Unity\"project_name"\
.
You need this step to convert .obj file to a simpler point cloud data format.
- On cloudcompare application, open the .obj file and select the mesh you want to convert to .pts file.
- Use 'Edit > Mesh > Sample Points'.
- Then select only .sampled from DBtree on the left panel of cloudcompare.
- After selection, save it as ASCII(.xyz, .pts) file.
To obtain a gridworld out of a .pts file, you can do all the processing using the functions in position_shifter.py
file.
- First find the extremities of the point cloud data in .pts file using
extremum_points_txt
function and decide on the boundaries of your gridworld. - Then convert your point cloud to a gridworld using
costmap_gen_txt(.pts file, right_end, left_end, upper_end, lower_end, grid_space)
.
On Phoenix, the simulator creates a costmap by itself using the observations of the robot and an internal reward function mechanism. To extract this costmap, you can use costmap_subs.py
file and get a 2D costmap array in .npy format. Then you can also combine the information in the costmap file into your gridworld using costmap_gen_txt
function in the position_shifter.py
file as follows
costmap_gen_txt(.pts file, right_end, left_end, upper_end, lower_end, grid_space,costmap_file = costmap file)
To perform the waypoint control of the robot, you need to use the action_client.py
by feeding it a trajectory file which contains x-y coordinates for the waypoints. You can use the format in traj_uPOMDP-uncertain-1.txt
file or you can change the input format in action_client.py
file.
You can find the extracted point clouds for the two main environments of Phoenix under point_clouds
directory. However, they have different formats. The example runs in the position_shifter.py
are written regarding this format difference.
Also a ground truth overhead map of the lejeune_emout environment can be found in this link.
You can download the asset files for the lejeune environment from this gitlab link.