PX4 의 구동기 유효력 분석을 통한 가변피치 틸트로터 조종면 할당기 설계
ActuatorEffectivenessRotors.cpp
단일 로터에 대한 구동기 유효력을 정의한다.
모터 특성은 다음 파라미터와 같이 정의된다. [1]
Parameter Names | Descriptions | Symbol |
CA_ROTOR[X]_AX | 동체 축 좌표계 상에서 정의한 로터의 추력 벡터 Thrust vector of rotor defined on Body frame |
${\vec{e}_t}$ |
CA_ROTOR[X]_AY | ||
CA_ROTOR[X]_AZ | ||
CA_ROTOR[X]_PX | 동체 축 좌표계 상에서 정의한 로터의 위치 Position of rotor defined on Body frame |
${\vec{p}_m}$ |
CA_ROTOR[X]_PY | ||
CA_ROTOR[X]_PZ | ||
CA_ROTOR[X]_CT | 로터의 추력 계수이고, 아래와 같이 정의된다. Thrust coeff. of rotor $T = c_t * u^2 $ |
$c_t$ |
CA_ROTOR[X]_KM | 로터의 모멘트 계수이고, 아래와 같이 정의된다. 자이로 모멘텀은 따로 계산한다. Moment coeff. of rotor $M = k_m T$ |
$k_m$ |
CA_ROTOR[X]_TILT |
uint32_t updateAxisFromTilts(tilts, collective_tilt_control)
: 틸트 모터라면 틸트 각도를 ${\vec{e}_t}$에 틸트 각도를 반영한다. : tiltAxis()
: 틸트 하지 않는 모터는 마스크를 남긴다.
int number_of_actuators = computeEffectivenessMatrix(motor_geometry, effectivenss_matrix, actuator_start_index)
: 각 모터에 대한 effectiveness vector를 계산한다.
유효 값이라는 것은 실제 추력이 그렇다는 것이 아닌, 다른 값에 대한 스케일 값이라고 이해하면 편하다.
유효 추력 벡터 (Thrust Effectiveness Vector)
${\vec{E}}_t = c_t {\vec{e}_t}$
유효 모멘트 벡터 (Moment Effectiveness Vector, 2nd term is about conservation of angular momentum)
${\vec{E}}_m = - k_m {\vec{E}_t} + c_t {\vec{p}_m}\times {\vec{e}_t}$
유효 벡터 (Effectiveness Vector)
${\vec{E}} = \left[ \vec{E}_m, \vec{E}_t \right]$
bool addActuators(configuration)
: effectiveness vectors를 모은다 : computeEffectivenessMatrix(_geometry, configuration)
: 모터를 구동기로써 추가한다. actuatorsAdded(number_of_actuators)
bool getEffectivenessMatrix(configuration, external_update)
: addActuators(configuration) with external_update
Reference 구조
Lv.1 | Lv.2 |
TiltrotorVTOL | Rotors |
Tilts | |
ControlSurfaces |
ActuatorEffectivenessHelicopter.cpp
헬기 형태의 구동기 유효력을 정의한다. [1]
Parameter Names | Descriptions | Symbol |
CA_SP0_COUNT | Swash plate에 사용하는 서보 갯수 (~4개) | |
CA_SP0_ARM_L[X] | Swash plate 서보 [X] 번 Arm의 상대 길이 (~4개) | |
CA_SP0_ANG[X] | Swash plate 서보의 각도 위치 | |
CA_HELI_THR_C[X] | 정규화된 Z축 방향 가속도 명령에 대한 정규화된 추력 보간 점 가속도 명령이 0~1 범위 일 때의 정규화된 추력 점을 5개로 표현한다. (0, 25, 50, 75, 100%) |
|
CA_HELI_PITCH_C[X] | 정규화된 Z축 방향 가속도 명령에 대한 정규화된 Collective Pitch 각도 보간 점 가속도 명령이 0~1 범위 일 때의 정규화된 콜렉티브 피치 점을 5개로 표현한다. (0, 25, 50, 75, 100%) |
|
CA_HELI_YAW_CP_S | 콜렉티브 피치에 대한 yawing 보상을 위한 스케일 tail_output += CA_HELI_YAW_CP_S * abs(collective_pitch - CA_HELI_YAW_CP_O) |
|
CA_HELI_YAW_CP_O | 콜렉티브 피치에 대한 yawing 보상을 위한 오프셋 | |
CA_HELI_YAW_TH_S | 쓰로틀에 대한 yawing 보상을 위한 스케일 tail_output += CA_HELI_YAW_TH_S * throttle |
|
CA_HELI_YAW_CCW | 로터 회전 방향이 CCW 인지? | |
COM_SPOOLUP_TIME | Arming하고 거동을 하기 전까지 강제 시간 지연 로터가 idle speed으로 거동하도록 기다리는 시간 |
Reference 구조
Lv.1 | Lv.2 |
Helicopter |
ActuatorEffectivenessMultirotor.cpp
참고할 겸 찾아본다.
Reference 구조
Lv.1 | Lv.2 |
Multirotor | Rotors |
ActuatorEffectivenessFixedWing.cpp
참고할 겸 찾아본다.
Reference 구조
Lv.1 | Lv.2 |
FixedWing | Rotors |
ControlSurfaces |
설계안 : ActuatorEffectivenessMultiTiltRotor.cpp
설계하면..
Reference 구조
Lv.1 | Lv.2 | 참고할 파일 |
MultiTiltRotor | VariablePitchRotor | ActuatorEffectivenessHelicopter.cpp |
Tilts | ActuatorEffectivenessTilts.cpp | |
ControlSurfaces | ActuatorEffectivenessControlSerfaces.cpp |
Reference
1) https://dev.px4.io/master/en/advanced/parameter_reference.html
EOF