flybots 1.0.0__py3-none-any.whl

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.
Files changed (323) hide show
  1. flybots-1.0.0.dist-info/METADATA +222 -0
  2. flybots-1.0.0.dist-info/RECORD +323 -0
  3. flybots-1.0.0.dist-info/WHEEL +4 -0
  4. flybots-1.0.0.dist-info/entry_points.txt +3 -0
  5. flybots-1.0.0.dist-info/licenses/LICENSE +21 -0
  6. uav_sim/__init__.py +16 -0
  7. uav_sim/cli/__init__.py +6 -0
  8. uav_sim/cli/catalogue.py +156 -0
  9. uav_sim/cli/console.py +77 -0
  10. uav_sim/cli/main.py +565 -0
  11. uav_sim/control/__init__.py +27 -0
  12. uav_sim/control/attitude_controller.py +72 -0
  13. uav_sim/control/fixed_wing_autopilot.py +461 -0
  14. uav_sim/control/flight_controller.py +104 -0
  15. uav_sim/control/position_controller.py +58 -0
  16. uav_sim/control/rate_controller.py +52 -0
  17. uav_sim/control/state_machine.py +327 -0
  18. uav_sim/control/velocity_controller.py +78 -0
  19. uav_sim/control/vtol_controller.py +369 -0
  20. uav_sim/costmap/__init__.py +18 -0
  21. uav_sim/costmap/costmap.py +97 -0
  22. uav_sim/costmap/footprint_layer.py +58 -0
  23. uav_sim/costmap/inflation_layer.py +57 -0
  24. uav_sim/costmap/occupancy_grid.py +283 -0
  25. uav_sim/costmap/social_layer.py +71 -0
  26. uav_sim/costmap/velocity_layer.py +28 -0
  27. uav_sim/environment/__init__.py +31 -0
  28. uav_sim/environment/buildings.py +99 -0
  29. uav_sim/environment/default_world.py +136 -0
  30. uav_sim/environment/obstacles.py +95 -0
  31. uav_sim/environment/world.py +83 -0
  32. uav_sim/estimation/__init__.py +17 -0
  33. uav_sim/estimation/complementary_filter.py +67 -0
  34. uav_sim/estimation/ekf.py +101 -0
  35. uav_sim/estimation/particle_filter.py +122 -0
  36. uav_sim/estimation/process_noise.py +104 -0
  37. uav_sim/estimation/ukf.py +130 -0
  38. uav_sim/frames/__init__.py +35 -0
  39. uav_sim/frames/transforms.py +267 -0
  40. uav_sim/guidance/__init__.py +59 -0
  41. uav_sim/guidance/fixed_wing_mission.py +766 -0
  42. uav_sim/guidance/fixed_wing_paths.py +581 -0
  43. uav_sim/gym/__init__.py +77 -0
  44. uav_sim/gym/base.py +212 -0
  45. uav_sim/gym/fixed_wing_envs.py +321 -0
  46. uav_sim/gym/optimizers.py +216 -0
  47. uav_sim/gym/policy.py +196 -0
  48. uav_sim/gym/quadrotor_envs.py +411 -0
  49. uav_sim/gym/registry.py +214 -0
  50. uav_sim/gym/render.py +168 -0
  51. uav_sim/gym/spaces.py +86 -0
  52. uav_sim/gym/train.py +329 -0
  53. uav_sim/logging/__init__.py +5 -0
  54. uav_sim/logging/sim_logger.py +127 -0
  55. uav_sim/path_planning/__init__.py +19 -0
  56. uav_sim/path_planning/astar_3d.py +105 -0
  57. uav_sim/path_planning/coverage_planner.py +116 -0
  58. uav_sim/path_planning/plan_through_obstacles.py +70 -0
  59. uav_sim/path_planning/potential_field_3d.py +107 -0
  60. uav_sim/path_planning/prm_3d.py +174 -0
  61. uav_sim/path_planning/rrt_3d.py +225 -0
  62. uav_sim/path_tracking/__init__.py +21 -0
  63. uav_sim/path_tracking/flight_ops.py +282 -0
  64. uav_sim/path_tracking/geometric_controller.py +189 -0
  65. uav_sim/path_tracking/lqr_controller.py +135 -0
  66. uav_sim/path_tracking/lqr_path_tracker.py +112 -0
  67. uav_sim/path_tracking/mpc_controller.py +251 -0
  68. uav_sim/path_tracking/path_smoothing.py +141 -0
  69. uav_sim/path_tracking/pid_controller.py +219 -0
  70. uav_sim/path_tracking/pure_pursuit_3d.py +195 -0
  71. uav_sim/perception/__init__.py +28 -0
  72. uav_sim/perception/bbox_tracker.py +192 -0
  73. uav_sim/perception/obstacle_detection.py +45 -0
  74. uav_sim/perception/occupancy_mapping.py +82 -0
  75. uav_sim/perception/point_cloud.py +43 -0
  76. uav_sim/sensors/__init__.py +34 -0
  77. uav_sim/sensors/base.py +71 -0
  78. uav_sim/sensors/camera.py +119 -0
  79. uav_sim/sensors/gimbal.py +137 -0
  80. uav_sim/sensors/gimbal_controller.py +190 -0
  81. uav_sim/sensors/gps.py +34 -0
  82. uav_sim/sensors/imu.py +112 -0
  83. uav_sim/sensors/lidar.py +198 -0
  84. uav_sim/sensors/range_finder.py +33 -0
  85. uav_sim/simulations/__init__.py +39 -0
  86. uav_sim/simulations/api.py +89 -0
  87. uav_sim/simulations/common.py +131 -0
  88. uav_sim/simulations/contracts.py +84 -0
  89. uav_sim/simulations/environment/__init__.py +0 -0
  90. uav_sim/simulations/environment/costmap_navigation/README.md +32 -0
  91. uav_sim/simulations/environment/costmap_navigation/__init__.py +0 -0
  92. uav_sim/simulations/environment/costmap_navigation/__main__.py +3 -0
  93. uav_sim/simulations/environment/costmap_navigation/run.py +256 -0
  94. uav_sim/simulations/estimation/__init__.py +0 -0
  95. uav_sim/simulations/estimation/complementary_filter/README.md +21 -0
  96. uav_sim/simulations/estimation/complementary_filter/__init__.py +0 -0
  97. uav_sim/simulations/estimation/complementary_filter/__main__.py +3 -0
  98. uav_sim/simulations/estimation/complementary_filter/run.py +200 -0
  99. uav_sim/simulations/estimation/ekf/README.md +21 -0
  100. uav_sim/simulations/estimation/ekf/__init__.py +0 -0
  101. uav_sim/simulations/estimation/ekf/__main__.py +3 -0
  102. uav_sim/simulations/estimation/ekf/run.py +249 -0
  103. uav_sim/simulations/estimation/gps_imu_fusion/README.md +21 -0
  104. uav_sim/simulations/estimation/gps_imu_fusion/__init__.py +0 -0
  105. uav_sim/simulations/estimation/gps_imu_fusion/__main__.py +3 -0
  106. uav_sim/simulations/estimation/gps_imu_fusion/run.py +260 -0
  107. uav_sim/simulations/estimation/particle_filter/README.md +21 -0
  108. uav_sim/simulations/estimation/particle_filter/__init__.py +0 -0
  109. uav_sim/simulations/estimation/particle_filter/__main__.py +3 -0
  110. uav_sim/simulations/estimation/particle_filter/run.py +265 -0
  111. uav_sim/simulations/estimation/ukf/README.md +36 -0
  112. uav_sim/simulations/estimation/ukf/__init__.py +0 -0
  113. uav_sim/simulations/estimation/ukf/__main__.py +3 -0
  114. uav_sim/simulations/estimation/ukf/run.py +262 -0
  115. uav_sim/simulations/mission_runner.py +230 -0
  116. uav_sim/simulations/path_planning/__init__.py +0 -0
  117. uav_sim/simulations/path_planning/astar_3d/README.md +21 -0
  118. uav_sim/simulations/path_planning/astar_3d/__init__.py +0 -0
  119. uav_sim/simulations/path_planning/astar_3d/__main__.py +3 -0
  120. uav_sim/simulations/path_planning/astar_3d/run.py +235 -0
  121. uav_sim/simulations/path_planning/coverage_planning/README.md +21 -0
  122. uav_sim/simulations/path_planning/coverage_planning/__init__.py +0 -0
  123. uav_sim/simulations/path_planning/coverage_planning/__main__.py +3 -0
  124. uav_sim/simulations/path_planning/coverage_planning/run.py +177 -0
  125. uav_sim/simulations/path_planning/potential_field_3d/README.md +21 -0
  126. uav_sim/simulations/path_planning/potential_field_3d/__init__.py +0 -0
  127. uav_sim/simulations/path_planning/potential_field_3d/__main__.py +3 -0
  128. uav_sim/simulations/path_planning/potential_field_3d/run.py +193 -0
  129. uav_sim/simulations/path_planning/prm_3d/README.md +21 -0
  130. uav_sim/simulations/path_planning/prm_3d/__init__.py +0 -0
  131. uav_sim/simulations/path_planning/prm_3d/__main__.py +3 -0
  132. uav_sim/simulations/path_planning/prm_3d/run.py +248 -0
  133. uav_sim/simulations/path_planning/rrt_star_3d/README.md +21 -0
  134. uav_sim/simulations/path_planning/rrt_star_3d/__init__.py +0 -0
  135. uav_sim/simulations/path_planning/rrt_star_3d/__main__.py +3 -0
  136. uav_sim/simulations/path_planning/rrt_star_3d/run.py +212 -0
  137. uav_sim/simulations/path_tracking/__init__.py +0 -0
  138. uav_sim/simulations/path_tracking/fixed_wing_mission/README.md +60 -0
  139. uav_sim/simulations/path_tracking/fixed_wing_mission/__init__.py +0 -0
  140. uav_sim/simulations/path_tracking/fixed_wing_mission/__main__.py +3 -0
  141. uav_sim/simulations/path_tracking/fixed_wing_mission/run.py +343 -0
  142. uav_sim/simulations/path_tracking/flight_ops_demo/README.md +21 -0
  143. uav_sim/simulations/path_tracking/flight_ops_demo/__init__.py +0 -0
  144. uav_sim/simulations/path_tracking/flight_ops_demo/__main__.py +3 -0
  145. uav_sim/simulations/path_tracking/flight_ops_demo/run.py +138 -0
  146. uav_sim/simulations/path_tracking/geometric_control/README.md +21 -0
  147. uav_sim/simulations/path_tracking/geometric_control/__init__.py +0 -0
  148. uav_sim/simulations/path_tracking/geometric_control/__main__.py +3 -0
  149. uav_sim/simulations/path_tracking/geometric_control/run.py +136 -0
  150. uav_sim/simulations/path_tracking/lqr_hover/README.md +21 -0
  151. uav_sim/simulations/path_tracking/lqr_hover/__init__.py +0 -0
  152. uav_sim/simulations/path_tracking/lqr_hover/__main__.py +3 -0
  153. uav_sim/simulations/path_tracking/lqr_hover/run.py +123 -0
  154. uav_sim/simulations/path_tracking/lqr_tracking/README.md +21 -0
  155. uav_sim/simulations/path_tracking/lqr_tracking/__init__.py +0 -0
  156. uav_sim/simulations/path_tracking/lqr_tracking/__main__.py +3 -0
  157. uav_sim/simulations/path_tracking/lqr_tracking/run.py +142 -0
  158. uav_sim/simulations/path_tracking/mpc_tracking/README.md +21 -0
  159. uav_sim/simulations/path_tracking/mpc_tracking/__init__.py +0 -0
  160. uav_sim/simulations/path_tracking/mpc_tracking/__main__.py +3 -0
  161. uav_sim/simulations/path_tracking/mpc_tracking/run.py +145 -0
  162. uav_sim/simulations/path_tracking/path_smoothing_demo/README.md +21 -0
  163. uav_sim/simulations/path_tracking/path_smoothing_demo/__init__.py +0 -0
  164. uav_sim/simulations/path_tracking/path_smoothing_demo/__main__.py +3 -0
  165. uav_sim/simulations/path_tracking/path_smoothing_demo/run.py +197 -0
  166. uav_sim/simulations/path_tracking/pid_hover/README.md +21 -0
  167. uav_sim/simulations/path_tracking/pid_hover/__init__.py +0 -0
  168. uav_sim/simulations/path_tracking/pid_hover/__main__.py +3 -0
  169. uav_sim/simulations/path_tracking/pid_hover/run.py +112 -0
  170. uav_sim/simulations/path_tracking/pure_pursuit/README.md +21 -0
  171. uav_sim/simulations/path_tracking/pure_pursuit/__init__.py +0 -0
  172. uav_sim/simulations/path_tracking/pure_pursuit/__main__.py +3 -0
  173. uav_sim/simulations/path_tracking/pure_pursuit/run.py +138 -0
  174. uav_sim/simulations/perception/__init__.py +0 -0
  175. uav_sim/simulations/perception/ekf_slam/README.md +21 -0
  176. uav_sim/simulations/perception/ekf_slam/__init__.py +0 -0
  177. uav_sim/simulations/perception/ekf_slam/__main__.py +3 -0
  178. uav_sim/simulations/perception/ekf_slam/run.py +373 -0
  179. uav_sim/simulations/perception/occupancy_mapping/README.md +21 -0
  180. uav_sim/simulations/perception/occupancy_mapping/__init__.py +0 -0
  181. uav_sim/simulations/perception/occupancy_mapping/__main__.py +3 -0
  182. uav_sim/simulations/perception/occupancy_mapping/run.py +290 -0
  183. uav_sim/simulations/perception/sensor_suite_demo/README.md +21 -0
  184. uav_sim/simulations/perception/sensor_suite_demo/__init__.py +0 -0
  185. uav_sim/simulations/perception/sensor_suite_demo/__main__.py +3 -0
  186. uav_sim/simulations/perception/sensor_suite_demo/run.py +282 -0
  187. uav_sim/simulations/perception/visual_servoing/README.md +30 -0
  188. uav_sim/simulations/perception/visual_servoing/__init__.py +0 -0
  189. uav_sim/simulations/perception/visual_servoing/__main__.py +5 -0
  190. uav_sim/simulations/perception/visual_servoing/_core.py +286 -0
  191. uav_sim/simulations/perception/visual_servoing/run.py +24 -0
  192. uav_sim/simulations/perception/visual_servoing_fixed/README.md +42 -0
  193. uav_sim/simulations/perception/visual_servoing_fixed/__init__.py +0 -0
  194. uav_sim/simulations/perception/visual_servoing_fixed/__main__.py +5 -0
  195. uav_sim/simulations/perception/visual_servoing_fixed/run.py +19 -0
  196. uav_sim/simulations/perception/visual_servoing_gimbal/README.md +42 -0
  197. uav_sim/simulations/perception/visual_servoing_gimbal/__init__.py +0 -0
  198. uav_sim/simulations/perception/visual_servoing_gimbal/__main__.py +5 -0
  199. uav_sim/simulations/perception/visual_servoing_gimbal/run.py +19 -0
  200. uav_sim/simulations/plugins.py +55 -0
  201. uav_sim/simulations/sensors/__init__.py +0 -0
  202. uav_sim/simulations/sensors/gimbal_bbox_tracking/README.md +30 -0
  203. uav_sim/simulations/sensors/gimbal_bbox_tracking/__init__.py +0 -0
  204. uav_sim/simulations/sensors/gimbal_bbox_tracking/__main__.py +5 -0
  205. uav_sim/simulations/sensors/gimbal_bbox_tracking/run.py +302 -0
  206. uav_sim/simulations/sensors/gimbal_tracking/README.md +21 -0
  207. uav_sim/simulations/sensors/gimbal_tracking/__init__.py +0 -0
  208. uav_sim/simulations/sensors/gimbal_tracking/__main__.py +3 -0
  209. uav_sim/simulations/sensors/gimbal_tracking/run.py +246 -0
  210. uav_sim/simulations/setup_helpers.py +86 -0
  211. uav_sim/simulations/standards.py +265 -0
  212. uav_sim/simulations/swarm/__init__.py +0 -0
  213. uav_sim/simulations/swarm/consensus_formation/README.md +21 -0
  214. uav_sim/simulations/swarm/consensus_formation/__init__.py +0 -0
  215. uav_sim/simulations/swarm/consensus_formation/__main__.py +3 -0
  216. uav_sim/simulations/swarm/consensus_formation/run.py +184 -0
  217. uav_sim/simulations/swarm/leader_follower/README.md +21 -0
  218. uav_sim/simulations/swarm/leader_follower/__init__.py +0 -0
  219. uav_sim/simulations/swarm/leader_follower/__main__.py +3 -0
  220. uav_sim/simulations/swarm/leader_follower/run.py +198 -0
  221. uav_sim/simulations/swarm/potential_swarm/README.md +21 -0
  222. uav_sim/simulations/swarm/potential_swarm/__init__.py +0 -0
  223. uav_sim/simulations/swarm/potential_swarm/__main__.py +3 -0
  224. uav_sim/simulations/swarm/potential_swarm/run.py +198 -0
  225. uav_sim/simulations/swarm/reynolds_flocking/README.md +21 -0
  226. uav_sim/simulations/swarm/reynolds_flocking/__init__.py +0 -0
  227. uav_sim/simulations/swarm/reynolds_flocking/__main__.py +3 -0
  228. uav_sim/simulations/swarm/reynolds_flocking/run.py +208 -0
  229. uav_sim/simulations/swarm/virtual_structure/README.md +21 -0
  230. uav_sim/simulations/swarm/virtual_structure/__init__.py +0 -0
  231. uav_sim/simulations/swarm/virtual_structure/__main__.py +3 -0
  232. uav_sim/simulations/swarm/virtual_structure/run.py +222 -0
  233. uav_sim/simulations/swarm/voronoi_coverage/README.md +21 -0
  234. uav_sim/simulations/swarm/voronoi_coverage/__init__.py +0 -0
  235. uav_sim/simulations/swarm/voronoi_coverage/__main__.py +3 -0
  236. uav_sim/simulations/swarm/voronoi_coverage/run.py +216 -0
  237. uav_sim/simulations/trajectory_planning/__init__.py +0 -0
  238. uav_sim/simulations/trajectory_planning/frenet_optimal/README.md +21 -0
  239. uav_sim/simulations/trajectory_planning/frenet_optimal/__init__.py +0 -0
  240. uav_sim/simulations/trajectory_planning/frenet_optimal/__main__.py +3 -0
  241. uav_sim/simulations/trajectory_planning/frenet_optimal/run.py +306 -0
  242. uav_sim/simulations/trajectory_planning/min_snap/README.md +21 -0
  243. uav_sim/simulations/trajectory_planning/min_snap/__init__.py +0 -0
  244. uav_sim/simulations/trajectory_planning/min_snap/__main__.py +3 -0
  245. uav_sim/simulations/trajectory_planning/min_snap/run.py +178 -0
  246. uav_sim/simulations/trajectory_planning/polynomial_trajectory/README.md +21 -0
  247. uav_sim/simulations/trajectory_planning/polynomial_trajectory/__init__.py +0 -0
  248. uav_sim/simulations/trajectory_planning/polynomial_trajectory/__main__.py +3 -0
  249. uav_sim/simulations/trajectory_planning/polynomial_trajectory/run.py +154 -0
  250. uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/README.md +21 -0
  251. uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/__init__.py +0 -0
  252. uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/__main__.py +3 -0
  253. uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/run.py +169 -0
  254. uav_sim/simulations/trajectory_tracking/__init__.py +0 -0
  255. uav_sim/simulations/trajectory_tracking/feedback_linearisation/README.md +21 -0
  256. uav_sim/simulations/trajectory_tracking/feedback_linearisation/__init__.py +0 -0
  257. uav_sim/simulations/trajectory_tracking/feedback_linearisation/__main__.py +3 -0
  258. uav_sim/simulations/trajectory_tracking/feedback_linearisation/run.py +137 -0
  259. uav_sim/simulations/trajectory_tracking/mppi/README.md +21 -0
  260. uav_sim/simulations/trajectory_tracking/mppi/__init__.py +0 -0
  261. uav_sim/simulations/trajectory_tracking/mppi/__main__.py +3 -0
  262. uav_sim/simulations/trajectory_tracking/mppi/run.py +248 -0
  263. uav_sim/simulations/trajectory_tracking/nmpc/README.md +21 -0
  264. uav_sim/simulations/trajectory_tracking/nmpc/__init__.py +0 -0
  265. uav_sim/simulations/trajectory_tracking/nmpc/__main__.py +3 -0
  266. uav_sim/simulations/trajectory_tracking/nmpc/run.py +165 -0
  267. uav_sim/simulations/vehicles/__init__.py +0 -0
  268. uav_sim/simulations/vehicles/fixed_wing_flight/README.md +21 -0
  269. uav_sim/simulations/vehicles/fixed_wing_flight/__init__.py +0 -0
  270. uav_sim/simulations/vehicles/fixed_wing_flight/__main__.py +3 -0
  271. uav_sim/simulations/vehicles/fixed_wing_flight/run.py +194 -0
  272. uav_sim/simulations/vehicles/multirotor_mixer/README.md +69 -0
  273. uav_sim/simulations/vehicles/multirotor_mixer/__init__.py +0 -0
  274. uav_sim/simulations/vehicles/multirotor_mixer/__main__.py +3 -0
  275. uav_sim/simulations/vehicles/multirotor_mixer/run.py +302 -0
  276. uav_sim/simulations/vehicles/vtol_transition/README.md +21 -0
  277. uav_sim/simulations/vehicles/vtol_transition/__init__.py +0 -0
  278. uav_sim/simulations/vehicles/vtol_transition/__main__.py +3 -0
  279. uav_sim/simulations/vehicles/vtol_transition/run.py +217 -0
  280. uav_sim/swarm/__init__.py +18 -0
  281. uav_sim/swarm/consensus_formation.py +54 -0
  282. uav_sim/swarm/coverage.py +111 -0
  283. uav_sim/swarm/leader_follower.py +60 -0
  284. uav_sim/swarm/potential_swarm.py +129 -0
  285. uav_sim/swarm/reynolds_flocking.py +138 -0
  286. uav_sim/swarm/virtual_structure.py +104 -0
  287. uav_sim/trajectory_planning/__init__.py +14 -0
  288. uav_sim/trajectory_planning/frenet_optimal.py +228 -0
  289. uav_sim/trajectory_planning/min_snap.py +190 -0
  290. uav_sim/trajectory_planning/polynomial_trajectory.py +122 -0
  291. uav_sim/trajectory_planning/quintic_polynomial.py +134 -0
  292. uav_sim/trajectory_tracking/__init__.py +10 -0
  293. uav_sim/trajectory_tracking/feedback_linearisation.py +119 -0
  294. uav_sim/trajectory_tracking/mppi.py +176 -0
  295. uav_sim/trajectory_tracking/nmpc.py +304 -0
  296. uav_sim/vehicles/__init__.py +55 -0
  297. uav_sim/vehicles/base.py +96 -0
  298. uav_sim/vehicles/components/__init__.py +2 -0
  299. uav_sim/vehicles/components/allocation.py +594 -0
  300. uav_sim/vehicles/components/mixer.py +78 -0
  301. uav_sim/vehicles/components/motor.py +85 -0
  302. uav_sim/vehicles/fixed_wing/__init__.py +31 -0
  303. uav_sim/vehicles/fixed_wing/aerodynamics.py +403 -0
  304. uav_sim/vehicles/fixed_wing/fixed_wing.py +356 -0
  305. uav_sim/vehicles/fixed_wing/presets.py +181 -0
  306. uav_sim/vehicles/fixed_wing/trim.py +192 -0
  307. uav_sim/vehicles/footprint.py +124 -0
  308. uav_sim/vehicles/multirotor/__init__.py +28 -0
  309. uav_sim/vehicles/multirotor/multirotor.py +393 -0
  310. uav_sim/vehicles/multirotor/quadrotor.py +125 -0
  311. uav_sim/vehicles/payloads/__init__.py +2 -0
  312. uav_sim/vehicles/payloads/gimbal.py +58 -0
  313. uav_sim/vehicles/presets.py +235 -0
  314. uav_sim/vehicles/vtol/__init__.py +6 -0
  315. uav_sim/vehicles/vtol/tiltrotor.py +346 -0
  316. uav_sim/visualization/__init__.py +84 -0
  317. uav_sim/visualization/animator.py +210 -0
  318. uav_sim/visualization/costmap_viz.py +171 -0
  319. uav_sim/visualization/data_panel.py +220 -0
  320. uav_sim/visualization/plotting.py +156 -0
  321. uav_sim/visualization/sensor_viz.py +438 -0
  322. uav_sim/visualization/three_panel.py +255 -0
  323. uav_sim/visualization/vehicle_artists.py +421 -0
