flybots 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flybots-1.0.0/.bandit +6 -0
- flybots-1.0.0/.gitattributes +13 -0
- flybots-1.0.0/.github/ISSUE_TEMPLATE/algorithm_request.yml +53 -0
- flybots-1.0.0/.github/ISSUE_TEMPLATE/bug_report.yml +59 -0
- flybots-1.0.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- flybots-1.0.0/.github/ISSUE_TEMPLATE/docs.yml +22 -0
- flybots-1.0.0/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- flybots-1.0.0/.github/workflows/ci.yml +156 -0
- flybots-1.0.0/.github/workflows/pages.yml +69 -0
- flybots-1.0.0/.github/workflows/release.yml +97 -0
- flybots-1.0.0/.gitignore +59 -0
- flybots-1.0.0/.pre-commit-config.yaml +37 -0
- flybots-1.0.0/.python-version +1 -0
- flybots-1.0.0/CHANGELOG.md +461 -0
- flybots-1.0.0/CODE_OF_CONDUCT.md +61 -0
- flybots-1.0.0/CONTRIBUTING.md +132 -0
- flybots-1.0.0/LICENSE +21 -0
- flybots-1.0.0/PKG-INFO +222 -0
- flybots-1.0.0/README.md +189 -0
- flybots-1.0.0/SECURITY.md +52 -0
- flybots-1.0.0/conftest.py +48 -0
- flybots-1.0.0/docs/.gitignore +3 -0
- flybots-1.0.0/docs/.vitepress/config.ts +289 -0
- flybots-1.0.0/docs/.vitepress/theme/Layout.vue +22 -0
- flybots-1.0.0/docs/.vitepress/theme/components/AttitudeIndicator.vue +229 -0
- flybots-1.0.0/docs/.vitepress/theme/components/CardGrid.vue +28 -0
- flybots-1.0.0/docs/.vitepress/theme/components/StatBand.vue +21 -0
- flybots-1.0.0/docs/.vitepress/theme/custom.css +68 -0
- flybots-1.0.0/docs/.vitepress/theme/index.ts +20 -0
- flybots-1.0.0/docs/.vitepress/theme/style.css +469 -0
- flybots-1.0.0/docs/ROADMAP.md +314 -0
- flybots-1.0.0/docs/guide/architecture.md +142 -0
- flybots-1.0.0/docs/guide/cli.md +157 -0
- flybots-1.0.0/docs/guide/conventions.md +183 -0
- flybots-1.0.0/docs/guide/getting-started.md +143 -0
- flybots-1.0.0/docs/guide/installation.md +123 -0
- flybots-1.0.0/docs/index.md +186 -0
- flybots-1.0.0/docs/learning/design-notes.md +173 -0
- flybots-1.0.0/docs/learning/environments.md +203 -0
- flybots-1.0.0/docs/learning/index.md +119 -0
- flybots-1.0.0/docs/learning/training.md +244 -0
- flybots-1.0.0/docs/package-lock.json +3071 -0
- flybots-1.0.0/docs/package.json +22 -0
- flybots-1.0.0/docs/public/logo.svg +15 -0
- flybots-1.0.0/docs/public/media/promo-poster.png +0 -0
- flybots-1.0.0/docs/shot.mjs +19 -0
- flybots-1.0.0/docs/simulations/environment/costmap-navigation.md +50 -0
- flybots-1.0.0/docs/simulations/environment/index.md +20 -0
- flybots-1.0.0/docs/simulations/estimation/complementary-filter.md +57 -0
- flybots-1.0.0/docs/simulations/estimation/ekf.md +86 -0
- flybots-1.0.0/docs/simulations/estimation/gps-imu-fusion.md +78 -0
- flybots-1.0.0/docs/simulations/estimation/index.md +25 -0
- flybots-1.0.0/docs/simulations/estimation/particle-filter.md +83 -0
- flybots-1.0.0/docs/simulations/estimation/ukf.md +76 -0
- flybots-1.0.0/docs/simulations/index.md +130 -0
- flybots-1.0.0/docs/simulations/path-planning/astar-3d.md +42 -0
- flybots-1.0.0/docs/simulations/path-planning/coverage-planning.md +42 -0
- flybots-1.0.0/docs/simulations/path-planning/index.md +24 -0
- flybots-1.0.0/docs/simulations/path-planning/potential-field-3d.md +46 -0
- flybots-1.0.0/docs/simulations/path-planning/prm-3d.md +40 -0
- flybots-1.0.0/docs/simulations/path-planning/rrt-star-3d.md +43 -0
- flybots-1.0.0/docs/simulations/path-tracking/fixed-wing-mission.md +125 -0
- flybots-1.0.0/docs/simulations/path-tracking/flight-ops-demo.md +61 -0
- flybots-1.0.0/docs/simulations/path-tracking/geometric-control.md +98 -0
- flybots-1.0.0/docs/simulations/path-tracking/index.md +52 -0
- flybots-1.0.0/docs/simulations/path-tracking/lqr-hover.md +68 -0
- flybots-1.0.0/docs/simulations/path-tracking/lqr-tracking.md +87 -0
- flybots-1.0.0/docs/simulations/path-tracking/mpc-tracking.md +84 -0
- flybots-1.0.0/docs/simulations/path-tracking/path-smoothing.md +75 -0
- flybots-1.0.0/docs/simulations/path-tracking/pid-hover.md +62 -0
- flybots-1.0.0/docs/simulations/path-tracking/pure-pursuit.md +98 -0
- flybots-1.0.0/docs/simulations/perception/ekf-slam.md +50 -0
- flybots-1.0.0/docs/simulations/perception/index.md +24 -0
- flybots-1.0.0/docs/simulations/perception/occupancy-mapping.md +65 -0
- flybots-1.0.0/docs/simulations/perception/sensor-suite.md +51 -0
- flybots-1.0.0/docs/simulations/perception/visual-servoing.md +71 -0
- flybots-1.0.0/docs/simulations/sensors/gimbal-bbox-tracking.md +71 -0
- flybots-1.0.0/docs/simulations/sensors/gimbal-tracking.md +55 -0
- flybots-1.0.0/docs/simulations/sensors/index.md +21 -0
- flybots-1.0.0/docs/simulations/swarm/consensus-formation.md +42 -0
- flybots-1.0.0/docs/simulations/swarm/index.md +26 -0
- flybots-1.0.0/docs/simulations/swarm/leader-follower.md +58 -0
- flybots-1.0.0/docs/simulations/swarm/potential-swarm.md +56 -0
- flybots-1.0.0/docs/simulations/swarm/reynolds-flocking.md +58 -0
- flybots-1.0.0/docs/simulations/swarm/virtual-structure.md +57 -0
- flybots-1.0.0/docs/simulations/swarm/voronoi-coverage.md +55 -0
- flybots-1.0.0/docs/simulations/trajectory-planning/frenet-optimal.md +65 -0
- flybots-1.0.0/docs/simulations/trajectory-planning/index.md +24 -0
- flybots-1.0.0/docs/simulations/trajectory-planning/min-snap.md +72 -0
- flybots-1.0.0/docs/simulations/trajectory-planning/polynomial.md +56 -0
- flybots-1.0.0/docs/simulations/trajectory-planning/quintic.md +62 -0
- flybots-1.0.0/docs/simulations/trajectory-tracking/feedback-linearisation.md +62 -0
- flybots-1.0.0/docs/simulations/trajectory-tracking/index.md +23 -0
- flybots-1.0.0/docs/simulations/trajectory-tracking/mppi.md +74 -0
- flybots-1.0.0/docs/simulations/trajectory-tracking/nmpc.md +91 -0
- flybots-1.0.0/docs/simulations/vehicles/fixed-wing-flight.md +54 -0
- flybots-1.0.0/docs/simulations/vehicles/index.md +24 -0
- flybots-1.0.0/docs/simulations/vehicles/multirotor-mixer.md +68 -0
- flybots-1.0.0/docs/simulations/vehicles/quadrotor-dynamics.md +42 -0
- flybots-1.0.0/docs/simulations/vehicles/vtol-transition.md +50 -0
- flybots-1.0.0/docs/vehicles/autopilots.md +205 -0
- flybots-1.0.0/docs/vehicles/fixed-wing.md +197 -0
- flybots-1.0.0/docs/vehicles/index.md +121 -0
- flybots-1.0.0/docs/vehicles/mission-navigation.md +367 -0
- flybots-1.0.0/docs/vehicles/multirotor.md +246 -0
- flybots-1.0.0/docs/vehicles/presets.md +115 -0
- flybots-1.0.0/docs/vehicles/quadrotor.md +122 -0
- flybots-1.0.0/docs/vehicles/trim.md +185 -0
- flybots-1.0.0/docs/vehicles/vtol.md +225 -0
- flybots-1.0.0/policies/hover.npz +0 -0
- flybots-1.0.0/policies/hover_curve.npy +0 -0
- flybots-1.0.0/pyproject.toml +99 -0
- flybots-1.0.0/scripts/make_promo.py +1821 -0
- flybots-1.0.0/scripts/regen_all_gifs.json +7 -0
- flybots-1.0.0/scripts/regen_all_gifs.py +86 -0
- flybots-1.0.0/src/uav_sim/__init__.py +16 -0
- flybots-1.0.0/src/uav_sim/cli/__init__.py +6 -0
- flybots-1.0.0/src/uav_sim/cli/catalogue.py +156 -0
- flybots-1.0.0/src/uav_sim/cli/console.py +77 -0
- flybots-1.0.0/src/uav_sim/cli/main.py +565 -0
- flybots-1.0.0/src/uav_sim/control/__init__.py +27 -0
- flybots-1.0.0/src/uav_sim/control/attitude_controller.py +72 -0
- flybots-1.0.0/src/uav_sim/control/fixed_wing_autopilot.py +461 -0
- flybots-1.0.0/src/uav_sim/control/flight_controller.py +104 -0
- flybots-1.0.0/src/uav_sim/control/position_controller.py +58 -0
- flybots-1.0.0/src/uav_sim/control/rate_controller.py +52 -0
- flybots-1.0.0/src/uav_sim/control/state_machine.py +327 -0
- flybots-1.0.0/src/uav_sim/control/velocity_controller.py +78 -0
- flybots-1.0.0/src/uav_sim/control/vtol_controller.py +369 -0
- flybots-1.0.0/src/uav_sim/costmap/__init__.py +18 -0
- flybots-1.0.0/src/uav_sim/costmap/costmap.py +97 -0
- flybots-1.0.0/src/uav_sim/costmap/footprint_layer.py +58 -0
- flybots-1.0.0/src/uav_sim/costmap/inflation_layer.py +57 -0
- flybots-1.0.0/src/uav_sim/costmap/occupancy_grid.py +283 -0
- flybots-1.0.0/src/uav_sim/costmap/social_layer.py +71 -0
- flybots-1.0.0/src/uav_sim/costmap/velocity_layer.py +28 -0
- flybots-1.0.0/src/uav_sim/environment/__init__.py +31 -0
- flybots-1.0.0/src/uav_sim/environment/buildings.py +99 -0
- flybots-1.0.0/src/uav_sim/environment/default_world.py +136 -0
- flybots-1.0.0/src/uav_sim/environment/obstacles.py +95 -0
- flybots-1.0.0/src/uav_sim/environment/world.py +83 -0
- flybots-1.0.0/src/uav_sim/estimation/__init__.py +17 -0
- flybots-1.0.0/src/uav_sim/estimation/complementary_filter.py +67 -0
- flybots-1.0.0/src/uav_sim/estimation/ekf.py +101 -0
- flybots-1.0.0/src/uav_sim/estimation/particle_filter.py +122 -0
- flybots-1.0.0/src/uav_sim/estimation/process_noise.py +104 -0
- flybots-1.0.0/src/uav_sim/estimation/ukf.py +130 -0
- flybots-1.0.0/src/uav_sim/frames/__init__.py +35 -0
- flybots-1.0.0/src/uav_sim/frames/transforms.py +267 -0
- flybots-1.0.0/src/uav_sim/guidance/__init__.py +59 -0
- flybots-1.0.0/src/uav_sim/guidance/fixed_wing_mission.py +766 -0
- flybots-1.0.0/src/uav_sim/guidance/fixed_wing_paths.py +581 -0
- flybots-1.0.0/src/uav_sim/gym/__init__.py +77 -0
- flybots-1.0.0/src/uav_sim/gym/base.py +212 -0
- flybots-1.0.0/src/uav_sim/gym/fixed_wing_envs.py +321 -0
- flybots-1.0.0/src/uav_sim/gym/optimizers.py +216 -0
- flybots-1.0.0/src/uav_sim/gym/policy.py +196 -0
- flybots-1.0.0/src/uav_sim/gym/quadrotor_envs.py +411 -0
- flybots-1.0.0/src/uav_sim/gym/registry.py +214 -0
- flybots-1.0.0/src/uav_sim/gym/render.py +168 -0
- flybots-1.0.0/src/uav_sim/gym/spaces.py +86 -0
- flybots-1.0.0/src/uav_sim/gym/train.py +329 -0
- flybots-1.0.0/src/uav_sim/logging/__init__.py +5 -0
- flybots-1.0.0/src/uav_sim/logging/sim_logger.py +127 -0
- flybots-1.0.0/src/uav_sim/path_planning/__init__.py +19 -0
- flybots-1.0.0/src/uav_sim/path_planning/astar_3d.py +105 -0
- flybots-1.0.0/src/uav_sim/path_planning/coverage_planner.py +116 -0
- flybots-1.0.0/src/uav_sim/path_planning/plan_through_obstacles.py +70 -0
- flybots-1.0.0/src/uav_sim/path_planning/potential_field_3d.py +107 -0
- flybots-1.0.0/src/uav_sim/path_planning/prm_3d.py +174 -0
- flybots-1.0.0/src/uav_sim/path_planning/rrt_3d.py +225 -0
- flybots-1.0.0/src/uav_sim/path_tracking/__init__.py +21 -0
- flybots-1.0.0/src/uav_sim/path_tracking/flight_ops.py +282 -0
- flybots-1.0.0/src/uav_sim/path_tracking/geometric_controller.py +189 -0
- flybots-1.0.0/src/uav_sim/path_tracking/lqr_controller.py +135 -0
- flybots-1.0.0/src/uav_sim/path_tracking/lqr_path_tracker.py +112 -0
- flybots-1.0.0/src/uav_sim/path_tracking/mpc_controller.py +251 -0
- flybots-1.0.0/src/uav_sim/path_tracking/path_smoothing.py +141 -0
- flybots-1.0.0/src/uav_sim/path_tracking/pid_controller.py +219 -0
- flybots-1.0.0/src/uav_sim/path_tracking/pure_pursuit_3d.py +195 -0
- flybots-1.0.0/src/uav_sim/perception/__init__.py +28 -0
- flybots-1.0.0/src/uav_sim/perception/bbox_tracker.py +192 -0
- flybots-1.0.0/src/uav_sim/perception/obstacle_detection.py +45 -0
- flybots-1.0.0/src/uav_sim/perception/occupancy_mapping.py +82 -0
- flybots-1.0.0/src/uav_sim/perception/point_cloud.py +43 -0
- flybots-1.0.0/src/uav_sim/sensors/__init__.py +34 -0
- flybots-1.0.0/src/uav_sim/sensors/base.py +71 -0
- flybots-1.0.0/src/uav_sim/sensors/camera.py +119 -0
- flybots-1.0.0/src/uav_sim/sensors/gimbal.py +137 -0
- flybots-1.0.0/src/uav_sim/sensors/gimbal_controller.py +190 -0
- flybots-1.0.0/src/uav_sim/sensors/gps.py +34 -0
- flybots-1.0.0/src/uav_sim/sensors/imu.py +112 -0
- flybots-1.0.0/src/uav_sim/sensors/lidar.py +198 -0
- flybots-1.0.0/src/uav_sim/sensors/range_finder.py +33 -0
- flybots-1.0.0/src/uav_sim/simulations/__init__.py +39 -0
- flybots-1.0.0/src/uav_sim/simulations/api.py +89 -0
- flybots-1.0.0/src/uav_sim/simulations/common.py +131 -0
- flybots-1.0.0/src/uav_sim/simulations/contracts.py +84 -0
- flybots-1.0.0/src/uav_sim/simulations/environment/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/environment/costmap_navigation/README.md +32 -0
- flybots-1.0.0/src/uav_sim/simulations/environment/costmap_navigation/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/environment/costmap_navigation/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/environment/costmap_navigation/run.py +256 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/complementary_filter/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/complementary_filter/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/complementary_filter/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/complementary_filter/run.py +200 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ekf/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ekf/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ekf/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ekf/run.py +249 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/gps_imu_fusion/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/gps_imu_fusion/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/gps_imu_fusion/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/gps_imu_fusion/run.py +260 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/particle_filter/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/particle_filter/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/particle_filter/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/particle_filter/run.py +265 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ukf/README.md +36 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ukf/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ukf/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/estimation/ukf/run.py +262 -0
- flybots-1.0.0/src/uav_sim/simulations/mission_runner.py +230 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/astar_3d/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/astar_3d/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/astar_3d/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/astar_3d/run.py +235 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/coverage_planning/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/coverage_planning/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/coverage_planning/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/coverage_planning/run.py +177 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/potential_field_3d/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/potential_field_3d/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/potential_field_3d/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/potential_field_3d/run.py +193 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/prm_3d/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/prm_3d/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/prm_3d/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/prm_3d/run.py +248 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/rrt_star_3d/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/rrt_star_3d/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/rrt_star_3d/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_planning/rrt_star_3d/run.py +212 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/fixed_wing_mission/README.md +60 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/fixed_wing_mission/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/fixed_wing_mission/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/fixed_wing_mission/run.py +343 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/flight_ops_demo/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/flight_ops_demo/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/flight_ops_demo/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/flight_ops_demo/run.py +138 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/geometric_control/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/geometric_control/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/geometric_control/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/geometric_control/run.py +136 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_hover/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_hover/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_hover/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_hover/run.py +123 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_tracking/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_tracking/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_tracking/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/lqr_tracking/run.py +142 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/mpc_tracking/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/mpc_tracking/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/mpc_tracking/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/mpc_tracking/run.py +145 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/path_smoothing_demo/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/path_smoothing_demo/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/path_smoothing_demo/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/path_smoothing_demo/run.py +197 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pid_hover/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pid_hover/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pid_hover/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pid_hover/run.py +112 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pure_pursuit/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pure_pursuit/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pure_pursuit/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/path_tracking/pure_pursuit/run.py +138 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/ekf_slam/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/ekf_slam/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/ekf_slam/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/ekf_slam/run.py +373 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/occupancy_mapping/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/occupancy_mapping/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/occupancy_mapping/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/occupancy_mapping/run.py +290 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/sensor_suite_demo/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/sensor_suite_demo/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/sensor_suite_demo/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/sensor_suite_demo/run.py +282 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing/README.md +30 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing/__main__.py +5 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing/_core.py +286 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing/run.py +24 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_fixed/README.md +42 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_fixed/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_fixed/__main__.py +5 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_fixed/run.py +19 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_gimbal/README.md +42 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_gimbal/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_gimbal/__main__.py +5 -0
- flybots-1.0.0/src/uav_sim/simulations/perception/visual_servoing_gimbal/run.py +19 -0
- flybots-1.0.0/src/uav_sim/simulations/plugins.py +55 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_bbox_tracking/README.md +30 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_bbox_tracking/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_bbox_tracking/__main__.py +5 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_bbox_tracking/run.py +302 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_tracking/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_tracking/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_tracking/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/sensors/gimbal_tracking/run.py +246 -0
- flybots-1.0.0/src/uav_sim/simulations/setup_helpers.py +86 -0
- flybots-1.0.0/src/uav_sim/simulations/standards.py +265 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/consensus_formation/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/consensus_formation/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/consensus_formation/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/consensus_formation/run.py +184 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/leader_follower/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/leader_follower/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/leader_follower/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/leader_follower/run.py +198 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/potential_swarm/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/potential_swarm/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/potential_swarm/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/potential_swarm/run.py +198 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/reynolds_flocking/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/reynolds_flocking/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/reynolds_flocking/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/reynolds_flocking/run.py +208 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/virtual_structure/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/virtual_structure/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/virtual_structure/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/virtual_structure/run.py +222 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/voronoi_coverage/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/voronoi_coverage/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/voronoi_coverage/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/swarm/voronoi_coverage/run.py +216 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/frenet_optimal/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/frenet_optimal/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/frenet_optimal/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/frenet_optimal/run.py +306 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/min_snap/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/min_snap/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/min_snap/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/min_snap/run.py +178 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/polynomial_trajectory/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/polynomial_trajectory/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/polynomial_trajectory/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/polynomial_trajectory/run.py +154 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/run.py +169 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/feedback_linearisation/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/feedback_linearisation/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/feedback_linearisation/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/feedback_linearisation/run.py +137 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/mppi/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/mppi/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/mppi/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/mppi/run.py +248 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/nmpc/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/nmpc/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/nmpc/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/trajectory_tracking/nmpc/run.py +165 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/fixed_wing_flight/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/fixed_wing_flight/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/fixed_wing_flight/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/fixed_wing_flight/run.py +194 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/multirotor_mixer/README.md +69 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/multirotor_mixer/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/multirotor_mixer/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/multirotor_mixer/run.py +302 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/vtol_transition/README.md +21 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/vtol_transition/__init__.py +0 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/vtol_transition/__main__.py +3 -0
- flybots-1.0.0/src/uav_sim/simulations/vehicles/vtol_transition/run.py +217 -0
- flybots-1.0.0/src/uav_sim/swarm/__init__.py +18 -0
- flybots-1.0.0/src/uav_sim/swarm/consensus_formation.py +54 -0
- flybots-1.0.0/src/uav_sim/swarm/coverage.py +111 -0
- flybots-1.0.0/src/uav_sim/swarm/leader_follower.py +60 -0
- flybots-1.0.0/src/uav_sim/swarm/potential_swarm.py +129 -0
- flybots-1.0.0/src/uav_sim/swarm/reynolds_flocking.py +138 -0
- flybots-1.0.0/src/uav_sim/swarm/virtual_structure.py +104 -0
- flybots-1.0.0/src/uav_sim/trajectory_planning/__init__.py +14 -0
- flybots-1.0.0/src/uav_sim/trajectory_planning/frenet_optimal.py +228 -0
- flybots-1.0.0/src/uav_sim/trajectory_planning/min_snap.py +190 -0
- flybots-1.0.0/src/uav_sim/trajectory_planning/polynomial_trajectory.py +122 -0
- flybots-1.0.0/src/uav_sim/trajectory_planning/quintic_polynomial.py +134 -0
- flybots-1.0.0/src/uav_sim/trajectory_tracking/__init__.py +10 -0
- flybots-1.0.0/src/uav_sim/trajectory_tracking/feedback_linearisation.py +119 -0
- flybots-1.0.0/src/uav_sim/trajectory_tracking/mppi.py +176 -0
- flybots-1.0.0/src/uav_sim/trajectory_tracking/nmpc.py +304 -0
- flybots-1.0.0/src/uav_sim/vehicles/__init__.py +55 -0
- flybots-1.0.0/src/uav_sim/vehicles/base.py +96 -0
- flybots-1.0.0/src/uav_sim/vehicles/components/__init__.py +2 -0
- flybots-1.0.0/src/uav_sim/vehicles/components/allocation.py +594 -0
- flybots-1.0.0/src/uav_sim/vehicles/components/mixer.py +78 -0
- flybots-1.0.0/src/uav_sim/vehicles/components/motor.py +85 -0
- flybots-1.0.0/src/uav_sim/vehicles/fixed_wing/__init__.py +31 -0
- flybots-1.0.0/src/uav_sim/vehicles/fixed_wing/aerodynamics.py +403 -0
- flybots-1.0.0/src/uav_sim/vehicles/fixed_wing/fixed_wing.py +356 -0
- flybots-1.0.0/src/uav_sim/vehicles/fixed_wing/presets.py +181 -0
- flybots-1.0.0/src/uav_sim/vehicles/fixed_wing/trim.py +192 -0
- flybots-1.0.0/src/uav_sim/vehicles/footprint.py +124 -0
- flybots-1.0.0/src/uav_sim/vehicles/multirotor/__init__.py +28 -0
- flybots-1.0.0/src/uav_sim/vehicles/multirotor/multirotor.py +393 -0
- flybots-1.0.0/src/uav_sim/vehicles/multirotor/quadrotor.py +125 -0
- flybots-1.0.0/src/uav_sim/vehicles/payloads/__init__.py +2 -0
- flybots-1.0.0/src/uav_sim/vehicles/payloads/gimbal.py +58 -0
- flybots-1.0.0/src/uav_sim/vehicles/presets.py +235 -0
- flybots-1.0.0/src/uav_sim/vehicles/vtol/__init__.py +6 -0
- flybots-1.0.0/src/uav_sim/vehicles/vtol/tiltrotor.py +346 -0
- flybots-1.0.0/src/uav_sim/visualization/__init__.py +84 -0
- flybots-1.0.0/src/uav_sim/visualization/animator.py +210 -0
- flybots-1.0.0/src/uav_sim/visualization/costmap_viz.py +171 -0
- flybots-1.0.0/src/uav_sim/visualization/data_panel.py +220 -0
- flybots-1.0.0/src/uav_sim/visualization/plotting.py +156 -0
- flybots-1.0.0/src/uav_sim/visualization/sensor_viz.py +438 -0
- flybots-1.0.0/src/uav_sim/visualization/three_panel.py +255 -0
- flybots-1.0.0/src/uav_sim/visualization/vehicle_artists.py +421 -0
- flybots-1.0.0/tests/__init__.py +0 -0
- flybots-1.0.0/tests/test_algorithm_regressions.py +596 -0
- flybots-1.0.0/tests/test_allocation.py +457 -0
- flybots-1.0.0/tests/test_bbox_tracker.py +50 -0
- flybots-1.0.0/tests/test_cli.py +213 -0
- flybots-1.0.0/tests/test_control_stack.py +185 -0
- flybots-1.0.0/tests/test_costmap.py +84 -0
- flybots-1.0.0/tests/test_coverage_planner.py +47 -0
- flybots-1.0.0/tests/test_data_panel.py +95 -0
- flybots-1.0.0/tests/test_env_presets.py +59 -0
- flybots-1.0.0/tests/test_environment.py +98 -0
- flybots-1.0.0/tests/test_estimation.py +231 -0
- flybots-1.0.0/tests/test_fixed_wing_aero.py +379 -0
- flybots-1.0.0/tests/test_fixed_wing_mission.py +1105 -0
- flybots-1.0.0/tests/test_footprint.py +55 -0
- flybots-1.0.0/tests/test_footprint_layer.py +33 -0
- flybots-1.0.0/tests/test_frames.py +110 -0
- flybots-1.0.0/tests/test_frenet.py +59 -0
- flybots-1.0.0/tests/test_geometric.py +49 -0
- flybots-1.0.0/tests/test_gimbal.py +72 -0
- flybots-1.0.0/tests/test_gimbal_controller.py +57 -0
- flybots-1.0.0/tests/test_gym.py +450 -0
- flybots-1.0.0/tests/test_integration_flight.py +221 -0
- flybots-1.0.0/tests/test_integration_subsystems.py +364 -0
- flybots-1.0.0/tests/test_lqr.py +61 -0
- flybots-1.0.0/tests/test_lqr_path_tracker.py +35 -0
- flybots-1.0.0/tests/test_min_snap.py +90 -0
- flybots-1.0.0/tests/test_mixer.py +72 -0
- flybots-1.0.0/tests/test_motor.py +93 -0
- flybots-1.0.0/tests/test_mpc_controller.py +38 -0
- flybots-1.0.0/tests/test_multirotor.py +419 -0
- flybots-1.0.0/tests/test_nmpc.py +51 -0
- flybots-1.0.0/tests/test_package.py +23 -0
- flybots-1.0.0/tests/test_path_smoothing.py +67 -0
- flybots-1.0.0/tests/test_perception.py +48 -0
- flybots-1.0.0/tests/test_pid.py +146 -0
- flybots-1.0.0/tests/test_planning.py +204 -0
- flybots-1.0.0/tests/test_presets.py +112 -0
- flybots-1.0.0/tests/test_prm.py +98 -0
- flybots-1.0.0/tests/test_pure_pursuit.py +70 -0
- flybots-1.0.0/tests/test_quadrotor_model.py +108 -0
- flybots-1.0.0/tests/test_quintic.py +51 -0
- flybots-1.0.0/tests/test_sensors.py +217 -0
- flybots-1.0.0/tests/test_state_machine.py +133 -0
- flybots-1.0.0/tests/test_swarm.py +160 -0
- flybots-1.0.0/tests/test_tracking.py +124 -0
- flybots-1.0.0/tests/test_vehicles.py +89 -0
- flybots-1.0.0/tests/test_viz_overhaul.py +82 -0
- flybots-1.0.0/tests/test_vtol_transition.py +278 -0
- flybots-1.0.0/uv.lock +997 -0
- flybots-1.0.0/vercel.json +5 -0
flybots-1.0.0/.bandit
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
[bandit]
|
|
2
|
+
# S101 — assert_used. Pytest is built on assert; flagging it is noise.
|
|
3
|
+
# B404/B603 — subprocess use in scripts/make_promo.py. It invokes the
|
|
4
|
+
# ffmpeg binary shipped by imageio-ffmpeg with a fixed argument list and
|
|
5
|
+
# shell=False. No part of the command line comes from user input.
|
|
6
|
+
skips = S101,B404,B603
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# The 44 simulation GIFs live in Git LFS. The docs and README link them
|
|
2
|
+
# through media.githubusercontent.com -- which is the LFS media endpoint --
|
|
3
|
+
# so neither the docs build nor CI ever has to check LFS out.
|
|
4
|
+
src/uav_sim/simulations/**/*.gif filter=lfs diff=lfs merge=lfs -text
|
|
5
|
+
|
|
6
|
+
# docs/public/ is deliberately NOT in LFS, and the rule above is scoped so it
|
|
7
|
+
# stays that way. VitePress bundles these files at build time, and the README
|
|
8
|
+
# links promo.gif through raw.githubusercontent.com, which serves an LFS file
|
|
9
|
+
# as its pointer text rather than as the image.
|
|
10
|
+
|
|
11
|
+
# Don't skew language statistics with generated or vendored content.
|
|
12
|
+
docs/package-lock.json linguist-generated=true
|
|
13
|
+
uv.lock linguist-generated=true
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: Algorithm request
|
|
2
|
+
description: Suggest an algorithm to implement
|
|
3
|
+
labels: [enhancement, algorithm]
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: algorithm
|
|
7
|
+
attributes:
|
|
8
|
+
label: Algorithm
|
|
9
|
+
placeholder: Informed RRT*
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
- type: dropdown
|
|
14
|
+
id: area
|
|
15
|
+
attributes:
|
|
16
|
+
label: Area
|
|
17
|
+
options:
|
|
18
|
+
- path planning
|
|
19
|
+
- trajectory planning
|
|
20
|
+
- path tracking
|
|
21
|
+
- trajectory tracking
|
|
22
|
+
- state estimation
|
|
23
|
+
- perception
|
|
24
|
+
- swarm
|
|
25
|
+
- vehicle model
|
|
26
|
+
- reinforcement learning
|
|
27
|
+
- other
|
|
28
|
+
validations:
|
|
29
|
+
required: true
|
|
30
|
+
|
|
31
|
+
- type: input
|
|
32
|
+
id: reference
|
|
33
|
+
attributes:
|
|
34
|
+
label: Reference
|
|
35
|
+
description: Author, title, venue, year. A DOI or arXiv link is ideal.
|
|
36
|
+
placeholder: Gammell et al., "Informed RRT*", IROS 2014
|
|
37
|
+
validations:
|
|
38
|
+
required: true
|
|
39
|
+
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: rationale
|
|
42
|
+
attributes:
|
|
43
|
+
label: Why this one
|
|
44
|
+
description: What does it do that the existing implementations do not?
|
|
45
|
+
validations:
|
|
46
|
+
required: true
|
|
47
|
+
|
|
48
|
+
- type: checkboxes
|
|
49
|
+
id: contribution
|
|
50
|
+
attributes:
|
|
51
|
+
label: Contribution
|
|
52
|
+
options:
|
|
53
|
+
- label: I would like to implement this myself
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Something behaves incorrectly
|
|
3
|
+
labels: [bug]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Physics bugs are the interesting ones. The most useful report says
|
|
9
|
+
what you started from, what you applied, what happened, and what
|
|
10
|
+
should have happened.
|
|
11
|
+
|
|
12
|
+
- type: textarea
|
|
13
|
+
id: what-happened
|
|
14
|
+
attributes:
|
|
15
|
+
label: What happened
|
|
16
|
+
description: What did you observe?
|
|
17
|
+
placeholder: The fixed-wing climbs away instead of holding altitude.
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
- type: textarea
|
|
22
|
+
id: expected
|
|
23
|
+
attributes:
|
|
24
|
+
label: What you expected
|
|
25
|
+
placeholder: Trimmed flight should hold altitude to within a metre.
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
|
|
29
|
+
- type: textarea
|
|
30
|
+
id: reproduction
|
|
31
|
+
attributes:
|
|
32
|
+
label: Reproduction
|
|
33
|
+
description: A short script beats a description. This is rendered as Python.
|
|
34
|
+
render: python
|
|
35
|
+
placeholder: |
|
|
36
|
+
from uav_sim.vehicles.fixed_wing import FixedWing
|
|
37
|
+
|
|
38
|
+
aircraft = FixedWing()
|
|
39
|
+
controls = aircraft.reset_trimmed(airspeed=35.0, altitude=200.0)
|
|
40
|
+
for _ in range(5000):
|
|
41
|
+
aircraft.step(controls, 0.002)
|
|
42
|
+
print(aircraft.state[2]) # expected ~200, got 812
|
|
43
|
+
validations:
|
|
44
|
+
required: true
|
|
45
|
+
|
|
46
|
+
- type: input
|
|
47
|
+
id: version
|
|
48
|
+
attributes:
|
|
49
|
+
label: Version
|
|
50
|
+
description: Output of `flybots --version`
|
|
51
|
+
validations:
|
|
52
|
+
required: true
|
|
53
|
+
|
|
54
|
+
- type: textarea
|
|
55
|
+
id: doctor
|
|
56
|
+
attributes:
|
|
57
|
+
label: Environment
|
|
58
|
+
description: Output of `flybots doctor`
|
|
59
|
+
render: shell
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Documentation issue
|
|
2
|
+
description: Something in the docs is wrong, missing or unclear
|
|
3
|
+
labels: [documentation]
|
|
4
|
+
body:
|
|
5
|
+
- type: input
|
|
6
|
+
id: page
|
|
7
|
+
attributes:
|
|
8
|
+
label: Page
|
|
9
|
+
description: URL or file path
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: problem
|
|
15
|
+
attributes:
|
|
16
|
+
label: What is wrong
|
|
17
|
+
description: |
|
|
18
|
+
If something was hard to understand, say what you expected it to
|
|
19
|
+
say. "I could not tell which pitch sign convention applies" is more
|
|
20
|
+
actionable than "the docs are confusing".
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## What changed
|
|
2
|
+
|
|
3
|
+
<!-- One or two sentences. What does this PR do? -->
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
<!-- What problem does this solve? If it fixes a bug, describe the
|
|
8
|
+
incorrect behaviour: what did it do, and what should it have done? -->
|
|
9
|
+
|
|
10
|
+
## How it was verified
|
|
11
|
+
|
|
12
|
+
<!-- How do you know it works? Prefer evidence over assertion:
|
|
13
|
+
numbers, a failing-then-passing test, a before/after comparison. -->
|
|
14
|
+
|
|
15
|
+
- [ ] `uv run pytest` passes
|
|
16
|
+
- [ ] `pre-commit run --all-files` passes
|
|
17
|
+
- [ ] New behaviour is covered by tests that would fail without this change
|
|
18
|
+
|
|
19
|
+
## For new algorithms
|
|
20
|
+
|
|
21
|
+
- [ ] Citation in the module docstring (author, title, venue, year)
|
|
22
|
+
- [ ] Runnable simulation exposing `main()`
|
|
23
|
+
- [ ] Docs page plus a sidebar entry in `docs/.vitepress/config.ts`
|
|
24
|
+
- [ ] Follows the frame conventions in CONTRIBUTING.md (world ENU, body FLU)
|
|
25
|
+
|
|
26
|
+
## Notes for reviewers
|
|
27
|
+
|
|
28
|
+
<!-- Anything you are unsure about, or that deserves a closer look. -->
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Erwin Lejeune - 2026-02-18
|
|
2
|
+
|
|
3
|
+
name: CI
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
push:
|
|
7
|
+
branches: [main, develop]
|
|
8
|
+
pull_request:
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ci-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
env:
|
|
16
|
+
FORCE_COLOR: "1"
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
lint:
|
|
20
|
+
name: Lint
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
24
|
+
- uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5
|
|
25
|
+
with:
|
|
26
|
+
version: latest
|
|
27
|
+
enable-cache: true
|
|
28
|
+
- run: uv python install 3.12
|
|
29
|
+
- run: uv sync --all-groups
|
|
30
|
+
- name: Run pre-commit checks
|
|
31
|
+
uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
|
|
32
|
+
|
|
33
|
+
security:
|
|
34
|
+
name: Security scan
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
38
|
+
- uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5
|
|
39
|
+
with:
|
|
40
|
+
version: latest
|
|
41
|
+
enable-cache: true
|
|
42
|
+
- run: uv python install 3.12
|
|
43
|
+
|
|
44
|
+
# Our own code. This gates the build: anything bandit flags here is
|
|
45
|
+
# something we wrote and can fix.
|
|
46
|
+
- name: Static analysis (bandit)
|
|
47
|
+
run: uvx bandit -q -r src scripts
|
|
48
|
+
|
|
49
|
+
# Producing the input gates, even though auditing it does not. An
|
|
50
|
+
# audit that cannot read its input reports nothing, which looks
|
|
51
|
+
# exactly like an audit that found nothing.
|
|
52
|
+
#
|
|
53
|
+
# --no-header matters: FORCE_COLOR is set for the whole workflow, so
|
|
54
|
+
# uv wraps its header comment in ANSI codes. The escape byte lands
|
|
55
|
+
# before the '#', pip-audit stops seeing a comment, and it rejects
|
|
56
|
+
# the entire file on line 1.
|
|
57
|
+
- name: Export the locked dependency set
|
|
58
|
+
run: |
|
|
59
|
+
uv export --all-groups --format requirements-txt \
|
|
60
|
+
--no-emit-project --no-hashes --no-header --no-annotate > deps.txt
|
|
61
|
+
test -s deps.txt
|
|
62
|
+
# Written as an `if`, not `! grep ...`: bash ignores errexit for a
|
|
63
|
+
# command whose status is inverted with `!`, so the negated form
|
|
64
|
+
# can never fail the step.
|
|
65
|
+
if grep -q $'\x1b' deps.txt; then
|
|
66
|
+
echo "deps.txt contains ANSI escapes; pip-audit will reject it" >&2
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# Advisories appear against pinned versions with no warning and no fix
|
|
71
|
+
# available, so the audit itself reports rather than gates -- a red X
|
|
72
|
+
# nobody can clear teaches contributors to ignore CI.
|
|
73
|
+
- name: Python dependency audit
|
|
74
|
+
continue-on-error: true
|
|
75
|
+
run: uvx pip-audit -r deps.txt --desc
|
|
76
|
+
|
|
77
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
78
|
+
with:
|
|
79
|
+
node-version: 22
|
|
80
|
+
cache: npm
|
|
81
|
+
cache-dependency-path: docs/package-lock.json
|
|
82
|
+
- name: Docs dependency audit
|
|
83
|
+
working-directory: docs
|
|
84
|
+
run: |
|
|
85
|
+
# Print the full report. Two findings survive here, both in the
|
|
86
|
+
# vite range that VitePress 1.6.4 pins, both Windows-only and
|
|
87
|
+
# dev-server-only, and neither reaching the built site. See the
|
|
88
|
+
# `overrides` note in docs/package.json.
|
|
89
|
+
npm audit || true
|
|
90
|
+
# Gate on critical alone, so this step stays green until something
|
|
91
|
+
# lands that genuinely cannot wait for an upstream release.
|
|
92
|
+
npm audit --audit-level=critical
|
|
93
|
+
|
|
94
|
+
test:
|
|
95
|
+
name: Test (Python ${{ matrix.python }})
|
|
96
|
+
runs-on: ubuntu-latest
|
|
97
|
+
strategy:
|
|
98
|
+
fail-fast: false
|
|
99
|
+
matrix:
|
|
100
|
+
python: ["3.12", "3.13"]
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
103
|
+
with:
|
|
104
|
+
lfs: false
|
|
105
|
+
- uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5
|
|
106
|
+
with:
|
|
107
|
+
version: latest
|
|
108
|
+
enable-cache: true
|
|
109
|
+
- run: uv python install ${{ matrix.python }}
|
|
110
|
+
- run: uv sync --all-groups
|
|
111
|
+
- name: Run tests
|
|
112
|
+
run: uv run pytest -q --cov=uav_sim --cov-report=xml --cov-report=term-missing
|
|
113
|
+
- name: Upload coverage
|
|
114
|
+
if: matrix.python == '3.12'
|
|
115
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
116
|
+
with:
|
|
117
|
+
name: coverage
|
|
118
|
+
path: coverage.xml
|
|
119
|
+
if-no-files-found: warn
|
|
120
|
+
|
|
121
|
+
smoke:
|
|
122
|
+
name: CLI smoke test
|
|
123
|
+
runs-on: ubuntu-latest
|
|
124
|
+
steps:
|
|
125
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
126
|
+
- uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5
|
|
127
|
+
with:
|
|
128
|
+
version: latest
|
|
129
|
+
enable-cache: true
|
|
130
|
+
- run: uv python install 3.12
|
|
131
|
+
- run: uv sync --all-groups
|
|
132
|
+
- name: Physics self-check
|
|
133
|
+
run: uv run flybots doctor
|
|
134
|
+
- name: Catalogue is discoverable
|
|
135
|
+
run: |
|
|
136
|
+
uv run flybots list
|
|
137
|
+
uv run flybots envs
|
|
138
|
+
- name: Trim solver
|
|
139
|
+
run: uv run flybots trim skywalker_x8
|
|
140
|
+
- name: Training loop runs end to end
|
|
141
|
+
run: uv run flybots train hover --iterations 3 --directions 4 --eval-episodes 3
|
|
142
|
+
|
|
143
|
+
docs:
|
|
144
|
+
name: Docs build
|
|
145
|
+
runs-on: ubuntu-latest
|
|
146
|
+
steps:
|
|
147
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
148
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
149
|
+
with:
|
|
150
|
+
node-version: 22
|
|
151
|
+
cache: npm
|
|
152
|
+
cache-dependency-path: docs/package-lock.json
|
|
153
|
+
- run: npm ci
|
|
154
|
+
working-directory: docs
|
|
155
|
+
- run: npm run build
|
|
156
|
+
working-directory: docs
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Erwin Lejeune - 2026-02-18
|
|
2
|
+
#
|
|
3
|
+
# Builds the VitePress site and publishes it to GitHub Pages.
|
|
4
|
+
|
|
5
|
+
name: Deploy docs
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
push:
|
|
9
|
+
branches: [main]
|
|
10
|
+
paths:
|
|
11
|
+
- "docs/**"
|
|
12
|
+
- ".github/workflows/pages.yml"
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
pages: write
|
|
18
|
+
id-token: write
|
|
19
|
+
|
|
20
|
+
# Let a running deploy finish rather than cancelling it half-published.
|
|
21
|
+
concurrency:
|
|
22
|
+
group: pages
|
|
23
|
+
cancel-in-progress: false
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
build:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
30
|
+
with:
|
|
31
|
+
# VitePress reads git history to show last-updated timestamps.
|
|
32
|
+
fetch-depth: 0
|
|
33
|
+
# No LFS. The simulation GIFs are the only LFS content, and the
|
|
34
|
+
# docs link them through media.githubusercontent.com rather than
|
|
35
|
+
# bundling them -- checking them out would spend LFS bandwidth on
|
|
36
|
+
# every deploy for files the build never opens. The promo video
|
|
37
|
+
# under docs/public/ is a normal git object precisely so that this
|
|
38
|
+
# stays true. CI's `Docs build` job proves it: same build, no LFS.
|
|
39
|
+
lfs: false
|
|
40
|
+
|
|
41
|
+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
|
|
42
|
+
with:
|
|
43
|
+
node-version: 22
|
|
44
|
+
cache: npm
|
|
45
|
+
cache-dependency-path: docs/package-lock.json
|
|
46
|
+
|
|
47
|
+
- uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5
|
|
48
|
+
|
|
49
|
+
- name: Install dependencies
|
|
50
|
+
run: npm ci
|
|
51
|
+
working-directory: docs
|
|
52
|
+
|
|
53
|
+
- name: Build site
|
|
54
|
+
run: npm run build
|
|
55
|
+
working-directory: docs
|
|
56
|
+
|
|
57
|
+
- uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
|
|
58
|
+
with:
|
|
59
|
+
path: docs/.vitepress/dist
|
|
60
|
+
|
|
61
|
+
deploy:
|
|
62
|
+
needs: build
|
|
63
|
+
runs-on: ubuntu-latest
|
|
64
|
+
environment:
|
|
65
|
+
name: github-pages
|
|
66
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
67
|
+
steps:
|
|
68
|
+
- id: deployment
|
|
69
|
+
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Erwin Lejeune - 2026-08-18
|
|
2
|
+
#
|
|
3
|
+
# Builds the distribution and publishes it to PyPI as `flybots`.
|
|
4
|
+
#
|
|
5
|
+
# Publishing uses PyPI Trusted Publishing (OIDC), so there is no API token
|
|
6
|
+
# in the repository secrets. It needs a one-time setup on PyPI: on the
|
|
7
|
+
# project's "Publishing" page, add a GitHub publisher for
|
|
8
|
+
# guilyx/flybots, workflow `release.yml`, environment `pypi`.
|
|
9
|
+
# Until that exists the publish step fails with an OIDC error rather than
|
|
10
|
+
# silently uploading nothing.
|
|
11
|
+
|
|
12
|
+
name: Release
|
|
13
|
+
|
|
14
|
+
on:
|
|
15
|
+
push:
|
|
16
|
+
tags: ["v*"]
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
inputs:
|
|
19
|
+
dry-run:
|
|
20
|
+
description: "Build and check only, do not upload"
|
|
21
|
+
type: boolean
|
|
22
|
+
default: true
|
|
23
|
+
|
|
24
|
+
permissions:
|
|
25
|
+
contents: read
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
build:
|
|
29
|
+
name: Build distributions
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
33
|
+
with:
|
|
34
|
+
# The sdist bundles the README, not the media it links to, so the
|
|
35
|
+
# 6 MB promo video is dead weight for this job.
|
|
36
|
+
lfs: false
|
|
37
|
+
- uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5
|
|
38
|
+
with:
|
|
39
|
+
version: latest
|
|
40
|
+
enable-cache: true
|
|
41
|
+
- run: uv python install 3.12
|
|
42
|
+
|
|
43
|
+
# A tag that disagrees with pyproject uploads a version nobody can
|
|
44
|
+
# reproduce from the tag. Caught here, before anything is built.
|
|
45
|
+
- name: Tag matches the packaged version
|
|
46
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
47
|
+
run: |
|
|
48
|
+
packaged=$(uv version --short)
|
|
49
|
+
tagged="${GITHUB_REF_NAME#v}"
|
|
50
|
+
echo "pyproject: $packaged, tag: $tagged"
|
|
51
|
+
test "$packaged" = "$tagged"
|
|
52
|
+
|
|
53
|
+
- run: uv build
|
|
54
|
+
|
|
55
|
+
# twine's check is what PyPI itself runs on the long description. A
|
|
56
|
+
# README it cannot render is rejected at upload time, which is a bad
|
|
57
|
+
# place to find out.
|
|
58
|
+
- name: Metadata is valid
|
|
59
|
+
run: uvx twine check dist/*
|
|
60
|
+
|
|
61
|
+
# Proves the wheel installs and that both console scripts resolve --
|
|
62
|
+
# `flybots` and the `uav-sim` alias kept for the rename.
|
|
63
|
+
- name: Wheel installs and the commands work
|
|
64
|
+
run: |
|
|
65
|
+
uv venv /tmp/release-check
|
|
66
|
+
VIRTUAL_ENV=/tmp/release-check uv pip install dist/*.whl
|
|
67
|
+
/tmp/release-check/bin/flybots --version
|
|
68
|
+
/tmp/release-check/bin/uav-sim --version
|
|
69
|
+
|
|
70
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
71
|
+
with:
|
|
72
|
+
name: dist
|
|
73
|
+
path: dist/
|
|
74
|
+
if-no-files-found: error
|
|
75
|
+
|
|
76
|
+
publish:
|
|
77
|
+
name: Publish to PyPI
|
|
78
|
+
needs: build
|
|
79
|
+
if: startsWith(github.ref, 'refs/tags/v') && !inputs.dry-run
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
environment:
|
|
82
|
+
name: pypi
|
|
83
|
+
url: https://pypi.org/project/flybots/
|
|
84
|
+
permissions:
|
|
85
|
+
# Mints the OIDC token Trusted Publishing exchanges for an upload
|
|
86
|
+
# token. Nothing else in this workflow needs it.
|
|
87
|
+
id-token: write
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
90
|
+
with:
|
|
91
|
+
name: dist
|
|
92
|
+
path: dist/
|
|
93
|
+
- uses: astral-sh/setup-uv@e58605a9b6da7c637471fab8847a5e5a6b8df081 # v5
|
|
94
|
+
with:
|
|
95
|
+
version: latest
|
|
96
|
+
- name: Upload
|
|
97
|
+
run: uv publish --trusted-publishing always
|
flybots-1.0.0/.gitignore
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
dist/
|
|
7
|
+
build/
|
|
8
|
+
*.egg
|
|
9
|
+
|
|
10
|
+
# Virtual environments
|
|
11
|
+
.venv/
|
|
12
|
+
venv/
|
|
13
|
+
env/
|
|
14
|
+
|
|
15
|
+
# IDE
|
|
16
|
+
.idea/
|
|
17
|
+
.vscode/
|
|
18
|
+
*.swp
|
|
19
|
+
*.swo
|
|
20
|
+
|
|
21
|
+
# OS
|
|
22
|
+
.DS_Store
|
|
23
|
+
Thumbs.db
|
|
24
|
+
|
|
25
|
+
# Testing
|
|
26
|
+
.pytest_cache/
|
|
27
|
+
.coverage
|
|
28
|
+
htmlcov/
|
|
29
|
+
|
|
30
|
+
# Ruff
|
|
31
|
+
.ruff_cache/
|
|
32
|
+
|
|
33
|
+
*.log
|
|
34
|
+
*.log.gz
|
|
35
|
+
*.log.gz.part
|
|
36
|
+
*.log.gz.part.1
|
|
37
|
+
*.log.gz.part.2
|
|
38
|
+
*.log.gz.part.3
|
|
39
|
+
*.log.gz.part.4
|
|
40
|
+
*.log.gz.part.5
|
|
41
|
+
*.log.gz.part.6
|
|
42
|
+
*.log.gz.part.7
|
|
43
|
+
.env
|
|
44
|
+
|
|
45
|
+
# Generated simulation artifacts
|
|
46
|
+
src/uav_sim/simulations/**/*_log.json
|
|
47
|
+
|
|
48
|
+
# Trained policies, other than the checked-in reference ones.
|
|
49
|
+
# The learning curve belongs with the policy: `scripts/make_promo.py` only
|
|
50
|
+
# takes its reuse path when *both* files are present, so ignoring the curve
|
|
51
|
+
# made every promo render retrain from scratch -- an hour of CPU to change a
|
|
52
|
+
# line of on-screen copy.
|
|
53
|
+
policies/*
|
|
54
|
+
!policies/hover.npz
|
|
55
|
+
!policies/hover_curve.npy
|
|
56
|
+
|
|
57
|
+
# Docs build output
|
|
58
|
+
docs/.vitepress/dist/
|
|
59
|
+
docs/.vitepress/cache/
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# See https://pre-commit.com for more information
|
|
2
|
+
# Run `pre-commit install` to install hooks, then `pre-commit run --all-files` to check
|
|
3
|
+
repos:
|
|
4
|
+
# Conventional commits: feat:, fix:, chore:, docs:, style:, refactor:, test:, etc.
|
|
5
|
+
- repo: https://github.com/commitizen-tools/commitizen
|
|
6
|
+
rev: v3.27.0
|
|
7
|
+
hooks:
|
|
8
|
+
# `stages` belongs on the hook, not the repo — pre-commit warns about
|
|
9
|
+
# it at the repo level and then ignores it.
|
|
10
|
+
- id: commitizen
|
|
11
|
+
stages: [commit-msg]
|
|
12
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
13
|
+
rev: v5.0.0
|
|
14
|
+
hooks:
|
|
15
|
+
- id: trailing-whitespace
|
|
16
|
+
- id: end-of-file-fixer
|
|
17
|
+
- id: check-yaml
|
|
18
|
+
- id: check-added-large-files
|
|
19
|
+
args: ["--maxkb=6000"]
|
|
20
|
+
# The promo video is the one binary deliberately committed outside
|
|
21
|
+
# LFS — it has to be a real file under docs/public/ for the site to
|
|
22
|
+
# bundle it. Exempting it by name keeps the limit meaningful for
|
|
23
|
+
# everything else, which is what the check is actually for.
|
|
24
|
+
exclude: ^docs/public/media/promo\.mp4$
|
|
25
|
+
- id: check-merge-conflict
|
|
26
|
+
- id: debug-statements
|
|
27
|
+
|
|
28
|
+
# Keep this in step with the ruff version in pyproject's dev group.
|
|
29
|
+
# A stale pin here is worse than no pin: ruff's formatter changes between
|
|
30
|
+
# releases, so the two versions fight over the same files and every CI run
|
|
31
|
+
# reformats what the last local run just formatted.
|
|
32
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
33
|
+
rev: v0.15.1
|
|
34
|
+
hooks:
|
|
35
|
+
- id: ruff
|
|
36
|
+
args: [--fix]
|
|
37
|
+
- id: ruff-format
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|