Folder Structure
The following outlines the basic folder structure and gives a high-level overview of the different components in this repository. An overview of the crs software can be found Here and an overview of the ros4crs wrapper Here.
Note: This overview is mainly meant to allow for an easier start and does not contain all or only simplified classes.
The CRS framework is divided in two main parts:
- The first part
crscontains the c++ implementations of the main components (e.g. controller, state estimators, ...). It is designed in a way that should be able to run in a stand-alone fashion, detached from the ros code. - The second
rospart contains the ros specific code. Most ros packages simply wrap around a existingcrsimplementation and perform input/output forwarding as well as rate limitations for specific topics.
Below you can find an overview of the file structure and all packages:
src
├── crs # Raw C++ implementations
│ ├── commons # Shared functionality for all packages (e.g. digital filter, track manager)
│ │
│ ├── controls
│ │ ├── common # Shared interface for all controller classes.
│ │ ├── ff_fb_controller # Implementation of feed forward feed back controllers
│ │ ├── mpc_controller # Implementation of mpc controllers
│ │ ├── joystick # Implementation of a joystick controller
│ │ ├── mpc_solvers
│ │ │ ├── commons # Shared interface for all mpc solvers (e.g. acados, forces, ...
│ │ │ ├── acados
│ │ │ └── acados_pacejka_mpcc_solver # Package containing the acados solver for an mpcc problem.
│ │ └── pid_controller # Implementation of the pid controller
│ │
│ ├── dynamic_models
│ │ ├── common # Shared interface for all dynamic models
│ │ ├── custom_model_template # Example model template to create new model
│ │ ├── kinematic_model # Implementation of the kinematic model
│ │ └── pacejka_model # Implementation of the pacejka model
│ │
│ ├── estimators
│ │ ├── common #Shared interface for all estimators
│ │ ├── kalman_estimator # Implementation of kalman estimators
│ │ └── lowpass_estimator # Implementation of lowpass estimators
│ │
│ ├── planning
│ │ ├── common # Shared interface for all planners
│ │ ├── circle planner # Implemenation of a circle planner
│ │ └── lloyd_planner # Implementation of a Iloyd planner
│ │
│ └── safety_framework
│ │ ├── common # Shared interface for all safety filters
│ │ ├── collision avoider # Implemenation of a collision avoider
│ │ ├── pacejka_mpc_safety_filter # Implementation of a safety_filter
│ │
│ └── sensor_models # Implements the "measurement" for a given state and measurement device
│ ├── common # Shared interface for all sensor models
│ ├── kinematic_sensor_model # Sensor models for the kinematic model
│ └── pacejka_sensor_model # Sensor models for the pacejka model
│
├── ros4crs # Ros wrapper that connects with the raw c++ implementations
│ ├── crs_launch # The main entry point of the ros framework. Mainly launch files
│ ├── crs_msgs # All message types that are used
│ ├── ros_backtracker # Backtracker nodes to recover from accidents
│ ├── ros_controllers # Package allowing to connect ros to the implemented controllers
│ ├── ros_crs_utils # Often used utility functions. E.g. loading parameters from ros parameter server.
│ ├── ros_estimators # Package allowing to connect ros to the implemented estimators
│ ├── ros_planners # Package allowing to connect ros to the implemented planners
│ ├── ros_safety_framework # Package allowing to connect ros to the implemented safety framework
│ ├── ros_simulator # Simulator package, takes inputs and publishes a groundtruth state + measurement
│ ├── ros_visualizer # Visualizer that publishes RVIZ visualization markers
│ └── tools
│ ├── track_generation # Tool to generate track configurations
│ └── opt_sys_id # Package for optimization-based system identification
│
├── ros_io # Hardware interfaces to connect CRS to cars, rockets
│ ├── car # Packages that interface with cars
│ │ ├── ros_wifi_com # Node to send input signals and receive sensor measurements from cars.
│ │ └── ros_battery_monitor # Convenience monitoring node to check battery status
│ └── pihat # Packages for the RPi hat
│
└── dependencies # Folder that is automatically populated with downloaded dependencies (yaml-cpp, catkin_simple,....)