drones-sim 0.2.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 (45) hide show
  1. drones_sim/__init__.py +15 -0
  2. drones_sim/control/__init__.py +15 -0
  3. drones_sim/control/allocation.py +76 -0
  4. drones_sim/control/cascaded.py +204 -0
  5. drones_sim/control/geometric.py +170 -0
  6. drones_sim/control/lqr.py +174 -0
  7. drones_sim/control/pid.py +50 -0
  8. drones_sim/dynamics/__init__.py +13 -0
  9. drones_sim/dynamics/config.py +117 -0
  10. drones_sim/dynamics/disturbances.py +262 -0
  11. drones_sim/dynamics/quadcopter.py +317 -0
  12. drones_sim/estimation/__init__.py +2 -0
  13. drones_sim/estimation/ahrs.py +79 -0
  14. drones_sim/estimation/ekf.py +594 -0
  15. drones_sim/logging/__init__.py +13 -0
  16. drones_sim/logging/csv_logger.py +76 -0
  17. drones_sim/logging/json_logger.py +53 -0
  18. drones_sim/math_utils.py +119 -0
  19. drones_sim/models/__init__.py +21 -0
  20. drones_sim/models/quadcopter.urdf +296 -0
  21. drones_sim/models/urdf_loader.py +444 -0
  22. drones_sim/rl/__init__.py +16 -0
  23. drones_sim/rl/actions.py +219 -0
  24. drones_sim/rl/env.py +195 -0
  25. drones_sim/rl/observations.py +40 -0
  26. drones_sim/rl/reward.py +69 -0
  27. drones_sim/rl/tasks.py +73 -0
  28. drones_sim/sensors/__init__.py +3 -0
  29. drones_sim/sensors/gps.py +158 -0
  30. drones_sim/sensors/imu.py +196 -0
  31. drones_sim/sensors/models.py +113 -0
  32. drones_sim/simulation.py +283 -0
  33. drones_sim/state.py +133 -0
  34. drones_sim/trajectory.py +391 -0
  35. drones_sim/visualization/__init__.py +23 -0
  36. drones_sim/visualization/api.py +50 -0
  37. drones_sim/visualization/dashboard.py +74 -0
  38. drones_sim/visualization/plots.py +183 -0
  39. drones_sim/visualization/rerun_viewer.py +411 -0
  40. drones_sim/visualization/viewer.py +452 -0
  41. drones_sim-0.2.0.dist-info/METADATA +323 -0
  42. drones_sim-0.2.0.dist-info/RECORD +45 -0
  43. drones_sim-0.2.0.dist-info/WHEEL +5 -0
  44. drones_sim-0.2.0.dist-info/licenses/LICENSE +21 -0
  45. drones_sim-0.2.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,323 @@
