Drone.Adapters.Crazyflie.Units (ex_drone v0.3.0)

View Source

Unit conversions at the Crazyflie adapter boundary.

Public Drone API distances are centimeters and angles are degrees. Crazyflie high-level commander packets use meters and radians.

Examples

0.5 = Drone.Adapters.Crazyflie.Units.cm_to_m(50)
50 = Drone.Adapters.Crazyflie.Units.m_to_cm(0.5)

Summary

Functions

Converts centimeters to meters.

Converts degrees to radians.

Converts meters to centimeters (truncated toward zero).

Default horizontal move duration in seconds for a distance in cm.

Converts radians to degrees (truncated toward zero).

Functions

cm_to_m(cm)

@spec cm_to_m(number()) :: float()

Converts centimeters to meters.

Parameters

  • cm (number()) — distance in centimeters

Returns

float() meters.

Examples

1.0 = Drone.Adapters.Crazyflie.Units.cm_to_m(100)

deg_to_rad(deg)

@spec deg_to_rad(number()) :: float()

Converts degrees to radians.

Parameters

  • deg (number()) — angle in degrees

Returns

float() radians.

Examples

approx_pi = Drone.Adapters.Crazyflie.Units.deg_to_rad(180)
true = abs(approx_pi - :math.pi()) < 1.0e-9

m_to_cm(m)

@spec m_to_cm(number()) :: integer()

Converts meters to centimeters (truncated toward zero).

Parameters

  • m (number()) — distance in meters

Returns

integer() centimeters.

Examples

50 = Drone.Adapters.Crazyflie.Units.m_to_cm(0.509)

move_duration_s(distance_cm, speed_cm_s)

@spec move_duration_s(pos_integer(), pos_integer()) :: float()

Default horizontal move duration in seconds for a distance in cm.

Uses distance_cm / speed_cm_s, floored at 0.5 seconds so short hops still get a usable commander duration.

Parameters

  • distance_cm (pos_integer()) — commanded distance in centimeters
  • speed_cm_s (pos_integer()) — speed in centimeters per second

Returns

float() duration in seconds (at least 0.5).

Examples

2.0 = Drone.Adapters.Crazyflie.Units.move_duration_s(100, 50)
0.5 = Drone.Adapters.Crazyflie.Units.move_duration_s(20, 100)

rad_to_deg(rad)

@spec rad_to_deg(number()) :: integer()

Converts radians to degrees (truncated toward zero).

Parameters

  • rad (number()) — angle in radians

Returns

integer() degrees.

Examples

90 = Drone.Adapters.Crazyflie.Units.rad_to_deg(:math.pi() / 2)