This is a containerized ROS communication bridge for the F1TENTH gym environment that turns it into a simulation in ROS2.
Supported System:
This installation guide will be split into instruction for installing the ROS 2 package natively, and for systems with or without an NVIDIA gpu in Docker containers.
Install the following dependencies:
git clone https://github.com/f1tenth/f1tenth_gym
cd f1tenth_gym && pip3 install -e .
Installing the simulation:
cd $HOME && mkdir -p sim_ws/src
cd $HOME/sim_ws/src
git clone https://github.com/f1tenth/f1tenth_gym_ros
sim.yaml
https://github.com/f1tenth/f1tenth_gym_ros/blob/main/config/sim.yaml in your cloned repo, change the map_path
parameter to point to the correct location. It should be '<your_home_dir>/sim_ws/src/f1tenth_gym_ros/maps/levine'
source /opt/ros/foxy/setup.bash
cd ..
rosdep install -i --from-path src --rosdistro foxy -y
colcon build
Install the following dependencies:
Installing the simulation:
$ cd f1tenth_gym_ros
$ docker build -t f1tenth_gym_ros -f Dockerfile .
f1tenth_gym_ros
) is mounted in the container at /sim_ws/src/f1tenth_gym_ros
. Which means that the changes you make in the repo on the host system will also reflect in the container.
$ rocker --nvidia --x11 --volume .:/sim_ws/src/f1tenth_gym_ros -- f1tenth_gym_ros
Install the following dependencies:
If your system does not support nvidia-docker2, noVNC will have to be used to forward the display.
Installing the simulation:
docker-compose up
tmux
is available for convenience.
docker exec -it f1tenth_gym_ros-sim-1 /bin/bash
tmux
is included in the contianer, so you can create multiple bash sessions in the same terminal.$ source /opt/ros/foxy/setup.bash
$ source install/local_setup.bash
$ ros2 launch f1tenth_gym_ros gym_bridge_launch.py
A rviz window should pop up showing the simulation either on your host system or in the browser window depending on the display forwarding you chose.
You can then run another node by creating another bash session in tmux
.
f1tenth_gym_ros/config/sim.yaml
.map_path
parameter. You'll have to use the full path to the map file in the container. The map follows the ROS convention. It is assumed that the image file and the yaml
file for the map are in the same directory with the same name. See the note below about mounting a volume to see where to put your map file.num_agent
parameter can be changed to either 1 or 2 for single or two agent racing.The entire directory of the repo is mounted to a workspace /sim_ws/src
as a package. All changes made in the repo on the host system will also reflect in the container. After changing the configuration, run colcon build
again in the container workspace to make sure the changes are reflected.
In single agent:
/scan
: The ego agent's laser scan
/ego_racecar/odom
: The ego agent's odometry
/map
: The map of the environment
A tf
tree is also maintained.
In two agents:
In addition to the topics available in the single agent scenario, these topics are also available:
/opp_scan
: The opponent agent's laser scan
/ego_racecar/opp_odom
: The opponent agent's odometry for the ego agent's planner
/opp_racecar/odom
: The opponent agents' odometry
/opp_racecar/opp_odom
: The ego agent's odometry for the opponent agent's planner
In single agent:
/drive
: The ego agent's drive command via AckermannDriveStamped
messages
/initalpose
: This is the topic for resetting the ego's pose via RViz's 2D Pose Estimate tool. Do NOT publish directly to this topic unless you know what you're doing.
TODO: kb teleop topics
In two agents:
In addition to all topics in the single agent scenario, these topics are also available:
/opp_drive
: The opponent agent's drive command via AckermannDriveStamped
messages. Note that you'll need to publish to both the ego's drive topic and the opponent's drive topic for the cars to move when using 2 agents.
/goal_pose
: This is the topic for resetting the opponent agent's pose via RViz's 2D Goal Pose tool. Do NOT publish directly to this topic unless you know what you're doing.
The keyboard teleop node from teleop_twist_keyboard
is also installed as part of the simulation's dependency. To enable keyboard teleop, set kb_teleop
to True
in sim.yaml
. After launching the simulation, in another terminal, run:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
Then, press i
to move forward, u
and o
to move forward and turn, ,
to move backwards, m
and .
to move backwards and turn, and k
to stop in the terminal window running the teleop node.
There are multiple ways to launch your own agent to control the vehicles.
/sim_ws
workspace inside the sim container. After launch the simulation, launch the agent node in another bash session while the sim is running.docker
, the behavior is to put The two containers on the same network, and they should be able to discover and talk to each other on different topics. If you're using noVNC, create a new service in docker-compose.yml
for your agent node. You'll also have to put your container on the same network as the sim and novnc containers.