Thanks for wanting to contribute to this repo! This guide covers the layout of the repo and how to work on each part.
simulations/
├── gazebo/ # ROS 2 workspace - Gazebo simulation packages
├── chrono/ # Project Chrono terrain/wheel simulation
├── cli/ # Python CLI (the `sim` command)
│ ├── cli.py # Main entry point and argument parsing
│ ├── auth.py # `sim gazebo auth` - dashboard API key management
│ ├── config.py # Persistent config storage
│ ├── drpc.py # Discord RPC integration
│ ├── paths.py # Workspace path utilities
│ ├── output.py # Terminal output helpers (info, warn, die)
│ ├── gazebo/ # `sim gazebo *` sub-commands
│ └── chrono/ # `sim chrono *` sub-commands
├── docker/ # Dockerfile and docker-compose files
├── pixi.toml # Native environment definition (ROS 2 Jazzy + Gazebo Harmonic)
├── robots.json # Robot configuration registry
├── ruff.toml # Ruff linter/formatter configuration
└── pyproject.toml # Python package config
The ROS 2 workspace containing the Gazebo Harmonic simulation packages. Built with colcon via the native pixi environment or the Dev Container.
Packages:
<robot>_bringup- launch files, controller YAML, RViz config<robot>_description- URDF/SDF models and meshessim_common- shared ROS utilities and the joint GUI nodesim_worlds- Gazebo world definitions
When adding or modifying a package, keep package.xml and CMakeLists.txt up to date so colcon can resolve build order and dependencies.
Project Chrono simulations for wheel-soil interaction research using the SCM (Soil Contact Model). Still in early development.
Python package providing the sim command. Two top-level subcommands:
sim gazebo - Gazebo/ROS 2 simulation:
cli/gazebo/docker.py-sim gazebo dockerbuild and launch logiccli/gazebo/native.py-sim gazebo nativebuild and launch logic (pixi environment)cli/gazebo/create/-sim gazebo create/sim gazebo update(OnShape → URDF pipeline)
sim chrono - Chrono SCM terrain simulation:
cli/chrono/chrono.py-sim chrono run/sim chrono clean
Shared:
cli/auth.py-sim gazebo auth(dashboard API key)cli/paths.py- Workspace path utilitiescli/output.py- Terminal output helpers (info,warn,die)
Go look at the trickfire-docs documentation for more info.
The primary workflow uses pixi for a self-contained native environment. Follow the Getting Started guide.
For docs/ changes, only Node.js is required.
After installing, run make hooks once to register the git pre-commit and commit-msg hooks locally.
All formatters run automatically on save in VS Code. Install the recommended extensions when prompted.
| Language | Formatter |
|---|---|
| Python | Ruff (charliermarsh.ruff) |
| JS / TS / JSON / JSONC | Prettier (esbenp.prettier-vscode) - follow the project's Prettier configuration (including 4-space indentation) |
| XML | XML Tools (DotJoshJohnson.xml) |
| Dockerfile | Docker (ms-azuretools.vscode-containers) |
Pre-commit hooks enforce all formatters automatically at commit time. You can also run them manually against staged files:
pre-commit runFor Python specifically:
ruff check .
ruff format .Configuration lives in ruff.toml. The gazebo/build, gazebo/install, and gazebo/log directories are excluded automatically.