The project uses ROS 2 and is divided into several functional subsystems, each located in its own directory. Below is a detailed description of each package included in the software stack.
Packages describing the physical structure and kinematics of the robot.
descriptionContains the URDF robot model, 3D models (STL/DAE, such as omni_wheel), and launch files for visualization and loading therobot_state_publisher. Responsible for providing TF (Transforms) links between various nodes of the robot.
Packages responsible for making high-level decisions and managing the game state.
behavior_treePackage for running and managing Behavior Trees. Describes the match logic, the sequence of the robot's actions (collecting objects, moving, waiting) using the BehaviorTree.CPP library.map_publisherPackage for publishing the game field map and various zones. Reads the field layout and outputs it to ROS 2 for navigation and logic (e.g., location of pantries, unloading zones, and starting positions).
Packages for motion control and path planning.
cmd_watchdogOpponent-aware command safety guard. Filters muxed velocity commands, blocks unsafe motion near detected opponents, and publishes safety state, visualization markers, and replan requests.mpc_controlModel Predictive Control. Generates optimal motor control commands, taking into account kinematic constraints and obstacles to follow a given trajectory.navigation_monitorNavigation monitoring. Responsible for high-level movement control, provides action servers for tasks like "navigate_to_point", and monitors their successful execution.plannerPath planner (implements pathfinding algorithms, including CCMA). Builds a route from the current point to the target point while bypassing known obstacles.
Packages for working with sensors (cameras, lidars) and recognition.
bov_camera / camera_streamA node for working with machine vision camera. Responsible for sensor configuration, capturing frames, and publishing them (including compression).bov_camera / camera_localizationCamera-based localization module. Uses ArUco marker detection for fast tracking of the robot's position and determining the occupancy/dominance in regions of interest (nut_checker, opponent robots).ekf_localizationExtended Kalman Filter setup based onrobot_localization. Runs local and global EKF nodes, fusing odometry, IMU, LiDAR pose, and camera pose inputs into filtered robot pose estimates.lidar_localizationUses 2D LiDAR obstacle detections and known field landmarks to estimate the robot pose. Publishes LiDAR-based pose updates for localization.opponent_trackerTracks the opponent robot using LiDAR and camera observations, publishing opponent odometry for the planner andcmd_watchdog.
Auxiliary tools for development, monitoring, and debugging.
monitoring / foxgloveIntegration with Foxglove Studio to view telemetry, logs, and the state of behavior trees via a web browser or desktop application.visualization / rviz2Configured RViz2 visualization environment to display the map, lidar point clouds, TF tree, markers, and visual model of the robot in real-time.