Terra contains all the code that is part of a ROS codebase and implements the brains of our devices. This main branch contains the current fully integrated and tested functionality for the rover.
RoverNet: cmr_rovernet
- Description: CMR controls stack (Jetson ↔ ECE) for arm control, drives control, and ECE feedback.
Controller Input: cmr_controller_remote
- Description: PS5 controller input reception for data sent by team laptop over UDP.
- Flow: Controller → Laptop → Jetson →
cmr_controller_remote→cmr_rovernet.
Arm URDF Data: cmr_arm_sim
- Description: Hosts the Rover Arm's URDF for our Inverse Kinematics algorithms.
- Additional: Includes a launch file to visualize the arm: display.launch.py.
Arm Inverse Kinematics: cmr_arm_simulator
- Description: Contains the ROS2 MoveIt configs and basic launch files to implement IK for the rover's arm.
Arm PS5 Controller Control: moveit_servo
- Description: Initializes the IK algorithm, takes controller data from
cmr_controller_remote, and outputs arm joint positions/velocities tocmr_rovernet.
Fabric Nodes: cmr_fabric
- Description: Custom nodes with better fault handling and configuration management.
- Features:
- Launch ROS nodes using a config folder with TOML files.
- Avoids manually launching each node.
- Example:
rovernet.launch.pyand the config folder incmr_rovernet.
IMU Input: cmr_imu
- Description: Pulls data from WitMotion's HWT905 IMU and feeds it into an IMU topic for other packages.
Custom Messages: cmr_msgs
- Description: Contains and initializes custom message types for CMR-specific node-to-node communication.
C++ Utility Functions: cmr_utils
- Description: Custom functions to simplify C++ ROS2 development (not used much anymore).
Camera Integration: cmr_cams
- Description: Contains the functiaonlity for using the Rover's cameras
GCS Bridge (Foxglove): launch/gcs_bridge.launch.py
- Description: Starts the Foxglove WebSocket bridge (
foxglove_bridge) so Foxglove Studio can connect to the rover. Used in place ofrosbridge_server— lower latency and speaks Foxglove's native WebSocket protocol. - Install dep (Humble):
sudo apt install ros-humble-foxglove-bridge - Launch:
ros2 launch launch/gcs_bridge.launch.py- Optional args:
port:=8765 address:=0.0.0.0 tls:=false
- Optional args:
- Connection URL from Foxglove Studio:
ws://<rover_ip>:8765(defaults; change with theportarg above). - QoS overrides: camera / image / point-cloud / IMU / pose topics are
forwarded with
BEST_EFFORTand queue depth 1 so a stalled RF link cannot back-pressure the bridge. Command and service topics stay on reliable QoS. See theBEST_EFFORT_TOPIC_REGEXESlist in the launch file.
Astrotech rover node: src/astrotech_rover
- Description: ROS 2 node for the Astrotech science payload. Runs the
real hardware drivers by default (auger moteus stack, CMR mixing
servo, TCD1340 Raman, SCD-30 environment); each can be swapped for a
simulation driver via a
URC_*_MOCK=1env var for GUI development without hardware. Interface contract:src/astrotech_rover/config/astrotech_interfaces.yaml. - Foxglove GUI (panels + layouts) and the full operator/dev guide live
under
gui/— start withgui/README.md.
One-time setup:
colcon build --symlink-install --packages-select cmr_msgs astrotech_rover
source install/setup.bashReal hardware (default — the normal rover command):
ros2 launch astrotech_rover astrotech.launch.pyNo hardware (GUI dev / demo — mock any or all features):
URC_AUGER_MOCK=1 URC_MIXING_SERVO_MOCK=1 URC_RAMAN_MOCK=1 URC_ENV_MOCK=1 \
ros2 launch astrotech_rover astrotech.launch.pyBoth bring up astrotech_node plus the Foxglove bridge on
ws://localhost:8765. Then connect Foxglove Studio and import a layout
from gui/layouts/. First time, install the custom
panels extension (cd gui/extensions/urc-astrotech-panels && npm install && npm run build && npm run local-install, then relaunch Foxglove).
Full launch / debug / camera / sensor-wiring guide:
gui/operator_guide.md. System overview and
what's wired: gui/README.md.
Camera publishers aren't part of
astrotech_rover; they're launched rover-side fromsrc/cmr_cams/(cmr_cv nodes) plus the stereolabszed_wrapper. Against a hardware-free dev launch the Foxglove Image panels render but show "no messages on topic" — expected. See the camera section ofgui/operator_guide.md.
A smoke test (build, launch, check topics/rates, call a service) is at
src/astrotech_rover/scripts/smoke_test.sh; run from the repo root
on a ROS 2 Humble machine.
- Autonomous Navigation: cmr_navigation
- GPS Functionality (inside of cmr_navigation in old main, gps.py)
- Arm Autonomy
- ArUco Tag Detection
- Drives Simulation
- AruCo Tag Navigation (Spiral Algorithm)
- Bird's Eye View
- Obstacle Detection: cmr_obstacle_data
- Drives GUI: cmr_param_gui
- Improved camera integration