Wardn Hub
MCP ServersSkillsCategoriesAPI docsSubmit server
Submit server
Wardn HubTrusted MCP server directory.

Registry

  • MCP Servers
  • Skills
  • Categories

Resources

  • API docs
  • Score method

Contribute

  • Submit server
  • Advertise
© 2026 Wardn Hub
Wardn Hub
MCP ServersSkillsCategoriesAPI docsSubmit server
Submit server
skills/benchflow-ai/skillsbench/tasks-drone-planning-control-environment-skills-motor-model-dynamics

tasks-drone-planning-control-environment-skills-motor-model-dynamics

1
benchflow-ai/skillsbench·Other Tools and Integrations·Audit pending·Snapshot 6896c5eabbcc

Summary

This source did not publish a separate summary. Review SKILL.md before using the skill.

SKILL.md

Motor Model and Dynamics Simulation

Overview

Two modules form the physics layer of the simulator:

  1. Motor model — maps desired [F, Mx, My, Mz] → desired motor RPMs → applies first-order lag → returns actual thrust and moments
  2. Dynamics — nonlinear equations of motion; given forces and moments, returns the 16-element state derivative for ODE integration

Motor Model

Propeller Allocation Matrix (X-frame quadrotor)

The 4×4 allocation matrix maps [F, Mx, My, Mz] to squared motor RPMs. For an X-frame with arm length d, thrust coefficient cT, and torque coefficient cQ:

         motor:  1      2      3      4
Thrust:         +cT    +cT    +cT    +cT
Roll  (Mx):      0    +d·cT    0    -d·cT
Pitch (My):    -d·cT    0    +d·cT    0
Yaw   (Mz):    -cQ    +cQ    -cQ    +cQ

Implementation Logic

  1. Build the 4×4 prop_matrix from cT, cQ, and d.
  2. Solve prop_matrix @ rpm_sq = [F, Mx, My, Mz] for rpm_sq (desired squared RPMs).
  3. Take sqrt of each element (clamp negatives to 0 first), then clip to [rpm_min, rpm_max].
  4. Apply first-order motor lag: rpm_dot = km * (rpm_desired - rpm_current).
  5. Compute actual force/moment using prop_matrix @ (motor_rpm ** 2) and return (F_actual, M_actual, rpm_dot).

Dynamics (Equations of Motion)

State vector (16,)

IndicesMeaning
0:3Position [x, y, z]
3:6Velocity [vẋ, vẏ, vż]
6:9Euler angles [φ, θ, ψ]
9:12Angular velocity [p, q, r]
12:16Motor RPM [ω₁, ω₂, ω₃, ω₄]

Implementation Logic

Compute state_dot (16,) from current state and applied forces/moments:

  1. Position derivative = current velocity (state[3:6]).
  2. Velocity derivative = gravity + thrust projected into world frame via ZYX Euler rotation. The x/y accelerations depend on F/m, sin/cos of all three Euler angles. The z acceleration is −g + (F/m)·cos(φ)·cos(θ).
  3. Euler angle derivative = current angular velocity (state[9:12]).
  4. Angular velocity derivative = I⁻¹ M (solve inertia matrix against moment vector).
  5. Motor RPM derivative = rpm_motor_dot from the motor model.

RK45 Integration

Use scipy.integrate.solve_ivp with method='RK45' over each timestep [t_k, t_{k+1}]. The ODE function wraps dynamics(params, s, F_actual, M_actual, rpm_motor_dot) with F_actual and M_actual held constant for the step. After solving, take the last column of sol.y as the new state.

Motor Physical Limits

ParameterValueMeaning
rpm_min3000Minimum motor speed (motors always spinning)
rpm_max20000Maximum motor speed
motor_constant km36.5 s⁻¹First-order time constant; τ = 1/km ≈ 27 ms

Max Thrust Calculation

Derived from motor limits:

  • T_max = 4 * cT * rpm_max² (all 4 motors at max RPM)
  • T_min = 4 * cT * rpm_min²
  • Thrust-to-weight ratio: twr = T_max / (mass * gravity)
  • Max upward acceleration: (T_max − mass·g) / mass
  • Max downward acceleration: (mass·g − T_min) / mass

Related skills

testing-python13f-analyzerAutomatic Speech Recognition (ASR)Multimodal Fusion for Speaker DiarizationSpeaker Clustering Methods