1
+ Metadata-Version: 2.4
2
+ Name: drones-sim
3
+ Version: 0.2.0
4
+ Summary: Composable quadcopter modeling, control, estimation, and visualization
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/thanhndv212/drones-sim
7
+ Project-URL: Documentation, https://github.com/thanhndv212/drones-sim#readme
8
+ Project-URL: Changelog, https://github.com/thanhndv212/drones-sim/blob/master/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/thanhndv212/drones-sim/issues
10
+ Project-URL: Source, https://github.com/thanhndv212/drones-sim
11
+ Requires-Python: >=3.10
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: numpy>=1.24
15
+ Requires-Dist: scipy>=1.10
16
+ Requires-Dist: matplotlib>=3.7
17
+ Requires-Dist: rerun-sdk<1,>=0.27
18
+ Provides-Extra: dev
19
+ Requires-Dist: pytest>=7.0; extra == "dev"
20
+ Requires-Dist: ruff; extra == "dev"
21
+ Provides-Extra: viser
22
+ Requires-Dist: viser>=0.2; extra == "viser"
23
+ Provides-Extra: rl
24
+ Requires-Dist: torch>=2.2; extra == "rl"
25
+ Requires-Dist: stable-baselines3>=2.3; extra == "rl"
26
+ Requires-Dist: gymnasium>=0.29; extra == "rl"
27
+ Requires-Dist: tensorboard>=2.15; extra == "rl"
28
+ Requires-Dist: pyyaml>=6.0; extra == "rl"
29
+ Provides-Extra: rl-dev
30
+ Requires-Dist: drones-sim[rl]; extra == "rl-dev"
31
+ Requires-Dist: wandb; extra == "rl-dev"
32
+ Requires-Dist: optuna>=3.5; extra == "rl-dev"
33
+ Requires-Dist: moviepy; extra == "rl-dev"
34
+ Dynamic: license-file
35
+
36
+ # drones_sim
37
+
38
+ Composable quadcopter simulation for control and state-estimation experiments. It combines a nonlinear quaternion rigid-body model, bounded actuators, SE(3) geometric control, innovation-gated sensor fusion, reproducible sensor models, and result-native 2D/3D visualization.
39
+
40
+ [![CI](https://github.com/thanhndv212/drones-sim/actions/workflows/ci.yml/badge.svg)](https://github.com/thanhndv212/drones-sim/actions/workflows/ci.yml)
41
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/thanhndv212/drones-sim)
42
+
43
+ ## Install
44
+
45
+ ```bash
46
+ cd drones_sim
47
+ pip install -e ".[dev]"
48
+ ```
49
+
50
+ RL extras (Gymnasium env, SB3 PPO, TensorBoard):
51
+
52
+ ```bash
53
+ pip install -e ".[rl]"
54
+ ```
55
+
56
+ Full RL dev stack (adds Weights & Biases, Optuna, moviepy):
57
+
58
+ ```bash
59
+ pip install -e ".[rl-dev]"
60
+ ```
61
+
62
+ Legacy Viser mission-control examples:
63
+
64
+ ```bash
65
+ pip install -e ".[viser]"
66
+ ```
67
+
68
+ ## Quick start
69
+
70
+ The high-level runner owns timing, sensing, estimation, control, logging, and aligned outputs:
71
+
72
+ ```python
73
+ from drones_sim import ClosedLoopSimulator, SimulationConfig, visualize
74
+ from drones_sim.trajectory import generate_circular
75
+
76
+ reference = generate_circular(duration=10.0, sample_rate=100, radius=2.0)
77
+ simulator = ClosedLoopSimulator(
78
+ config=SimulationConfig(dt=0.01, use_estimator=True, seed=7)
79
+ )
80
+ result = simulator.run(reference)
81
+
82
+ print(result.summary())
83
+ visualize(result) # Rerun is the default backend
84
+ ```
85
+
86
+ For custom experiments, compose `QuadcopterConfig`, `QuadcopterDynamics`,
87
+ `GeometricController`, `IMUSimulator`, `GPSSimulator`, and
88
+ `ExtendedKalmanFilter`, then inject them into `ClosedLoopSimulator`.
89
+
90
+ ### Working examples
91
+
92
+ | # | Script | Install | Description |
93
+ |---|--------|---------|-------------|
94
+ | 01 | `01_imu_ekf_basic.py` | Base | IMU simulation and 16-state EKF sensor fusion |
95
+ | 02 | `02_ekf_adaptive.py` | Base | Adaptive EKF with temperature-dependent sensor models |
96
+ | 03 | `03_waypoint_nav.py` | Base | Minimum-snap waypoint navigation with cascaded PID |
97
+ | 04 | `04_viser_viewer.py` | `[viser]` | Interactive Viser 3D playback |
98
+ | 05 | `05_full_pipeline.py` | `[viser]` | Dynamics, sensors, EKF, PID control, and interactive viewer |
99
+ | 06 | `06_trajectory_following.py` | `[viser]` | EKF-fused trajectory tracking with mission controls |
100
+ | 07 | `07_rl_hover.py` | `[rl]` | Train and evaluate a PPO hover policy |
101
+ | 08 | `08_rl_vs_pid.py` | `[rl]` | Compare a trained RL policy with cascaded PID |
102
+ | 09 | `09_unified_simulation.py` | Base | Typed end-to-end simulation and diagnostic dashboard |
103
+ | 10 | `10_rerun_viewer.py` | Base | Rerun 3D scene, telemetry, streaming, and `.rrd` export |
104
+
105
+ Run a base example directly:
106
+
107
+ ```bash
108
+ python examples/09_unified_simulation.py
109
+ ```
110
+
111
+ The default `visualize(result)` call opens Rerun. It can also stream to an
112
+ existing gRPC server or save a portable recording:
113
+
114
+ ```bash
115
+ python examples/10_rerun_viewer.py
116
+ python examples/10_rerun_viewer.py --save flight.rrd
117
+ rerun flight.rrd
118
+ ```
119
+
120
+ Matplotlib and Viser remain available explicitly:
121
+
122
+ ```python
123
+ visualize(result, backend="matplotlib", title="Flight report")
124
+ visualize(result, backend="viser", port=8080) # requires drones-sim[viser]
125
+ ```
126
+
127
+ ## Package structure
128
+
129
+ ```
130
+ src/drones_sim/
131
+ ├── state.py # Typed state, setpoint, and control contracts
132
+ ├── simulation.py # Reproducible closed-loop orchestration and results
133
+ ├── math_utils.py # Quaternion ops, rotation matrices, Euler helpers
134
+ ├── trajectory.py # Trajectory generators (hover-cruise, circular, waypoints, min-snap)
135
+ ├── models/
136
+ │ ├── urdf_loader.py # Pure-stdlib URDF parser (no external deps)
137
+ │ └── quadcopter.urdf # Bundled quadcopter model
138
+ ├── sensors/
139
+ │ ├── imu.py # 9-axis IMU simulator (accel, gyro, mag)
140
+ │ ├── gps.py # GNSS receiver simulator (position + velocity)
141
+ │ └── models.py # SensorNoiseModel (Gauss-Markov bias), TemperatureModel
142
+ ├── estimation/
143
+ │ ├── ekf.py # 16-state EKF + 9-state adaptive EKF + AHRS
144
+ │ └── ahrs.py # Complementary-filter AHRS
145
+ ├── dynamics/
146
+ │ ├── quadcopter.py # 13-state quaternion Newton-Euler rigid body
147
+ │ └── disturbances.py # Wind, gust, ground effect, motor failure, payload drop
148
+ ├── control/
149
+ │ ├── pid.py # Scalar PID with anti-windup
150
+ │ ├── cascaded.py # Position → Velocity → Attitude cascaded PID
151
+ │ ├── geometric.py # Nonlinear SE(3) trajectory controller
152
+ │ ├── allocation.py # Bounded weighted least-squares motor allocation
153
+ │ └── lqr.py # Full-state feedback LQR (CARE solution)
154
+ ├── rl/
155
+ │ ├── env.py # QuadcopterEnv (gymnasium.Env wrapper)
156
+ │ ├── actions.py # MotorSpeedAction, ThrustBodyRatesAction, VelocityLevelAction, LQRResidualAction
157
+ │ ├── observations.py # RelativeStateObs (17-D observation)
158
+ │ ├── tasks.py # HoverTask, WaypointTask, TrackingTask
159
+ │ └── reward.py # Weighted multi-term reward function
160
+ ├── logging/
161
+ │ ├── csv_logger.py # CSV telemetry logger
162
+ │ └── json_logger.py # JSON Lines telemetry logger
163
+ └── visualization/
164
+ ├── api.py # visualize(); Rerun is the default backend
165
+ ├── plots.py # Matplotlib multi-panel comparison plots
166
+ ├── dashboard.py # SimulationResult engineering dashboard
167
+ ├── rerun_viewer.py # Default synchronized 3D, telemetry, events, and replay
168
+ └── viewer.py # Optional Viser mission-control UI (`[viser]`)
169
+
170
+ training/
171
+ ├── train_ppo.py # PPO training entry point (YAML config, CPU default, W&B)
172
+ ├── eval_policy.py # Policy evaluation with success/crash metrics
173
+ ├── configs/
174
+ │ ├── ppo_hover.yaml # Config for thrust_rates / lqr_residual actions
175
+ │ └── ppo_hover_vel.yaml # Config for velocity-level action
176
+ └── checkpoints/ # Saved models and VecNormalize stats
177
+ ```
178
+
179
+ ## Features
180
+
181
+ ### Project status
182
+
183
+ | Area | Status |
184
+ |------|--------|
185
+ | Quaternion dynamics, bounded allocation, geometric/PID/LQR control | ✅ Implemented and tested |
186
+ | Sensor simulation, EKF/AHRS estimation, closed-loop orchestration | ✅ Implemented and tested |
187
+ | CI, disturbances, CSV/JSON telemetry, Rerun replay | ✅ Implemented and tested |
188
+ | Gymnasium environment, PPO training/evaluation, RL examples | ✅ Baseline implemented |
189
+ | ULog export and RL domain randomization/curriculum | 🟡 Partially implemented / planned |
190
+ | MPC, Monte Carlo evaluation, VIO, obstacle planning, swarms, SITL | ⬜ Planned |
191
+
192
+ See the [development roadmap](docs/development-roadmap.md) for acceptance criteria and remaining work.
193
+
194
+ ### State estimation
195
+
196
+ | Filter | States | Description |
197
+ |--------|--------|-------------|
198
+ | Extended Kalman Filter | 16-state | Position(3), velocity(3), quaternion(4), accel bias(3), gyro bias(3). Analytical Jacobians, Joseph form covariance, GPS/baro/velocity corrections |
199
+ | Adaptive EKF | 9-state | Position(3), velocity(3), accel bias(3). Innovation-window adaptive noise, Gauss-Markov bias |
200
+ | AHRS | Complementary filter | Fuses accel, gyro, mag with gyro bias learning |
201
+
202
+ ### Control
203
+
204
+ | Controller | Type | Description |
205
+ |------------|------|-------------|
206
+ | Geometric | Nonlinear SE(3) | Quaternion-safe trajectory tracking with velocity/acceleration feedforward and bounded allocation |
207
+ | Cascaded PID | 3-loop cascade | Position → Velocity → Attitude. 9 PID instances, motor-speed output |
208
+ | LQR | Full-state feedback | Linearized around hover, CARE solution, wrench → motor allocation |
209
+
210
+ ### Disturbances (6 types)
211
+
212
+ | Disturbance | Category | Description |
213
+ |-------------|----------|-------------|
214
+ | `ConstantWind` | Wind | Steady world-frame drag force |
215
+ | `StepWind` | Wind | Wind that switches on at a given time |
216
+ | `DrydenGust` | Wind | Continuous turbulence — Gauss-Markov process (MIL-F-8785C) |
217
+ | `MotorFailure` | Failure | Degraded rotor thrust coefficient |
218
+ | `PayloadDrop` | Failure | Instantaneous mass change |
219
+ | `GroundEffect` | Environment | Thrust augmentation near ground (Cheeseman & Bennett) |
220
+
221
+ ### Reinforcement learning
222
+
223
+ - **QuadcopterEnv** — Gymnasium `Env` compatible with SB3, CleanRL, Tianshou, RLlib
224
+ - **Four action parameterizations** — three levels of abstraction plus a residual:
225
+
226
+ | Action | Policy outputs | Stabilization |
227
+ |--------|---------------|---------------|
228
+ | `MotorSpeedAction` | Raw motor speeds (4× rad/s) | None (hardest) |
229
+ | `ThrustBodyRatesAction` | Thrust delta + body rates (ωx,ωy,ωz) | Rate → torque P-controller |
230
+ | `VelocityLevelAction` | World-frame velocity (vx,vy,vz) + yaw rate | Built-in cascaded P-controller (velocity → attitude → torque) |
231
+ | `LQRResidualAction` | Delta on LQR motor speeds (in [-1,1]) | Full-state LQR feedback (CARE solution) |
232
+
233
+ - **Three tasks**: hover, waypoint sequence, trajectory tracking
234
+ - **Weighted multi-term reward** (position, velocity, attitude, action smoothness, alive/crash)
235
+ - **PPO training** in `training/train_ppo.py` with YAML configs, TensorBoard logging, and optional W&B tracking
236
+ - **Policy evaluation** in `training/eval_policy.py` (RMSE, success rate, crash rate)
237
+
238
+ #### Training
239
+
240
+ The training script defaults to CPU for small MLP policies (GPU transfer overhead dominates):
241
+
242
+ ```bash
243
+ # LQR residual (recommended — 75%+ success rate at 500k steps)
244
+ python -m training.train_ppo \
245
+ --config training/configs/ppo_hover.yaml \
246
+ --timesteps 500000 \
247
+ --action-type lqr_residual
248
+
249
+ # Velocity-level (0% crash, 1.5m RMSE)
250
+ python -m training.train_ppo \
251
+ --config training/configs/ppo_hover_vel.yaml \
252
+ --timesteps 200000 \
253
+ --action-type velocity
254
+
255
+ # Thrust + body rates (legacy)
256
+ python -m training.train_ppo \
257
+ --config training/configs/ppo_hover.yaml \
258
+ --timesteps 200000 \
259
+ --action-type thrust_rates
260
+ ```
261
+
262
+ Track training with Weights & Biases:
263
+
264
+ ```bash
265
+ python -m training.train_ppo \
266
+ --config training/configs/ppo_hover.yaml \
267
+ --action-type lqr_residual \
268
+ --track --wandb-project drones-sim-ppo
269
+ ```
270
+
271
+ Open TensorBoard (logs are saved to `./tb/`):
272
+
273
+ ```bash
274
+ tensorboard --logdir tb/
275
+ ```
276
+
277
+ #### Evaluation
278
+
279
+ ```bash
280
+ # Evaluate a trained checkpoint
281
+ python -m training.eval_policy \
282
+ --path training/checkpoints/final.zip \
283
+ --episodes 20 \
284
+ --action-type lqr_residual
285
+
286
+ # Expected output:
287
+ # pos_rmse: 0.1370
288
+ # success_rate: 0.7500
289
+ # crash_rate: 0.0000
290
+ # mean_reward: 6390.6716
291
+ ```
292
+
293
+
294
+
295
+ ### Logging
296
+
297
+ | Logger | Format | Description |
298
+ |--------|--------|-------------|
299
+ | `CsvLogger` | CSV | Full state + motor speeds + estimate per row |
300
+ | `JsonLogger` | JSON Lines | Per-line JSON objects; machine-readable |
301
+
302
+ ## Tests
303
+
304
+ ```bash
305
+ pytest tests/ -v
306
+ ```
307
+
308
+ Release history is maintained in [CHANGELOG.md](CHANGELOG.md).
309
+
310
+ ## License
311
+
312
+ MIT — see [LICENSE](LICENSE).
313
+
314
+ ## Dependencies
315
+
316
+ | Dependency | Purpose |
317
+ |------------|---------|
318
+ | numpy, scipy | Numerical computation |
319
+ | matplotlib | 2D plotting |
320
+ | [Rerun](https://rerun.io/) | Default synchronized 3D telemetry, replay, and `.rrd` export |
321
+ | [viser](https://github.com/nerfstudio-project/viser) | Optional interactive mission controls (`[viser]`) |
322
+ | torch, stable-baselines3, gymnasium | RL training (`[rl]` extra) |
323
+ | tensorboard, pyyaml | RL logging & config (`[rl]` extra) |
@@ -0,0 +1,45 @@
1
+ drones_sim/__init__.py,sha256=3RCBp7WGKL-2Qhi3-WMrg5xjgSuKl_nHqtTfAkcuybA,437
2
+ drones_sim/math_utils.py,sha256=A-iF5D6aSi8ImVWgbIjXU6ZRb7NnmygpLh5cLC_iVO8,4043
3
+ drones_sim/simulation.py,sha256=_7Tgm3rk5gWJfwlIGyrqq3afQKhJhdeFkGHpXIlJu2c,11455
4
+ drones_sim/state.py,sha256=5Q0wCkCxjZXkAdaK2LZ2HFBqLh1g5Tb777iweNlnhVg,4624
5
+ drones_sim/trajectory.py,sha256=it72WRieHiW8oNJjrz5JCgmHsQ-c2u6gaxkPGHh5WcM,13820
6
+ drones_sim/control/__init__.py,sha256=TbqbJ1Gpp1hO4Gc0xRq6E6PK7ykWizNf3DsgbgSwYLA,427
7
+ drones_sim/control/allocation.py,sha256=zj78pZ-t-uL0rnssNv6rWbPe6lcecKZiCoLeupdhV94,2781
8
+ drones_sim/control/cascaded.py,sha256=anD61YELO1gG08wqFDjzRjBsv3kqrxBUoVgj558GQT0,7205
9
+ drones_sim/control/geometric.py,sha256=uu5tHosoGkH6w7-scAIZi_HOCbdlnIi05YUCNklmcdM,6136
10
+ drones_sim/control/lqr.py,sha256=HvpzMTmPkXouLRjw_CU_IZcX03KfEi-mL1HxcXwPA6M,5950
11
+ drones_sim/control/pid.py,sha256=6KEvLZHNTv3hCpyyYPegVsm6zNP5nEEwFuIFuu5sQHk,1378
12
+ drones_sim/dynamics/__init__.py,sha256=xjj9IsBED0gC41M-w91Vb-wQA9w4p9v-ciNg8773-CY,296
13
+ drones_sim/dynamics/config.py,sha256=oQInZeZFZIwgfZW_o37f20p2iG3OclQPWdgP-1hgoKI,4696
14
+ drones_sim/dynamics/disturbances.py,sha256=mZloAuZidBrMgCrXJtiKT0qQHwdx9yXf43mfpEoJfuQ,9144
15
+ drones_sim/dynamics/quadcopter.py,sha256=gnOHvjKzfq-UPLZ5Er_vhHmcMiBCfBLNvXi64EJPo1w,12207
16
+ drones_sim/estimation/__init__.py,sha256=yA9uF6Utk1Uop70x4-we4IOt-YPr1sn60ixdiS-p3vc,105
17
+ drones_sim/estimation/ahrs.py,sha256=jf0oZxU5JUDHEcZt2oOtxnFqV9D6c8hNoPAW4q0-AeI,2548
18
+ drones_sim/estimation/ekf.py,sha256=jI7ykbk4QkAIhGcx6a3tfapfzk_ELfBx2e8ENuV7FVM,23013
19
+ drones_sim/logging/__init__.py,sha256=DAiihtKQ4zLOKj79RKU102XlYH4v_NZpz41St_uts_E,382
20
+ drones_sim/logging/csv_logger.py,sha256=OgZt-dmyURS0-iNzHfpWFovCcU8QoqqicvLR2W2uXrs,2120
21
+ drones_sim/logging/json_logger.py,sha256=RtL40UYdF5l-6gOLTHhjBS6AqCUy-yzPvLKlca5nKRk,1477
22
+ drones_sim/models/__init__.py,sha256=86vkQsDESlODYwc9AmOlrqtTsx1YzIYF5huzM1YX8ro,371
23
+ drones_sim/models/quadcopter.urdf,sha256=VZIoyMLGPr-g8sCy2KsW7617TvzKSp-etf4I_dxCaKo,8192
24
+ drones_sim/models/urdf_loader.py,sha256=uiIFdEEJ00iUm-a662V_F4l2-pwvy2kOcUFYdmQuTEA,14677
25
+ drones_sim/rl/__init__.py,sha256=vPuBabX7IoPAhBgYn-JNybeEeV-jdV1rILbXu5SAFm0,550
26
+ drones_sim/rl/actions.py,sha256=-QofOSk9uGo29GroksVOAxEAw7_BwF7iPgYa3pJgJZw,7776
27
+ drones_sim/rl/env.py,sha256=JAIdyVbe_UZriZGTJw6-P0Rn-vUz9WWs_fI1oH3O2nI,7380
28
+ drones_sim/rl/observations.py,sha256=q6A7UY9JKVvXpL3ANJchonJWWnD6DafLfK2lGuf2w5E,1155
29
+ drones_sim/rl/reward.py,sha256=KmgjdwLvOJINe45C12rvXD1F174DxZvEkwpsyPlnUNQ,2176
30
+ drones_sim/rl/tasks.py,sha256=PR-_iLbVKA0Gc73FHGL37AKL5XiOE7aPye1KLd0TPtg,2273
31
+ drones_sim/sensors/__init__.py,sha256=uGM9Mz_DerwRMMTqBBBp4CoWr8rL272TzvPCLBXcUOM,213
32
+ drones_sim/sensors/gps.py,sha256=GBdU3J4KMsQSTfqW5Nz7S1lNUlkGUG8aur6KOI7k7ec,4770
33
+ drones_sim/sensors/imu.py,sha256=UKcWd5WbEKkx-Mn8VifChfOJwgRXh4m35UBbYEJNI_g,7329
34
+ drones_sim/sensors/models.py,sha256=GKwW2z_ho714XGcSEY-EF_zLmuw-G_SlVda-KQK6Ogk,4213
35
+ drones_sim/visualization/__init__.py,sha256=SLPPT6qykPNwqNbQEGGv9H77LjqXguklR9CGoAn_4lQ,574
36
+ drones_sim/visualization/api.py,sha256=TqMfWpBRtc0N-jOHzunhhTUhhHKfD85XXiNr1SRfTRw,1722
37
+ drones_sim/visualization/dashboard.py,sha256=dkzXJxRrcdfAFXiKm94NqUkmPY23iHnV-8h0EnkskSY,3042
38
+ drones_sim/visualization/plots.py,sha256=_rz0C1TGEPePpZfvNv1a_1asXVFkHraNz_MKHqOVyk4,5985
39
+ drones_sim/visualization/rerun_viewer.py,sha256=sSmAYMuzofWUnAmMczdJnCaJ9wI3ovb8LeiSVhiE8YY,13645
40
+ drones_sim/visualization/viewer.py,sha256=t9J0MvIlnF1CcT5m4ogFag1HtDU4g3j3Pp461FfXf5w,15359
41
+ drones_sim-0.2.0.dist-info/licenses/LICENSE,sha256=QBMWTFjfoSdf2NtHiky9ObkbxE7ChehzR6KZjQDFs2I,1068
42
+ drones_sim-0.2.0.dist-info/METADATA,sha256=x7KEmnYwAIZgBUnieiYu1WOwqti0-hYhuQ39JEUySA4,12974
43
+ drones_sim-0.2.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
44
+ drones_sim-0.2.0.dist-info/top_level.txt,sha256=EWFYGJfyN1Y39OagnuH2zQqaq7bKHSTek0pgTlCl4lA,11
45
+ drones_sim-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 thanhndv212
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.
@@ -0,0 +1 @@
1
+ drones_sim