Package Summary
Tags | No category tags. |
Version | 1.0.0 |
License | MIT |
Build type | CATKIN |
Use | RECOMMENDED |
Repository Summary
Description | F1Tenth Simulation Code: Platooning, Computer Vision, Reinforcement Learning, Path Planning |
Checkout URI | https://github.com/pmusau17/platooning-f1tenth.git |
VCS Type | git |
VCS Version | noetic-port |
Last Updated | 2022-05-20 |
Dev Status | UNKNOWN |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Patrick Musau
Authors
Race:
This package contains the nodes, launch files, msg files, and infrastructure needed to run the racecar autonomously in a race-track/circuit. The nodes currently available in this package are:
Launch Files
The launch files have numerous configurable parameters. We invite you to view them in order to tailor them to your needs.
-
f1_tenth_devel.launch
- This file will start up a single car by default in the porto environment. No driving nodes are started by default, allowing the user to specify which strategy should be used.
-
f1_tenth_rl.launch
- This file is similar to f1_tenth_devel but starts the car in a more favorable position within the porto track in order to ease the initial training learning curve.
-
multi_parametrizeable.launch
- This launch file is used for multi-agent experiments. By default it launches two vehicles but it also allows for 3 cars.
-
model_comparison.launch
- This launch file allows for comparisons between machine learning strategies across different racetracks. It is used by the bash script run_e2e_model_comparison.sh. The strategies that we have evaluated using this file include Soft Actor Critic and Deep Deterministic Policy Gradient reinforcement learning strategies as well as end-to-end computer vision techniques.
-
multicar_disparity_extender.launch
- This file launches a gap following algorithm for use in the multi-agent context provided by the launch file multi_parametrizeable.launch.
-
platoon.launch
- This file launches a platooning strategy for two or three cars. The lead car uses a gap following algorithm to navigate while the following cars use a pure-pursuit path tracking algorithm for navigation.
Real Time Reachability Launch Files
The following launch files require that the following repository be built and sourced. These launch files set up the simulation environment that enables a runtime assurance architechture to be used. More details can be found at the above link.
-
sim_for_rtreach.launch
- Creates runtime-assurance architechture for a single vehicle in the presence of a fixed number of static obstacles (cones). The controller that is used for navigation by default is a vision based end-to-end learning regime.
-
sim_for_rtreach_batch.launch
- Allows for the runtime assurance architechture to be evaluated across numerous experimental runs. In order to analyze the runtime performance as well as efficacy in preventing collisions.
-
sim_for_rtreach_rl.launch
- Similar to sim_for_rtreach.launch. However the controller that is used is a reinforcement learning controller trained using Augmented Random Search.
-
sim_for_rtreach_batch_rl.launch
- Allows for the runtime assurance architechture to be evaluated across numerous experimental runs. In order to analyze the runtime performance as well as efficacy in preventing collisions.
-
sim_for_rtreach_batch_worlds.launch
- Allows for the runtime assurance architechture to be evaluated across numerous racetrack environments. Default controller is the vision-based end-to-end learning controller.
-
sim_for_rtreach_dynamic.launch
- This file creates the run-time assurance architechture in the presence of dynamic obstacles. It makes use of a multi-object object tracking algorithm to classify and track objects within the environment.
-
sim_for_rtreach_multi_agent.launch
- Creates runtime-assurance architechture for a single vehicle in the presence of a fixed number of dynamic obstacles (other agents).
-
slam.launch
- Launch file for SLAM algorithms. This file makes use of the gmapping library. For simple racetracks this library is sufficient. However for large racetracks with multiple loops we recommend using Google Cartographer.
-
sys_id.launch
- Launch file used to collect data for model estimation of the F1Tenth Vehicle.
Nodes
Disparity Extender
- Implementation of reactive navigation via a follow the gap technique developped by UNC
Follow Lead
- Node used within platooning to steer an ego vehicle to track the position of the lead car.
Keyboard
- Keyboard teleoperation node
Potential Field Controller
- Reactive naviation method using artifical potential field techniques.
Tf Transform
- Transform publisher for proper visualization in rviz
Reset World
- Node that executes a service call to reset gazebo environment
Speed Node
- Node that issues speed setpoints in a system architechture where speed and steering control are seperate tasks.
Decision Manager
- Decision manager used within a system architechture where speed and steering are independent tasks
Contact Listner
The contact listener node is a component designed to detect collision between the racecar and other simulated objects in the envrionment. It has two configurations. The first configuration, simply prints a message whenever a collision occurs. The second configuration resets the envrionment. This useful for reinforcement learning tasks.
To run the node execute the following after the simulation is up and running:
$ rosrun race collision_tracker.py /racecar
To enable resetting the world run:
$ rosrun race collision_tracker.py /racecar 1
Analyze Odom
- Node that analyzes odometry information of the vehicle.
Generate System Id
- Node that generates system identification data for the f1tenth model. It logs (x,y,linear_speed,theta) (throttle, steering angle)
Safety Controller
- Simplistic safety controller based on the disparity extender.
System Identification
- Matlab System Identification packages for the f1tenth simulator.
Special Thanks: This package was inspired by teams at MIT and UPenn
Wiki Tutorials
Package Dependencies
System Dependencies
Dependant Packages
Name | Deps |
---|---|
mpc |
Launch files
- launch/sim_for_rtreach_multi_agent_multiple_controller.launch
-
- gui [default: false]
- box_display_limit [default: 5]
- reach_time [default: 0.8]
- wall_time [default: 1.0]
- debug [default: 0]
- number_of_cars [default: 2]
- car_name [default: racecar2]
- rviz_disp [default: multiagent_rviz_multiple.rviz]
- model_name [default: fnn_lidar_porto.hdf5]
- launch/sys_id.launch
-
- car_name [default: racecar]
- csv_filename [default: track_barca_4676.csv]
- launch/model_comparison.launch
-
- world_number [default: 0]
- car_name [default: racecar]
- gui [default: true]
- velocity [default: 1.0]
- reset_on_crash [default: false]
- model_name [default: fnn_lidar_porto.hdf5]
- model_name2 [default: fnn_lidar_all.hdf5]
- model_name3 [default: fnn_lidar_barca.hdf5]
- model_name4 [default: fnn_lidar_walker.hdf5]
- algorithm [default: 0]
- csv_filename [default: track_porto_26780.csv]
- csv_filename [default: racecar_walker_29418.csv]
- csv_filename [default: track_barca_4676.csv]
- csv_filename [default: racecar_tunnel_26520.csv]
- csv_filename [default: levine-waypoints3.csv]
- timeout [default: 180]
- experiment_number [default: 0]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- launch/sim_for_rtreach_batch_rl.launch
-
- world_name [default: track_porto]
- car_name [default: racecar]
- gui [default: true]
- model_name [default: minivgg_1.hdf5]
- csv_filename [default: track_porto_26780.csv]
- lec_only [default: false]
- map_file [default: $(find race)/maps/porto_track.yaml]
- random_seed [default: 15]
- freespace_file [default: porto_freespace.txt]
- num_obstacles [default: 6]
- experiment_number [default: 0]
- reset_on_crash [default: false]
- timeout [default: -1]
- collision_file [default: collisions_rl.txt]
- use_sim_time [default: true]
- verbose [default: true]
- use_sim_time [default: $(arg use_sim_time)]
- launch/rl_train.launch
-
- world_name [default: track_porto]
- car_name [default: racecar]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- launch/platoon.launch
- launch/f1_tenth_rl.launch
-
- world_name [default: track_porto]
- use_sim_time [default: false]
- gui [default: true]
- run_camera [default: false]
- reset_on_crash [default: false]
- verbose [default: false]
- enable_keyboard [default: false]
- launch/sim_for_rtreach_multi_agent.launch
-
- gui [default: true]
- docker [default: false]
- box_display_limit [default: 100]
- reach_time [default: 1.0]
- wall_time [default: 1.0]
- debug [default: ]
- number_of_cars [default: 2]
- car_name [default: racecar2]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: minivgg_center_data.hdf5]
- launch/slam.launch
- launch/multi_agent_gen.launch
-
- racecar_pose [default: -x 1.5 -y 0.05 -z 0.05]
- racecar2_pose [default: -x 3.5 -y 1.05 -z 0.05]
- racecar3_pose [default: -x -1.5 -y 0.05 -z 0.05]
- enable_keyboard [default: false]
- world_name [default: track_porto]
- number_of_cars [default: 2]
- gui [default: true]
- rviz_disp [default: multicar.rviz]
- launch/model_comparison_obstacles.launch
-
- world_number [default: 0]
- car_name [default: racecar]
- gui [default: true]
- velocity [default: 1.0]
- random_seed [default: 1516]
- freespace_file [default: porto_freespace.txt]
- num_obstacles [default: 5]
- reset_on_crash [default: false]
- model_name [default: fnn_lidar_porto.hdf5]
- model_name2 [default: fnn_lidar_all.hdf5]
- model_name3 [default: fnn_lidar_barca.hdf5]
- model_name4 [default: fnn_lidar_walker.hdf5]
- algorithm [default: 0]
- csv_filename [default: track_porto_26780.csv]
- csv_filename [default: racecar_walker_29418.csv]
- csv_filename [default: track_barca_4676.csv]
- csv_filename [default: racecar_tunnel_26520.csv]
- csv_filename [default: levine-waypoints3.csv]
- timeout [default: 180]
- experiment_number [default: 0]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- launch/sim_for_rtreach_rl.launch
-
- world_name [default: track_porto]
- car_name [default: racecar]
- gui [default: true]
- csv_filename [default: track_porto_26780.csv]
- lec_only [default: false]
- map_file [default: $(find race)/maps/porto_track.yaml]
- random_seed [default: 15]
- freespace_file [default: porto_freespace.txt]
- num_obstacles [default: 5]
- timeout [default: -1]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- launch/multi_parametrizeable.launch
-
- racecar_pose [default: -x 1.5 -y 0.05 -z 0.05]
- racecar2_pose [default: -x 3.5 -y 1.05 -z 0.05]
- racecar3_pose [default: -x -1.5 -y 0.05 -z 0.05]
- enable_keyboard [default: false]
- world_name [default: track_porto]
- number_of_cars [default: 2]
- gui [default: true]
- rviz_disp [default: multicar.rviz]
- map_file [default: $(find race)/maps/porto_track.yaml]
- launch/sim_for_rtreach_dynamic_obstacle_uncertainty.launch
-
- gui [default: true]
- docker [default: false]
- experiment_number [default: 0]
- algorithm [default: 0]
- box_display_limit [default: 100]
- velocity [default: 1.0]
- world_name [default: track_porto]
- reach_time [default: 1.0]
- map_file [default: $(find race)/maps/porto_track.yaml]
- wall_time [default: 1.0]
- debug [default: ]
- timeout [default: -1]
- parameter_uncertainty [default: 0.0]
- position_uncertainty [default: 0.0]
- velocity_uncertainty [default: 0.0]
- use_particles [default: 1]
- number_of_cars [default: 3]
- num_obstacles [default: 5]
- car_name [default: racecar]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: minivgg_center_data.hdf5]
- use_sim_time [default: true]
- verbose [default: false]
- racecar_pose [default: -x -3.5 -y -0.2 -z 0.05]
- racecar2_pose [default: -x 1.5 -y 1.0 -z 0.05]
- racecar3_pose [default: -x -1.5 -y 0.05 -z 0.05]
- launch/sim_for_rtreach_uncertain_simplex.launch
-
- gui [default: true]
- docker [default: false]
- experiment_number [default: 0]
- algorithm [default: 0]
- box_display_limit [default: 100]
- velocity [default: 1.0]
- world_name [default: track_porto]
- reach_time [default: 1.0]
- map_file [default: $(find race)/maps/porto_track.yaml]
- wall_time [default: 1.0]
- debug [default: ]
- timeout [default: -1]
- parameter_uncertainty [default: 0.0]
- position_uncertainty [default: 0.0]
- velocity_uncertainty [default: 0.0]
- use_particles [default: 1]
- number_of_cars [default: 3]
- num_obstacles [default: 5]
- car_name [default: racecar]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: minivgg_center_data.hdf5]
- use_sim_time [default: true]
- verbose [default: false]
- racecar_pose [default: -x -3.5 -y -0.2 -z 0.05]
- racecar2_pose [default: -x 1.5 -y 1.0 -z 0.05]
- racecar3_pose [default: -x -1.5 -y 0.05 -z 0.05]
- launch/sim_for_rtreach_batch.launch
-
- world_name [default: track_porto]
- car_name [default: racecar]
- gui [default: true]
- model_name [default: minivgg_center_data.hdf5]
- csv_filename [default: track_porto_26780.csv]
- lec_only [default: false]
- map_file [default: $(find race)/maps/porto_track.yaml]
- random_seed [default: 15]
- freespace_file [default: porto_freespace.txt]
- num_obstacles [default: 6]
- experiment_number [default: 0]
- reset_on_crash [default: false]
- timeout [default: -1]
- collision_file [default: collisions_e2e.txt]
- use_sim_time [default: true]
- verbose [default: true]
- use_sim_time [default: $(arg use_sim_time)]
- launch/sim_for_rtreach_multi_agent_batch.launch
-
- gui [default: false]
- box_display_limit [default: 100]
- reach_time [default: 0.8]
- experiment_number [default: 0]
- wall_time [default: 1.0]
- docker [default: false]
- velocity [default: 1.0]
- debug [default: ]
- number_of_cars [default: 2]
- timeout [default: 60]
- car_name [default: racecar2]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: fnn_lidar_porto.hdf5]
- algorithm [default: 0]
- launch/sim_for_rtreach_uncertainty.launch
-
- gui [default: true]
- docker [default: false]
- box_display_limit [default: 100]
- world_name [default: track_porto]
- reach_time [default: 1.0]
- map_file [default: $(find race)/maps/porto_track.yaml]
- wall_time [default: 1.0]
- debug [default: ]
- timeout [default: -1]
- parameter_uncertainty [default: 0.0]
- use_ground_truth [default: true]
- use_particles [default: 1]
- number_of_cars [default: 2]
- car_name [default: racecar]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: minivgg_center_data.hdf5]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- scan_topic [default: racecar/scan]
- odometry_topic [default: racecar/odom]
- laser_frame [default: racecar/laser]
- launch/test.launch
-
- gui [default: false]
- enable_keyboard [default: false]
- launch/sim_for_rtreach_dynamic.launch
-
- enable_keyboard [default: false]
- world_name [default: track_porto]
- number_of_cars [default: 2]
- csv_filename [default: porto_obstacles.txt]
- model_name [default: minivgg_1.hdf5]
- map_file [default: $(find race)/maps/porto_track.yaml]
- launch/f1_tenth_devel.launch
-
- world_name [default: track_porto]
- use_sim_time [default: true]
- gui [default: false]
- run_camera [default: false]
- reset_on_crash [default: false]
- verbose [default: false]
- enable_keyboard [default: false]
- launch/sim_for_rtreach_aij_experiments.launch
-
- gui [default: true]
- docker [default: false]
- experiment_number [default: 0]
- algorithm [default: 0]
- control [default: false]
- box_display_limit [default: 100]
- velocity [default: 1.0]
- world_name [default: track_porto]
- reach_time [default: 1.0]
- map_file [default: $(find race)/maps/porto_track.yaml]
- wall_time [default: 1.0]
- debug [default: ]
- timeout [default: -1]
- parameter_uncertainty [default: 0.0]
- position_uncertainty [default: 0.0]
- velocity_uncertainty [default: 0.0]
- use_particles [default: 1]
- number_of_cars [default: 3]
- num_obstacles [default: 5]
- car_name [default: racecar]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: minivgg_center_data.hdf5]
- use_sim_time [default: true]
- verbose [default: false]
- racecar_pose [default: -x -3.5 -y -0.2 -z 0.05]
- racecar2_pose [default: -x 1.5 -y 1.0 -z 0.05]
- racecar3_pose [default: -x -1.5 -y 0.05 -z 0.05]
- launch/sim_for_mpc.launch
-
- world_name [default: track_porto]
- car_name [default: racecar]
- gui [default: true]
- csv_filename [default: track_porto_26780.csv]
- map_file [default: $(find race)/maps/porto_track.yaml]
- random_seed [default: 1516]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- freespace_file [default: porto_freespace.txt]
- num_obstacles [default: 10]
- launch/multicar_disparity_extender.launch
-
- number_of_cars [default: 2]
- launch/sim_for_rtreach.launch
-
- world_name [default: track_porto]
- car_name [default: racecar]
- gui [default: true]
- model_name [default: minivgg_center_data.hdf5]
- csv_filename [default: track_porto_26780.csv]
- lec_only [default: false]
- map_file [default: $(find race)/maps/porto_track.yaml]
- random_seed [default: 15]
- freespace_file [default: porto_freespace.txt]
- num_obstacles [default: 6]
- timeout [default: -1]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- launch/sim_for_rtreach_batch_emsoft.launch
-
- world_number [default: 0]
- car_name [default: racecar]
- gui [default: false]
- lrviz [default: true]
- velocity [default: 1.0]
- algorithm [default: 0]
- wall_time [default: 25]
- random_seed [default: 15]
- timeout [default: -1]
- model_name [default: dave_elu_adam_82.hdf5]
- reset_on_crash [default: false]
- experiment_number [default: 0]
- model_name2 [default: fnn_lidar_porto.hdf5]
- model_name3 [default: fnn_lidar_all.hdf5]
- num_obstacles [default: 6]
- map_file [default: $(find race)/maps/$(arg map_name)]
- use_sim_time [default: true]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- launch/sim_for_rtreach_multi_agent_benchmarking.launch
-
- gui [default: false]
- box_display_limit [default: 100]
- reach_time [default: 0.8]
- experiment_number [default: 0]
- wall_time [default: 1.0]
- docker [default: false]
- velocity [default: 1.0]
- debug [default: ]
- number_of_cars [default: 2]
- timeout [default: 60]
- car_name [default: racecar2]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: fnn_lidar_porto.hdf5]
- algorithm [default: 0]
- launch/move_base_planning.launch
-
- world_name [default: track_porto]
- car_name [default: racecar]
- gui [default: true]
- csv_filename [default: track_porto_26780.csv]
- map_file [default: $(find race)/maps/porto_track.yaml]
- random_seed [default: 1516]
- use_sim_time [default: false]
- verbose [default: false]
- use_sim_time [default: $(arg use_sim_time)]
- freespace_file [default: porto_freespace.txt]
- num_obstacles [default: 10]
- launch/sim_for_rtreach_uncertainty_control.launch
-
- gui [default: true]
- docker [default: false]
- experiment_number [default: 0]
- algorithm [default: 0]
- box_display_limit [default: 100]
- velocity [default: 1.0]
- world_name [default: track_porto]
- reach_time [default: 1.0]
- map_file [default: $(find race)/maps/porto_track.yaml]
- wall_time [default: 1.0]
- debug [default: ]
- timeout [default: -1]
- parameter_uncertainty [default: 0.0]
- position_uncertainty [default: 0.0]
- velocity_uncertainty [default: 0.0]
- use_particles [default: 1]
- number_of_cars [default: 3]
- num_obstacles [default: 5]
- car_name [default: racecar]
- rviz_disp [default: multiagent_reach.rviz]
- model_name [default: minivgg_center_data.hdf5]
- use_sim_time [default: true]
- verbose [default: false]
- racecar_pose [default: -x -3.5 -y -0.2 -z 0.05]
- racecar2_pose [default: -x 1.5 -y 1.0 -z 0.05]
- racecar3_pose [default: -x -1.5 -y 0.05 -z 0.05]