@@ -0,0 +1,222 @@
1
+ Metadata-Version: 2.5
2
+ Name: flybots
3
+ Version: 1.0.0
4
+ Summary: From-scratch autonomous UAV algorithms: multirotor, fixed-wing and VTOL flight models, 42 runnable simulations and reinforcement-learning environments.
5
+ Project-URL: Homepage, https://guilyx.github.io/flybots/
6
+ Project-URL: Documentation, https://guilyx.github.io/flybots/
7
+ Project-URL: Repository, https://github.com/guilyx/flybots
8
+ Project-URL: Changelog, https://github.com/guilyx/flybots/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/guilyx/flybots/issues
10
+ Author-email: Erwin Lejeune <erwin.lejeune15@gmail.com>
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: control,drone,fixed-wing,path-planning,quadrotor,reinforcement-learning,robotics,simulation,state-estimation,uav,vtol
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Education
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Education
21
+ Classifier: Topic :: Scientific/Engineering
22
+ Classifier: Topic :: Scientific/Engineering :: Physics
23
+ Classifier: Typing :: Typed
24
+ Requires-Python: >=3.12
25
+ Requires-Dist: matplotlib>=3.9
26
+ Requires-Dist: numpy>=2.0
27
+ Requires-Dist: scipy>=1.14
28
+ Provides-Extra: gym
29
+ Requires-Dist: gymnasium>=1.0; extra == 'gym'
30
+ Provides-Extra: video
31
+ Requires-Dist: imageio-ffmpeg>=0.5; extra == 'video'
32
+ Description-Content-Type: text/markdown
33
+
34
+ <div align="center">
35
+
36
+ # flybots
37
+
38
+ **Flight algorithms, from scratch.**
39
+
40
+ Multirotor, fixed-wing and VTOL flight models with the physics written out
41
+ in full — plus 42 runnable simulations and a gym for teaching a drone to
42
+ fly itself.
43
+
44
+ [**Documentation**](https://guilyx.github.io/flybots/) ·
45
+ [Getting started](https://guilyx.github.io/flybots/guide/getting-started) ·
46
+ [Flight models](https://guilyx.github.io/flybots/vehicles/) ·
47
+ [Reinforcement learning](https://guilyx.github.io/flybots/learning/) ·
48
+ [Algorithm atlas](https://guilyx.github.io/flybots/simulations/)
49
+
50
+ [![CI](https://github.com/guilyx/flybots/actions/workflows/ci.yml/badge.svg)](https://github.com/guilyx/flybots/actions/workflows/ci.yml)
51
+ [![Docs](https://github.com/guilyx/flybots/actions/workflows/pages.yml/badge.svg)](https://guilyx.github.io/flybots/)
52
+ [![PyPI](https://img.shields.io/pypi/v/flybots.svg?logo=pypi&logoColor=white)](https://pypi.org/project/flybots/)
53
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
54
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://github.com/guilyx/flybots/blob/main/LICENSE)
55
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
56
+ [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://pre-commit.com/)
57
+ [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
58
+
59
+ </div>
60
+
61
+ <a href="https://guilyx.github.io/flybots/#see-it-fly">
62
+ <img src="https://raw.githubusercontent.com/guilyx/flybots/main/docs/public/media/promo.gif" alt="flybots — quadrotor, fixed-wing, VTOL, planning, trajectory generation, estimation, mapping, swarms and reinforcement learning" width="820"/>
63
+ </a>
64
+
65
+ <sub>Quadrotor, fixed-wing, VTOL, planning, trajectory generation, estimation, mapping, swarms and reinforcement learning, closing on all 42 simulations. Every frame is simulated at render time by <a href="https://github.com/guilyx/flybots/blob/main/scripts/make_promo.py"><code>scripts/make_promo.py</code></a> — no stock footage, and nothing that can drift out of sync with the code. Above is a sample of each scene; the full seventy-eight seconds, at full resolution, is <a href="https://guilyx.github.io/flybots/#see-it-fly">on the docs site</a>.</sub>
66
+
67
+ ---
68
+
69
+ ## Install
70
+
71
+ ```bash
72
+ pip install flybots
73
+ ```
74
+
75
+ ```bash
76
+ flybots doctor # verify the install, run the physics self-checks
77
+ flybots list # browse 42 simulations
78
+ flybots run pid_hover # render one to a GIF
79
+ flybots train hover # teach a quadrotor to hold position
80
+ ```
81
+
82
+ ## Sixty seconds in
83
+
84
+ A fixed wing, trimmed and flown to a new altitude and heading:
85
+
86
+ ```python
87
+ from uav_sim.vehicles.fixed_wing import create_fixed_wing, FixedWingPreset
88
+ from uav_sim.control.fixed_wing_autopilot import FixedWingAutopilot, AutopilotCommand
89
+
90
+ aircraft = create_fixed_wing(FixedWingPreset.SKYWALKER_X8)
91
+ aircraft.reset_trimmed(altitude=120.0) # solve for equilibrium flight
92
+
93
+ pilot = FixedWingAutopilot(aircraft.fw_params) # gains derived from the airframe
94
+ command = AutopilotCommand(altitude=160.0, airspeed=20.0, course=1.0)
95
+
96
+ for _ in range(12_000):
97
+ aircraft.step(pilot.compute(aircraft.state, command, 0.01), 0.01)
98
+
99
+ print(aircraft.state[2]) # 160.0
100
+ ```
101
+
102
+ ## What is here
103
+
104
+ | | |
105
+ |---|---|
106
+ | **Vehicles** | 6DOF quadrotor with motor dynamics · full Beard & McLain fixed-wing · tilt-rotor VTOL that transitions |
107
+ | **Control** | Cascaded PID · LQR · MPC · pure pursuit · geometric SO(3) · fixed-wing autopilot · VTOL mode scheduler |
108
+ | **Planning** | A* · RRT* · PRM · potential field · coverage · min-snap · Frenet · quintic |
109
+ | **Estimation** | EKF · UKF · particle filter · complementary filter · EKF-SLAM |
110
+ | **Perception** | Occupancy mapping · obstacle detection · visual servoing · gimbal tracking |
111
+ | **Swarm** | Reynolds flocking · consensus · virtual structure · leader-follower · Voronoi coverage |
112
+ | **Learning** | 6 RL environments · pure-NumPy trainer (ARS, CEM) · optional Gymnasium integration |
113
+
114
+ Nothing here wraps a solver. The Newton-Euler equations, the aerodynamic
115
+ coefficient build-up, the Kalman recursions and the sampling-based planners
116
+ are written out in NumPy next to the citation they came from.
117
+
118
+ ## Flight models
119
+
120
+ Three airframes, one frame convention, so they compose.
121
+
122
+ ```python
123
+ from uav_sim.vehicles.fixed_wing import create_fixed_wing, FixedWingPreset
124
+
125
+ aircraft = create_fixed_wing(FixedWingPreset.AEROSONDE)
126
+ controls = aircraft.reset_trimmed(airspeed=35.0, altitude=200.0)
127
+
128
+ for _ in range(6000):
129
+ aircraft.step(controls, 0.005)
130
+
131
+ aircraft.state[2] # 200.0 — thirty seconds, open loop, no drift
132
+ ```
133
+
134
+ That is the acceptance test for the whole aerodynamic model: if any force
135
+ or moment is inconsistent, trim is not an equilibrium and the aircraft
136
+ wanders. Every stability derivative is live, and there is a test that fails
137
+ if you zero any of them.
138
+
139
+ - [Fixed-wing](https://guilyx.github.io/flybots/vehicles/fixed-wing) — coefficient build-up, stall, trim solver
140
+ - [VTOL tilt-rotor](https://guilyx.github.io/flybots/vehicles/vtol) — hover → cruise → hover with altitude held
141
+ - [Quadrotor](https://guilyx.github.io/flybots/vehicles/quadrotor) — mixer and per-motor dynamics
142
+
143
+ ## Teach one to fly
144
+
145
+ ```bash
146
+ flybots envs # 6 tasks: hover, waypoint, trajectory, landing, 2 fixed-wing
147
+ flybots train hover # pure NumPy — no deep-learning stack
148
+ flybots play hover --policy policies/hover.npz --gif hover.gif
149
+ ```
150
+
151
+ ```python
152
+ from uav_sim.gym import make, train, evaluate
153
+
154
+ result = train("hover", iterations=120, seed=0)
155
+ print(evaluate("hover", result.policy, episodes=25))
156
+ ```
157
+
158
+ Gymnasium's API without the Gymnasium dependency. Install
159
+ `flybots[gym]` and the environments register as `uav_sim/Hover-v0` for use
160
+ with any standard RL library.
161
+
162
+ The interesting part is not the algorithm — it is that
163
+ [four setup choices](https://guilyx.github.io/flybots/learning/design-notes)
164
+ decide whether these tasks are learnable at all. Each is documented with
165
+ the measurement that motivated it.
166
+
167
+ ## Simulations
168
+
169
+ Forty-odd runnable demos, each with a three-panel animation, an academic
170
+ reference and a JSON log:
171
+
172
+ ```bash
173
+ flybots list
174
+ flybots info astar_3d
175
+ flybots run astar_3d
176
+ ```
177
+
178
+ Browse them all in the
179
+ [algorithm atlas](https://guilyx.github.io/flybots/simulations/).
180
+
181
+ ## Conventions
182
+
183
+ Worth ten minutes before you write a controller:
184
+
185
+ | | Frame | Axes |
186
+ |---|---|---|
187
+ | World | **ENU** | `x` east, `y` north, `z` up |
188
+ | Body | **FLU** | `x` forward, `y` left, `z` up |
189
+
190
+ A consequence of Forward-Left-Up is that **positive pitch is nose-down**,
191
+ and because the world is ENU, **banking right decreases the heading**.
192
+ Aerodynamics texts use Forward-Right-Down; the library converts at the
193
+ boundary rather than rewriting the equations. Full details in
194
+ [Frames and conventions](https://guilyx.github.io/flybots/guide/conventions).
195
+
196
+ ## Development
197
+
198
+ ```bash
199
+ git clone https://github.com/guilyx/flybots.git
200
+ cd flybots
201
+ uv sync --all-groups
202
+
203
+ uv run flybots doctor
204
+ uv run pytest
205
+
206
+ pre-commit install && pre-commit install --hook-type commit-msg
207
+ ```
208
+
209
+ Contributions welcome — see [CONTRIBUTING.md](https://github.com/guilyx/flybots/blob/main/CONTRIBUTING.md) for the bar
210
+ a new algorithm has to clear, and
211
+ [CHANGELOG.md](https://github.com/guilyx/flybots/blob/main/CHANGELOG.md) for what has changed.
212
+
213
+ ## Safety
214
+
215
+ These models are simplified, the controllers are not certified, and nothing
216
+ here has been validated against a real airframe. Do not fly hardware on
217
+ control code taken from this repository without independent verification.
218
+ See [SECURITY.md](https://github.com/guilyx/flybots/blob/main/SECURITY.md).
219
+
220
+ ## License
221
+
222
+ MIT — see [LICENSE](https://github.com/guilyx/flybots/blob/main/LICENSE).
@@ -0,0 +1,323 @@
1
+ uav_sim/__init__.py,sha256=o7zp3TJKbVXeUeaSV_HTZ3T2w7WT4iYvrGI7l2PugOs,653
2
+ uav_sim/cli/__init__.py,sha256=luwFWLxaJ9oesrw27VG6FEpRvo7gn1wR2xVoFwpwUlQ,160
3
+ uav_sim/cli/catalogue.py,sha256=IFgSGcOpxRDQbhZlGBzsqcXffVvAf3v0BmQOdo8s8o0,5165
4
+ uav_sim/cli/console.py,sha256=G3bxmww1MfKBiGB8X9T4nOK4HdgOR_P5J3WSzh1aG74,2458
5
+ uav_sim/cli/main.py,sha256=AGuiK_-dgYwUIptSBzG5lS_Lcuq9KBb3p-09YaKIw5U,21242
6
+ uav_sim/control/__init__.py,sha256=paT00e_lMem424V6ISXMXsmy82cq1JHs0R6RNuu1UW0,916
7
+ uav_sim/control/attitude_controller.py,sha256=e-oVzUrkCxrKxQDa7o6MR4SN4LP74jL0nXaSUmRHtYs,2139
8
+ uav_sim/control/fixed_wing_autopilot.py,sha256=FX4a_zuAs3C-TPXDlL0hPDYOa_d9l9k8gkULSSgYEfI,21284
9
+ uav_sim/control/flight_controller.py,sha256=dNEPhXy46S7FG__1HKKV2GAk3OYprflHKlq6zNcMYl4,3689
10
+ uav_sim/control/position_controller.py,sha256=K1epnAlSI28sUOmmpqMVfTEHFFm77Zefn7pFlpdMpis,1723
11
+ uav_sim/control/rate_controller.py,sha256=aZ7PnyD9lA_m0RRf8g44ta6H6s1DQWGb6c_AonjObbk,1486
12
+ uav_sim/control/state_machine.py,sha256=1xPOVJ5XEXS98MKerEQee1GLp7fzrjxjDUsoSTUV9_0,10920
13
+ uav_sim/control/velocity_controller.py,sha256=gYSG93xUKKC5W53GuTDlJjPU3oud8jHqBa4xmPwwEVo,2587
14
+ uav_sim/control/vtol_controller.py,sha256=fSG2yCh2l4_TBzlWyMLV_4Dm_IPOzr4tXbQtwGsWgkg,16049
15
+ uav_sim/costmap/__init__.py,sha256=5QlH94uF2KCzXzTAJquygM0n0iMIwwhdedus5F57hug,598
16
+ uav_sim/costmap/costmap.py,sha256=BcxE3FIY82T-1WgD_xTkaLQ1ca2RksdtiDYEyEIFQt4,3107
17
+ uav_sim/costmap/footprint_layer.py,sha256=_x3KQ2GJj2FLeYlqXVnFI09Sfb1bfflEkdsdER9S820,1845
18
+ uav_sim/costmap/inflation_layer.py,sha256=vfdYDIpYZo56oVOUoSy8NfenGZ30TiwsDFSKCMUxQuo,1866
19
+ uav_sim/costmap/occupancy_grid.py,sha256=ym_M1U7-QnkQwgUnugLRj6j4FMoTftxVc4jSoTeiM-8,9882
20
+ uav_sim/costmap/social_layer.py,sha256=R0XpRIPwpUyWLoFJ1M6lTyCSjOM1PBqzbF_RfWnXjVs,2487
21
+ uav_sim/costmap/velocity_layer.py,sha256=z_rI3-3nUua_Cbebp-PjZxD8AiLjGkqVVx-lRoPXP1E,960
22
+ uav_sim/environment/__init__.py,sha256=5hdALj5MecquFjtKVyyw46MlwEI7ZYzwPI9lhQ2erw4,812
23
+ uav_sim/environment/buildings.py,sha256=l9mj-aCz7aRmxUvVJ8QqlMQWKZhBqy1ftykz2uPBaOQ,3137
24
+ uav_sim/environment/default_world.py,sha256=ueyHm45iPAerBxZhb3s0ypa0RHyklMdoUcJnVWGiYGw,3606
25
+ uav_sim/environment/obstacles.py,sha256=EfIeP8FtFrdSNnIHkyv45-RpaY_Asg0GL2il0fCfFZ4,3267
26
+ uav_sim/environment/world.py,sha256=uvkcd2c6vlJLqxmxENocBX9fFeLIv0NUOyr1JGGFMdw,3011
27
+ uav_sim/estimation/__init__.py,sha256=W0CT9JjF_aKAmteOF8V6pdNLSD9cIYPVD--QmPz6V6s,541
28
+ uav_sim/estimation/complementary_filter.py,sha256=8W9DgB2MWmIXxqfl2h6JaRx3LQkkIkbpiuWxyj7yZyw,2273
29
+ uav_sim/estimation/ekf.py,sha256=pwQyVzXFuxhBE0bsFTiP0ywqUBRKClAIhSkY7yzFUhE,2960
30
+ uav_sim/estimation/particle_filter.py,sha256=f9IkBGcOl674mPTbz-nGIHQsotKulmKTkgCgwhhVano,4796
31
+ uav_sim/estimation/process_noise.py,sha256=e9IgB79G5ajuPwM7kmV3-g8SZIIxxZpFk7feLFuQOPk,4182
32
+ uav_sim/estimation/ukf.py,sha256=RM_3qv4rdBiAqDDhRC5QHQHoPKaNCtYT20MjmUJcB98,4454
33
+ uav_sim/frames/__init__.py,sha256=WouyVZsoUOTFpqiDkKn9AdTqtfeR7g7GbjPoJFc0vGQ,846
34
+ uav_sim/frames/transforms.py,sha256=BXRk4LOag-zATjdxYxgCd9f8eyRBQa4KgjtvBoZEYVA,9423
35
+ uav_sim/guidance/__init__.py,sha256=_s6uELVDnTz_hnFsMmZoBHAdOhlJoNxiALF8GNZj1OQ,1607
36
+ uav_sim/guidance/fixed_wing_mission.py,sha256=-2kbUANbjEIwiwOMQ19JYhDMeb1aP_di43KNtdxqwiA,30309
37
+ uav_sim/guidance/fixed_wing_paths.py,sha256=FLeKQ4wE0uDBe8_BIoMd8L8DU4lNIPDsAoLF3G84JUY,25398
38
+ uav_sim/gym/__init__.py,sha256=oxnM6v6m-MeCYxHb1fhL8ZFZeMmXVv6_MB7zYon2pZ8,2120
39
+ uav_sim/gym/base.py,sha256=CsgDwhbesQqtJkSHMmLkBIQSJy9JHx1elvaa9QcgzCo,7760
40
+ uav_sim/gym/fixed_wing_envs.py,sha256=X8C1AUpa1m0xsj4u7B4Kmkcm10G2PbGpqiqafyV8reg,13094
41
+ uav_sim/gym/optimizers.py,sha256=niG2qryckxm5j5zc0dgJqL35MnAQu66q19Lquadp1bg,7712
42
+ uav_sim/gym/policy.py,sha256=O5ezMSxtbxl3rRLTAn4gkH5t3udV0vjFMmKZBSaRdN4,7831
43
+ uav_sim/gym/quadrotor_envs.py,sha256=Zq4FAfd2N1hm79I57lcykCbBYCmFHpPH-z7OOd7nVP8,16369
44
+ uav_sim/gym/registry.py,sha256=JEEyJq8GcRnAs--KdW_HNg8_hOFtpvNzWNH7raxusYs,5591
45
+ uav_sim/gym/render.py,sha256=sxoNcY14cvmkI5V1iJDGe6NCNLIDkQPRydn9zp3EBik,5399
46
+ uav_sim/gym/spaces.py,sha256=AW32n2WpNoK46Oky_XLoJEPrhahtK4vYb9Osa8SFufM,2900
47
+ uav_sim/gym/train.py,sha256=859bpSroAx1WFcyGs9b_C_Lqhj3SCB82tQCkRSDVM5U,11599
48
+ uav_sim/logging/__init__.py,sha256=0eT_ryHA08n5fGeW42wETlg6urCRMgVpwdzk3qeyFWc,111
49
+ uav_sim/logging/sim_logger.py,sha256=iiwqRKE6paVijrJtXAIUyeaaOJQZJE2DgSXenM-SjH8,4357
50
+ uav_sim/path_planning/__init__.py,sha256=30iC-CGkaS13Go1i95YL2PZPrZRzpSw4s-48E_Qshkg,635
51
+ uav_sim/path_planning/astar_3d.py,sha256=Beg_LXR9d8pcdLDWO9v1ZMjOyTg5OMdDcLVtswaT-pI,3222
52
+ uav_sim/path_planning/coverage_planner.py,sha256=Cgo-DQqZixczLPlB3jlay1ey2z7b67dA90b7CAtgsCc,3954
53
+ uav_sim/path_planning/plan_through_obstacles.py,sha256=Brb5o12Uygf_gGM0LE_n9N3fTiLMhyjc1uWFAmIwBjA,2448
54
+ uav_sim/path_planning/potential_field_3d.py,sha256=DiJPu_Nq4KjEAHu4PgGwEw40SV2TUOgunzx0FyZOVoc,3608
55
+ uav_sim/path_planning/prm_3d.py,sha256=91SbEWXDOBVR-9j87Ur9OTt-1_kxsUuYN74O_vyk1EA,6167
56
+ uav_sim/path_planning/rrt_3d.py,sha256=Yy6pO2KGUZJIwkdKlnWW3EnhdtDjuEb4W516kH2VAhs,8232
57
+ uav_sim/path_tracking/__init__.py,sha256=nqLpmwJywxsuWzl9cYRQPRagWBO-UgHv_ehGFD_I-gY,801
58
+ uav_sim/path_tracking/flight_ops.py,sha256=V4wLD0AXeD7eAqQOckHHZ20YWH1k-lnykvq4f2Ras8Q,8846
59
+ uav_sim/path_tracking/geometric_controller.py,sha256=_GhGqEjA_xqwiVDro9quu6DG54l89ONzPvKnyqQ2GnI,6906
60
+ uav_sim/path_tracking/lqr_controller.py,sha256=f6mhIfbexHSPGUwoPySVM27BVqfCDESYOQMQtnNT2mQ,4702
61
+ uav_sim/path_tracking/lqr_path_tracker.py,sha256=P1TvbCH7gTitUF2xVdIQ4MgzMMa3Ai8qh4C9KmdIRI0,3441
62
+ uav_sim/path_tracking/mpc_controller.py,sha256=dk7sEfxuhLkNgLUskj6v24Kv_MDL2lCyIOgDHV3CPoo,8523
63
+ uav_sim/path_tracking/path_smoothing.py,sha256=NvhHpn4gCWt1aBB0afXIYxj708nZoHC3M2Twh-GLKRk,4164
64
+ uav_sim/path_tracking/pid_controller.py,sha256=4U42KZaotNF-qsCdADOaPbK4d0mIZDwYoRY8Q9TMulE,7026
65
+ uav_sim/path_tracking/pure_pursuit_3d.py,sha256=b-Ut8p_qV4DnTJD777jIPPC_ipSlDv6x2ZjlALEWlzM,7114
66
+ uav_sim/perception/__init__.py,sha256=vLu6w254tDdnwK81zfkGbORUQF-90UVwBz8hWqGZtrU,737
67
+ uav_sim/perception/bbox_tracker.py,sha256=7aDSVJLpg9nzYo9HsttjGs8X94-XFaaTfZy4tz6WjsQ,6436
68
+ uav_sim/perception/obstacle_detection.py,sha256=vurH7iZUwzN02GaiaWY7il3HmOZZoF06ZtWMGxhYk0s,1491
69
+ uav_sim/perception/occupancy_mapping.py,sha256=FfJoTC92ThfWupgt8IAudqeo7xzWVd4W7ZGyfKkxtC0,3276
70
+ uav_sim/perception/point_cloud.py,sha256=0v0tpcS5FxtSO5fCKeZfsTd7j4JtVLV-iau_mSzoj6g,1338
71
+ uav_sim/sensors/__init__.py,sha256=dLAop7ajacUkwPgRWpG07vPjqM9zvEycbievr68WtyM,865
72
+ uav_sim/sensors/base.py,sha256=M406DbHM4fjau4yub5TwK90KzRVX7LsaaYBWLlvPtJw,2172
73
+ uav_sim/sensors/camera.py,sha256=2hWxW5K_RqJps2C2wMteB-wt26lf-wQLaL832oR1idA,3596
74
+ uav_sim/sensors/gimbal.py,sha256=E-H8J0py3FdPrDl35HxfZSJXIaCIjS2yHSLYhqoaTWQ,4727
75
+ uav_sim/sensors/gimbal_controller.py,sha256=5mbFy7IQaSSwkUPp9suL0-VqcHnZBoyRWM4Hokug5_s,6226
76
+ uav_sim/sensors/gps.py,sha256=9LPzbnnc2fOVTeEljlCm_N8LV6GY9JfJd9yZZYCSt-4,1033
77
+ uav_sim/sensors/imu.py,sha256=KJ0fJvmy41dson9mwyA2qbIJfoGAafeoWLaJfPZ1mJU,4486
78
+ uav_sim/sensors/lidar.py,sha256=rijAlqSBwE6Q2New-rvAp7NpUC4yh9heFSUqRwPIwnA,6987
79
+ uav_sim/sensors/range_finder.py,sha256=_5J7UW54HMAyZQGKT058sPYwYGJGP7ZJu8JyhW_dS2s,999
80
+ uav_sim/simulations/__init__.py,sha256=Dkcx5NDwKBXALSGt9-HXegjmfBMRbShhWOt0I8nUMPk,913
81
+ uav_sim/simulations/api.py,sha256=oBDPh1qdlorRhilDxE_qCSFXIdfUMYB5-WqNbbChHkA,2805
82
+ uav_sim/simulations/common.py,sha256=9rX3dKl5zW1lMANYpYCC9cz6W9kJvdozdLPGX5lIpME,4370
83
+ uav_sim/simulations/contracts.py,sha256=Tei5BGRYmAapmMN34CGYdUDGrUKZCwXKOv2ABPtYm9E,2073
84
+ uav_sim/simulations/mission_runner.py,sha256=h7vl1BTp1gRYKKWcgmUg-sXIX8zXLQSn7LPzEWdFcWU,8459
85
+ uav_sim/simulations/plugins.py,sha256=JZnF86vkB_XxlSDbmPisJ-ARns23RFyYTXjCTWOvw20,1550
86
+ uav_sim/simulations/setup_helpers.py,sha256=rywcctyCQYQrm0AFBHDaAKrw9mkQOLnzB_tGfgFvSPM,2582
87
+ uav_sim/simulations/standards.py,sha256=UPOx37v0q96Xds4_fKFIynjNOrEF0QaSbcuDtO7cQbQ,8391
88
+ uav_sim/simulations/environment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ uav_sim/simulations/environment/costmap_navigation/README.md,sha256=y4UiZtlf1vJdf3pwGAcd8eIqWYYIFhnwbWy5d-bBHqQ,852
90
+ uav_sim/simulations/environment/costmap_navigation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
+ uav_sim/simulations/environment/costmap_navigation/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
92
+ uav_sim/simulations/environment/costmap_navigation/run.py,sha256=rMNj9hHsVlSa2G7iK17jsrqLyMHqLtMFl7kCsqx1BHY,8560
93
+ uav_sim/simulations/estimation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
+ uav_sim/simulations/estimation/complementary_filter/README.md,sha256=_ADLR1PKPIdUzrmLvttAySPauT6zHxySz45-mf7JqUI,719
95
+ uav_sim/simulations/estimation/complementary_filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
+ uav_sim/simulations/estimation/complementary_filter/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
97
+ uav_sim/simulations/estimation/complementary_filter/run.py,sha256=Nw6M9x107SFTGGxkX9VAhKVa5IqWdWssJDYAKzld-XE,6745
98
+ uav_sim/simulations/estimation/ekf/README.md,sha256=AgUgbIHaSjS71UlPdclACsVpLP7lPdYaIhemTeKRoNc,684
99
+ uav_sim/simulations/estimation/ekf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
+ uav_sim/simulations/estimation/ekf/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
101
+ uav_sim/simulations/estimation/ekf/run.py,sha256=G-4D2MI-qsy2XAgPnStaaiFJmVLsC9H8UiQZBk-D960,8471
102
+ uav_sim/simulations/estimation/gps_imu_fusion/README.md,sha256=rNrySbe62gTEswLCAGKo-f91t1kSmkpcsE0GbCod3K0,606
103
+ uav_sim/simulations/estimation/gps_imu_fusion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
+ uav_sim/simulations/estimation/gps_imu_fusion/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
105
+ uav_sim/simulations/estimation/gps_imu_fusion/run.py,sha256=GBQSHkVKA_mjAf4tsX5s3RNBT1Rc8sQ3cYwoNmwKLfw,8998
106
+ uav_sim/simulations/estimation/particle_filter/README.md,sha256=4xnBnpfaEItfGt9VXXf_q0hoVshlT91fg6zGM_AlWOM,662
107
+ uav_sim/simulations/estimation/particle_filter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
+ uav_sim/simulations/estimation/particle_filter/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
109
+ uav_sim/simulations/estimation/particle_filter/run.py,sha256=Ullq-4-jSBzI0Nav6c-F1NJkMWxhjuYwArrx0zFH0G0,8722
110
+ uav_sim/simulations/estimation/ukf/README.md,sha256=O483eP14ECWUDh3kSm632vTCNmFlv9yRUxP8Fe7r6ew,1370
111
+ uav_sim/simulations/estimation/ukf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
+ uav_sim/simulations/estimation/ukf/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
113
+ uav_sim/simulations/estimation/ukf/run.py,sha256=CIKAcQSjBpopaFDFVj9i9jF2jpwgkVV8in5DZrT7mII,8880
114
+ uav_sim/simulations/path_planning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
+ uav_sim/simulations/path_planning/astar_3d/README.md,sha256=F4nZcec3msglMOzIXKQD-pmGtTs6v9OoP515Wzgx6_M,643
116
+ uav_sim/simulations/path_planning/astar_3d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
+ uav_sim/simulations/path_planning/astar_3d/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
118
+ uav_sim/simulations/path_planning/astar_3d/run.py,sha256=6qxQAnzEB2VD2h5TkCfM6diuV8mha6Gguof5rJm5_h8,9124
119
+ uav_sim/simulations/path_planning/coverage_planning/README.md,sha256=FQrKrW5e2XvGELMWVaqO_q4gZRfwyTlkYCaD6dvYDGg,688
120
+ uav_sim/simulations/path_planning/coverage_planning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
+ uav_sim/simulations/path_planning/coverage_planning/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
122
+ uav_sim/simulations/path_planning/coverage_planning/run.py,sha256=OrQePpJC9t9yBenxcVpBOYDgdVqOAxB8DcPgpyJ6usc,6688
123
+ uav_sim/simulations/path_planning/potential_field_3d/README.md,sha256=9v3o4mnCzC46IEZLMVRzBHS0jt-feUS8Wa72gAGf_ec,728
124
+ uav_sim/simulations/path_planning/potential_field_3d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
+ uav_sim/simulations/path_planning/potential_field_3d/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
126
+ uav_sim/simulations/path_planning/potential_field_3d/run.py,sha256=mGgJ8_RXEKXTfMe9iQnXeQA0Hyy3yofNcIesTuH6qPo,7494
127
+ uav_sim/simulations/path_planning/prm_3d/README.md,sha256=n-pS0ifZQy6CQ5jKq5yxAWW5FEgC7Tl_D1imEEzi33k,676
128
+ uav_sim/simulations/path_planning/prm_3d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
+ uav_sim/simulations/path_planning/prm_3d/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
130
+ uav_sim/simulations/path_planning/prm_3d/run.py,sha256=k1c7yJbk9qVeKy_Up-agjYZobn1rN8KDsPBPMmR-TJk,9087
131
+ uav_sim/simulations/path_planning/rrt_star_3d/README.md,sha256=km_jNKhVvguO8vnUerurB_r7N6-ZZb3Mp_rq_BbtEVM,625
132
+ uav_sim/simulations/path_planning/rrt_star_3d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
+ uav_sim/simulations/path_planning/rrt_star_3d/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
134
+ uav_sim/simulations/path_planning/rrt_star_3d/run.py,sha256=hLjf2kGS9LgiSUK0iJ63k8Jer1KmzbbOxmRNJwM1saI,7792
135
+ uav_sim/simulations/path_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
+ uav_sim/simulations/path_tracking/fixed_wing_mission/README.md,sha256=FRuKVzJiZLA753oubSyx3cJUqhMqCQCJuuzsxTyGJEo,2218
137
+ uav_sim/simulations/path_tracking/fixed_wing_mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
+ uav_sim/simulations/path_tracking/fixed_wing_mission/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
139
+ uav_sim/simulations/path_tracking/fixed_wing_mission/run.py,sha256=55AttZGlZWI2a6V11HVa5dUPbiudVcCW2GFHl5ZrZ1M,13786
140
+ uav_sim/simulations/path_tracking/flight_ops_demo/README.md,sha256=YUonU9nHpFAZX29ejgXHELpYOlEq2qKOWDKj7lPJLdI,595
141
+ uav_sim/simulations/path_tracking/flight_ops_demo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
+ uav_sim/simulations/path_tracking/flight_ops_demo/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
143
+ uav_sim/simulations/path_tracking/flight_ops_demo/run.py,sha256=i9z2hT0edB1ffZUIDbNelzVuqEvVB8KLCzPxrQ6Nd2c,4627
144
+ uav_sim/simulations/path_tracking/geometric_control/README.md,sha256=sZxaFEVuYhnxzgLeoirj25km4yzbeyqWrrSPfNrvpYQ,724
145
+ uav_sim/simulations/path_tracking/geometric_control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
+ uav_sim/simulations/path_tracking/geometric_control/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
147
+ uav_sim/simulations/path_tracking/geometric_control/run.py,sha256=uoGMCBUISvCGbzx3zqQ9Rc88jio0zBmprhj8b5EdlQ0,4874
148
+ uav_sim/simulations/path_tracking/lqr_hover/README.md,sha256=T7W1MpDotr1nZIJhxa85FgdUfAU2xwKq0LXK_urH5wQ,628
149
+ uav_sim/simulations/path_tracking/lqr_hover/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
+ uav_sim/simulations/path_tracking/lqr_hover/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
151
+ uav_sim/simulations/path_tracking/lqr_hover/run.py,sha256=pT36QfuHsuF_EefQ1T_fvOGl-nAEL0e6LSo8KlcMCmY,4066
152
+ uav_sim/simulations/path_tracking/lqr_tracking/README.md,sha256=VGVqIPXRjOIvD1-RUXLkGf8ci_lSFPK7GfXWXblAMzg,524
153
+ uav_sim/simulations/path_tracking/lqr_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
+ uav_sim/simulations/path_tracking/lqr_tracking/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
155
+ uav_sim/simulations/path_tracking/lqr_tracking/run.py,sha256=upB6MmnIqNrNOvlJ7q580XT6MFQr_ko5JzSdKgzb944,4729
156
+ uav_sim/simulations/path_tracking/mpc_tracking/README.md,sha256=a5D0a3EK4xXwoYPSIMsVc5Av_LBxNQLA3ubmtvz3-2k,730
157
+ uav_sim/simulations/path_tracking/mpc_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
+ uav_sim/simulations/path_tracking/mpc_tracking/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
159
+ uav_sim/simulations/path_tracking/mpc_tracking/run.py,sha256=Z1AL3HX9DyL7PapfQ5MAhwm4q1FiUi9g_kcgy5gD6wE,5046
160
+ uav_sim/simulations/path_tracking/path_smoothing_demo/README.md,sha256=IY-8f9kZg1MrFltwHAOZ_T6313Y3AWjf4tUjvBeCuGo,699
161
+ uav_sim/simulations/path_tracking/path_smoothing_demo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
+ uav_sim/simulations/path_tracking/path_smoothing_demo/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
163
+ uav_sim/simulations/path_tracking/path_smoothing_demo/run.py,sha256=lHWtkUBryb4yhsIxxXRYsHrML2uptyrk04_RKOEJz6s,7708
164
+ uav_sim/simulations/path_tracking/pid_hover/README.md,sha256=ASBOgjfAtjyorjM0KnnUUG4DHH5_mQVPBEd9WLuh6_g,617
165
+ uav_sim/simulations/path_tracking/pid_hover/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
+ uav_sim/simulations/path_tracking/pid_hover/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
167
+ uav_sim/simulations/path_tracking/pid_hover/run.py,sha256=rHtDjOy645hISlM5Y2l5cjQVFI9HlHokm5UEqEZclLk,3900
168
+ uav_sim/simulations/path_tracking/pure_pursuit/README.md,sha256=BR_sB3nOsS3ur84gxGRuAtSfJSEd-GZxPncMmg0SIJ8,670
169
+ uav_sim/simulations/path_tracking/pure_pursuit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
+ uav_sim/simulations/path_tracking/pure_pursuit/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
171
+ uav_sim/simulations/path_tracking/pure_pursuit/run.py,sha256=aJxnqUIMrPW1D_Por2dp4WmLbfKtT3POEEszxW3HYmE,5141
172
+ uav_sim/simulations/perception/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
+ uav_sim/simulations/perception/ekf_slam/README.md,sha256=LmkRJqjYFrmRK3ywF5AX_nISXJeJfyVcZKFrZFS6-pE,606
174
+ uav_sim/simulations/perception/ekf_slam/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
+ uav_sim/simulations/perception/ekf_slam/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
176
+ uav_sim/simulations/perception/ekf_slam/run.py,sha256=dXminik6zWSiqtl9lhFNmAD62NbuaZc_5j5PWbIb_Os,12739
177
+ uav_sim/simulations/perception/occupancy_mapping/README.md,sha256=HQmEA4ZUxM1UCVpfM4ord0Qp0qzHQXuVgY6wweA5PBs,713
178
+ uav_sim/simulations/perception/occupancy_mapping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
+ uav_sim/simulations/perception/occupancy_mapping/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
180
+ uav_sim/simulations/perception/occupancy_mapping/run.py,sha256=iI_PK-lBYkhIxs3HKP0TeyNNAD58Qbk7fhz99SBrR1U,10133
181
+ uav_sim/simulations/perception/sensor_suite_demo/README.md,sha256=sne4HwuimbC8Yd3bcGpqHkTdrOMhQN-DwaakEnHlVfo,538
182
+ uav_sim/simulations/perception/sensor_suite_demo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
+ uav_sim/simulations/perception/sensor_suite_demo/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
184
+ uav_sim/simulations/perception/sensor_suite_demo/run.py,sha256=ntjyhltOJCxjtJItAIf-Aaiuq9oWrCtW797wRl-JkEs,8838
185
+ uav_sim/simulations/perception/visual_servoing/README.md,sha256=Mfjc_Z64TcgFh4BrxscawbOFmVzkJLRxHJcpbqroj8U,766
186
+ uav_sim/simulations/perception/visual_servoing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
+ uav_sim/simulations/perception/visual_servoing/__main__.py,sha256=eU1J003vEJse69oNEr9BDR00vaF8vdbP7cDOYkIe5jw,109
188
+ uav_sim/simulations/perception/visual_servoing/_core.py,sha256=dISdZFSav9edK_WXNXAlLRdnzSkkwJ7PAcl8zSCFEEs,11280
189
+ uav_sim/simulations/perception/visual_servoing/run.py,sha256=T86FPiTqsRL1mUDv90v7LyqgGYy63JtXRaEGvWuv5YM,496
190
+ uav_sim/simulations/perception/visual_servoing_fixed/README.md,sha256=aWUUTf7kQcy2FtG1ELHQ_b_g35mPRmHbV-Pybkhg1xI,1390
191
+ uav_sim/simulations/perception/visual_servoing_fixed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
+ uav_sim/simulations/perception/visual_servoing_fixed/__main__.py,sha256=L6VEEpP2VWUsEmeWi5yB63VVXFrF0BeK2uHk3cK2Qac,137
193
+ uav_sim/simulations/perception/visual_servoing_fixed/run.py,sha256=-4aYkOTuaSQfyyf49x3OBObmHQ2tGW9PAtc3HLTM1KM,415
194
+ uav_sim/simulations/perception/visual_servoing_gimbal/README.md,sha256=V6HQVGVuAad5aYZtiNBvktE8oBBhQL3WDowmOEbHjMY,1401
195
+ uav_sim/simulations/perception/visual_servoing_gimbal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
+ uav_sim/simulations/perception/visual_servoing_gimbal/__main__.py,sha256=Zr3-aIsuUvqR7PDBYjWBNj_7xmyyY4ksqbaPuyexSPY,139
197
+ uav_sim/simulations/perception/visual_servoing_gimbal/run.py,sha256=zO5MLTJYI_f-lB8liDTEgxTnwWM8K88mnc6S636rqJI,403
198
+ uav_sim/simulations/sensors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
+ uav_sim/simulations/sensors/gimbal_bbox_tracking/README.md,sha256=gkhycPl3S2xhGOmier_1wbcbhCfs6a2CGfvHUpvFA4Q,809
200
+ uav_sim/simulations/sensors/gimbal_bbox_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
+ uav_sim/simulations/sensors/gimbal_bbox_tracking/__main__.py,sha256=L_X3LKgifb80Lv_mKZercGcRVWYyS4kpPMMXmms5Omg,124
202
+ uav_sim/simulations/sensors/gimbal_bbox_tracking/run.py,sha256=o2BTFljRNFwMnzpsEBBxhQ-WDKDXaKKKNBDyFO3ENgw,10375
203
+ uav_sim/simulations/sensors/gimbal_tracking/README.md,sha256=OMlSff6pofQ9dCWZGMkP-pF3raO56bSzwr41nDTdRng,698
204
+ uav_sim/simulations/sensors/gimbal_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
205
+ uav_sim/simulations/sensors/gimbal_tracking/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
206
+ uav_sim/simulations/sensors/gimbal_tracking/run.py,sha256=_sSoV5Nv__pMHN2oUAwfqNDmNSFlrYTR6MEytHZeLNw,8305
207
+ uav_sim/simulations/swarm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
+ uav_sim/simulations/swarm/consensus_formation/README.md,sha256=VvYNLdyfoU0HIZb9M3_eNprmteOaYVTtdOEJgayE1Wk,646
209
+ uav_sim/simulations/swarm/consensus_formation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
+ uav_sim/simulations/swarm/consensus_formation/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
211
+ uav_sim/simulations/swarm/consensus_formation/run.py,sha256=Hamxebui5jHTSp1XyBXw8cqoDSUNRdBgZVXo8_3lMnc,5935
212
+ uav_sim/simulations/swarm/leader_follower/README.md,sha256=rZromVNttFz0KvhVrMa0Ns0k_-DHbHgnbV23bXufizc,657
213
+ uav_sim/simulations/swarm/leader_follower/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
+ uav_sim/simulations/swarm/leader_follower/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
215
+ uav_sim/simulations/swarm/leader_follower/run.py,sha256=A6_Y-hGEplYYADa8fujTkcOoo6vb_H-xu0HKHYi4sdE,6926
216
+ uav_sim/simulations/swarm/potential_swarm/README.md,sha256=WWhMC10VFaex49JOezP8Kf-EB8az6-CJ5ht2pbTbT-w,604
217
+ uav_sim/simulations/swarm/potential_swarm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
218
+ uav_sim/simulations/swarm/potential_swarm/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
219
+ uav_sim/simulations/swarm/potential_swarm/run.py,sha256=hW5jsgVj-jNTL3JrPjnqlwOUyX8BMFLrz4ewAXVdpYM,7113
220
+ uav_sim/simulations/swarm/reynolds_flocking/README.md,sha256=CG_g5tBEuCeZkSa3iNLca07n52ol37ChnvVd8Z2Z574,637
221
+ uav_sim/simulations/swarm/reynolds_flocking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
+ uav_sim/simulations/swarm/reynolds_flocking/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
223
+ uav_sim/simulations/swarm/reynolds_flocking/run.py,sha256=NvXgSvD4TID-oNBUQRK8Sq7lVcV57q092_3lF1Rma38,6764
224
+ uav_sim/simulations/swarm/virtual_structure/README.md,sha256=nQVRLUV6L2uShCvdkAOPjerFjY64sAACguGKHKsceg8,589
225
+ uav_sim/simulations/swarm/virtual_structure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
+ uav_sim/simulations/swarm/virtual_structure/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
227
+ uav_sim/simulations/swarm/virtual_structure/run.py,sha256=lyOtvQclbO332-RtMNXXgt8YwJB43Hv1APmEYOtnpZY,7509
228
+ uav_sim/simulations/swarm/voronoi_coverage/README.md,sha256=VXEtaacxavJgjAIYs7wTwDd4CIgUzwChz51G6m7VWTA,665
229
+ uav_sim/simulations/swarm/voronoi_coverage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
230
+ uav_sim/simulations/swarm/voronoi_coverage/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
231
+ uav_sim/simulations/swarm/voronoi_coverage/run.py,sha256=ld8zMGRv7AJ0rUj1SIgvLlL7LJGrBzTbrQFIjcwenkk,7479
232
+ uav_sim/simulations/trajectory_planning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
233
+ uav_sim/simulations/trajectory_planning/frenet_optimal/README.md,sha256=2XfYIcZpJncU5YmYvxwf6zm6ip08IaQLrs6gB1al-Ww,669
234
+ uav_sim/simulations/trajectory_planning/frenet_optimal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
+ uav_sim/simulations/trajectory_planning/frenet_optimal/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
236
+ uav_sim/simulations/trajectory_planning/frenet_optimal/run.py,sha256=4T8YJSSYNGlTjCh5JPt0NNGjt9R67QHOKCC8ztNGaPg,11411
237
+ uav_sim/simulations/trajectory_planning/min_snap/README.md,sha256=xLBLmUPE9geByMOPYG-MFUgdaPjRCUbxeWU-47gRTf0,638
238
+ uav_sim/simulations/trajectory_planning/min_snap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
+ uav_sim/simulations/trajectory_planning/min_snap/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
240
+ uav_sim/simulations/trajectory_planning/min_snap/run.py,sha256=kxrHl089v_9I1GXkd90LFc0R18h6ga2Fe0DuHjxwWMM,7660
241
+ uav_sim/simulations/trajectory_planning/polynomial_trajectory/README.md,sha256=juabOhKiWfVDfPlAvM1C2g3yC1h9CVYX4O_LsRXestA,735
242
+ uav_sim/simulations/trajectory_planning/polynomial_trajectory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
243
+ uav_sim/simulations/trajectory_planning/polynomial_trajectory/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
244
+ uav_sim/simulations/trajectory_planning/polynomial_trajectory/run.py,sha256=CLT9xQin4Qr9VagRZbHSQfD8yzKlpnHw7gmWYMOJBgw,5984
245
+ uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/README.md,sha256=uSN4nhaPHr34xDA8Spp3JdOtvwIDfoce1cvFkd5LX9A,677
246
+ uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
247
+ uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
248
+ uav_sim/simulations/trajectory_planning/quintic_polynomial_demo/run.py,sha256=jqgKbGLUaz_oLVy2dy7xlX0NzdGD69Xg-CIL9NGRFLw,6267
249
+ uav_sim/simulations/trajectory_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
+ uav_sim/simulations/trajectory_tracking/feedback_linearisation/README.md,sha256=q9xvC1LQp0tohYF6w1nKdjNu8BTnhFBnuQ9E_Zv9xWY,603
251
+ uav_sim/simulations/trajectory_tracking/feedback_linearisation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
252
+ uav_sim/simulations/trajectory_tracking/feedback_linearisation/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
253
+ uav_sim/simulations/trajectory_tracking/feedback_linearisation/run.py,sha256=s4PMbHkvKTR5mzuA5Bn3tK4PTBctiFuNQqCjj8CgN-k,4780
254
+ uav_sim/simulations/trajectory_tracking/mppi/README.md,sha256=ZCix8b-IwOv7TuGjjoBW-QFH2DeeVKTseGV8L_2qI3o,719
255
+ uav_sim/simulations/trajectory_tracking/mppi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
+ uav_sim/simulations/trajectory_tracking/mppi/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
257
+ uav_sim/simulations/trajectory_tracking/mppi/run.py,sha256=skalbXsLaVKVYj5RX3YNHuGfsO4XsG8_wMjqP23ghv8,9160
258
+ uav_sim/simulations/trajectory_tracking/nmpc/README.md,sha256=zeVqDTZSD-vi7MOXlqwMe0SU_Vcn6etAUfIwxm1IA5Y,720
259
+ uav_sim/simulations/trajectory_tracking/nmpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
260
+ uav_sim/simulations/trajectory_tracking/nmpc/__main__.py,sha256=NXICH5E5iv9JyhxvGXyMNbFDcm27QN1U_B2DIRu5wlk,74
261
+ uav_sim/simulations/trajectory_tracking/nmpc/run.py,sha256=bWFGIwh-qEntUNkjA9opp1UHPUpcy6XRKkhyc_l-5Ic,5862
262
+ uav_sim/simulations/vehicles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
263
+ uav_sim/simulations/vehicles/fixed_wing_flight/README.md,sha256=UTkQ6OaXOXbljbj4xm3LT4LnKAVr2bJYzabogc0JR2I,539
264
+ uav_sim/simulations/vehicles/fixed_wing_flight/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
265
+ uav_sim/simulations/vehicles/fixed_wing_flight/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
266
+ uav_sim/simulations/vehicles/fixed_wing_flight/run.py,sha256=uj80ppocfmx85hlTTIERT7i3_I1FDyDSFeFX1GATqTQ,7434
267
+ uav_sim/simulations/vehicles/multirotor_mixer/README.md,sha256=X9-D3t4l11sU9K7sKbETMRNNo27vby4KHjy0tGT5rso,2407
268
+ uav_sim/simulations/vehicles/multirotor_mixer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
269
+ uav_sim/simulations/vehicles/multirotor_mixer/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
270
+ uav_sim/simulations/vehicles/multirotor_mixer/run.py,sha256=bFUQkGFIgXTKO-lR9XxFv5cpEEpnimX4Bh29c5C5P3g,12448
271
+ uav_sim/simulations/vehicles/vtol_transition/README.md,sha256=7hcyeMiFK2Tl_oojmLeUSuObVlFDNGzZsNIJRgxalmI,643
272
+ uav_sim/simulations/vehicles/vtol_transition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
+ uav_sim/simulations/vehicles/vtol_transition/__main__.py,sha256=5qW4qbD1vDD4Y6D4jbDRrPalasQUFdnf00Z0imOgFb4,30
274
+ uav_sim/simulations/vehicles/vtol_transition/run.py,sha256=PbAZ-EKUlrWsVNNgYG5g6-GAwHBv7hWjsXwj6skd9Oo,7556
275
+ uav_sim/swarm/__init__.py,sha256=yQxFuS4EXDhJ4Go2o3ROtwwuoEX7D6d6i_4X8MnySNs,566
276
+ uav_sim/swarm/consensus_formation.py,sha256=DMKWs09jXgaVdVZwBsaaXZ-_mBkkqy22Awqe6fE-1EM,1704
277
+ uav_sim/swarm/coverage.py,sha256=qaMZUBclQ3BZUzFrYksEKSpUH8WvppwX-UJ-Wy-_Lh8,3778
278
+ uav_sim/swarm/leader_follower.py,sha256=GOSbFA8wp1dcSuJw2o4G0GaMssAdjEhLaYo-6TvCaVM,1846
279
+ uav_sim/swarm/potential_swarm.py,sha256=sUEgPshUI1AVLEBHKMpDY1ypIvVuufq6QxsJmD5M4N4,4734
280
+ uav_sim/swarm/reynolds_flocking.py,sha256=tSY29vdGvvH-gCZj3fr1qSgWDXPSpcktkoNIX6yYd24,5035
281
+ uav_sim/swarm/virtual_structure.py,sha256=nPpsiORwS4nMW6D_lmn9QGLvuRaB0HsX0EWUWYGq0Dc,3735
282
+ uav_sim/trajectory_planning/__init__.py,sha256=LfAbQOfXGOWVvc9NhxNema74qYUEvPDQqwZJxYilka8,546
283
+ uav_sim/trajectory_planning/frenet_optimal.py,sha256=Cf5YrCnGW_EYQhyvlyN4DbgHKBnqtjHKWGOgxVw9KUc,8507
284
+ uav_sim/trajectory_planning/min_snap.py,sha256=bk7gvr0Zmo9J6iVZ31OTK55WHfrRVwN7CV-HIEJAJvo,6207
285
+ uav_sim/trajectory_planning/polynomial_trajectory.py,sha256=G6aO4qi6_ALHS097CYYyomZDmuWFS_fLeePjHHB-KvI,4195
286
+ uav_sim/trajectory_planning/quintic_polynomial.py,sha256=hxlYd5S9a59t0DGly3AwRnvijYRdRVtG3pPkZr2BIlo,3695
287
+ uav_sim/trajectory_tracking/__init__.py,sha256=OOuCgX9Cmkzq15XmjcM2gB8jtQH3bVcQxKAPVwj6cPc,382
288
+ uav_sim/trajectory_tracking/feedback_linearisation.py,sha256=_v-nn7LzEu4HOXBT7M0MPAU5d0LvnVppRrn-aa2txQ0,4075
289
+ uav_sim/trajectory_tracking/mppi.py,sha256=ctJ1oQSZahEBnHLq1jzLK-B9ixM_eW8i3PJIjUuphWY,6760
290
+ uav_sim/trajectory_tracking/nmpc.py,sha256=BDhzElIJvY3XSYG759kQOSRBtWB7TS7a6_Gpdmzfdbw,11840
291
+ uav_sim/vehicles/__init__.py,sha256=ynx07QTMsx6aZ768GWIaVdqEH0MFmA9nVawgb2eYp8w,1129
292
+ uav_sim/vehicles/base.py,sha256=szAOe71UUdjvy6aa4uSIyayJLtcwzaOi-AiarE-jOlE,3177
293
+ uav_sim/vehicles/footprint.py,sha256=eTlOIJyPjG3zbl4waA93mEoTf0Kj8j41vJrhe1UNz8I,3726
294
+ uav_sim/vehicles/presets.py,sha256=CGyGn5Br61OiBoVkiSg7FoJEx0b9pKq9-Ypfc4TsrXY,8182
295
+ uav_sim/vehicles/components/__init__.py,sha256=Dc8iE9cQIzcuSPURPqh77D-Pc3AZV4-eY1imtXEYtyU,90
296
+ uav_sim/vehicles/components/allocation.py,sha256=7MU1-40ukJ2DRpd98dBAoaEWcwhMXT2RsWskFGdqfUU,24691
297
+ uav_sim/vehicles/components/mixer.py,sha256=f11wslQMT4RshQx9KGgWYEsEiNTogeSG9iqpHXoQdbA,2990
298
+ uav_sim/vehicles/components/motor.py,sha256=1zWnoXT0ysJPRaOcTKhbprFvbQZzaLi4c1Rf-ka0ulo,2866
299
+ uav_sim/vehicles/fixed_wing/__init__.py,sha256=_c_udKcw-1FxyLieC_-y7_VbSAxjWRrDeNbusYHay74,781
300
+ uav_sim/vehicles/fixed_wing/aerodynamics.py,sha256=jAsFb5cPyGMDixfLpBPcfnxcUhw_ZTiSlsgMWNPQDH4,13950
301
+ uav_sim/vehicles/fixed_wing/fixed_wing.py,sha256=nbnt9MMn-n_vX8dDB9RETXD2zmI73EHNWvM_GXjDfwo,12957
302
+ uav_sim/vehicles/fixed_wing/presets.py,sha256=BoXMTfH3shnM2jNQ5-fofy0SY2wjL-Rvb6O1TLgY2hE,5055
303
+ uav_sim/vehicles/fixed_wing/trim.py,sha256=VpKMaXN9q1jHko-K3S2qku2plQ_E_hLDpY4dq7yel1Y,6369
304
+ uav_sim/vehicles/multirotor/__init__.py,sha256=lhqpbf27Zbii1k29MLD01e56tLqv7_iI_R2NztEY79A,622
305
+ uav_sim/vehicles/multirotor/multirotor.py,sha256=3uY7Y7LnRlTl2F-qlcfS8nGL49FkIqlq8VwgK5pjdfo,15171
306
+ uav_sim/vehicles/multirotor/quadrotor.py,sha256=NRP10z_EPahO73o7ASAkXBLMJKWftQZwGI9mhg17pxE,4355
307
+ uav_sim/vehicles/payloads/__init__.py,sha256=2wbpQDoaRB3mlU3k8hvUrF3uCs7WAYXLc7ioWJMjEdA,82
308
+ uav_sim/vehicles/payloads/gimbal.py,sha256=vnLmSTTZ1yYSKeQ0-MyoUUGUh4TcEQ3W2va-iPi5F4Y,1913
309
+ uav_sim/vehicles/vtol/__init__.py,sha256=8f1XW6F8Plkxu62yGOaEbVQE7ksZLAzSiZVA9DMZ8Sk,173
310
+ uav_sim/vehicles/vtol/tiltrotor.py,sha256=YZtbovpt_OURgqHJfyfdSEipawd2bsRkLokw0W34w2U,13085
311
+ uav_sim/visualization/__init__.py,sha256=-aq2CWDGRQmBZgaTgKbRdjlMz-4HftGB1d9TN9EWcds,2148
312
+ uav_sim/visualization/animator.py,sha256=kVnxWl4KA9RO6lQGSxB6hI3ytunj9UowGODMryV7gMc,7429
313
+ uav_sim/visualization/costmap_viz.py,sha256=VGxzVLF8exNH9H1C1A-26OZU-Gb-v2Yx4Mz9gwAv2qA,4666
314
+ uav_sim/visualization/data_panel.py,sha256=j1JVUuvhO7EUQduWq8Wc6IP9M73zAbmSo12nCIS1B8c,7826
315
+ uav_sim/visualization/plotting.py,sha256=Zb5Fh3Y7fHPaZ6zQaqS6ch3egKtXzeMebXoJsdX88SM,3912
316
+ uav_sim/visualization/sensor_viz.py,sha256=rxZKQngKWbnCk4kZRyg8daiVSaORq0csJqJe9HKJ7R8,12749
317
+ uav_sim/visualization/three_panel.py,sha256=BKtt8ACzyWhPyaJ1MyPX73pIvRIDJAqYpxT40MEvTrA,8908
318
+ uav_sim/visualization/vehicle_artists.py,sha256=mv_g3j6Us22ARofRn4o2BqjePCCkae6o-5GgcHJ2EII,13019
319
+ flybots-1.0.0.dist-info/METADATA,sha256=rGOrT21j9si9DmAgvoT-Aflj3nmPNxAGW_0MsGbY7V4,9461
320
+ flybots-1.0.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
321
+ flybots-1.0.0.dist-info/entry_points.txt,sha256=YHTMflKnF0qmAuOZSoDZZaP4EBfBx2p-6lKa16ta7ls,99
322
+ flybots-1.0.0.dist-info/licenses/LICENSE,sha256=43m0JCNQfcdOOM4hovBlmah1nr7S1Ge9tNMzrAPYE-s,1070
323
+ flybots-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ flybots = uav_sim.cli.main:main
3
+ uav-sim = uav_sim.cli.main:main_deprecated_alias
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Erwin Lejeune
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
uav_sim/__init__.py ADDED
@@ -0,0 +1,16 @@
1
+ # Erwin Lejeune - 2026-02-17
2
+ """flybots — from-scratch algorithms for autonomous UAVs.
3
+
4
+ Published on PyPI as ``flybots``; the import package is still ``uav_sim``
5
+ and will be renamed to match in a later release.
6
+ """
7
+
8
+ from importlib.metadata import PackageNotFoundError, version
9
+
10
+ try:
11
+ __version__ = version("flybots")
12
+ except PackageNotFoundError: # pragma: no cover - only when run from a bare checkout
13
+ # Not installed, so there is no metadata to read. Better an honest
14
+ # placeholder than a number hard-coded here that can disagree with
15
+ # pyproject -- a disagreement nothing catches until a release fails.
16
+ __version__ = "0+unknown"
@@ -0,0 +1,6 @@
1
+ # Erwin Lejeune - 2026-02-18
2
+ """Command-line interface for ``flybots``."""
3
+
4
+ from uav_sim.cli.main import build_parser, main
5
+
6
+ __all__ = ["build_parser", "main"]