!REDIRECT “https://docs.px4.io/master/ko/concept/custom_mixer_payload.html

개별 탑재 장치 믹서

이 주제에서는 개별 탑재 장치를 프로그램으로 제어하는 개별 믹서 추가 방법을 다룹니다(예: 전자기 집게).

기존 제어 분류 정의에 없는 탑재 장치 형식을 지원할 개발자에게 이 주제를 안내하고자합니다(예: 짐벌은 제어 그룹이 있으나, 집게는 그렇지 않음). 믹싱과 액츄에이터를 우선 읽고 오셔야 합니다.

탑재 장치 믹서 예제

탑재 장치 믹서는 단지 제어 분류 #6 (첫번째 탑재 장치)로부터 각각의 출력으로의 기능 값에 대응하는 믹서 결합을 수행할 뿐입니다. uORB 토픽을 지정 출력으로 대응할 선택 그룹 함수와 값으로 uORB 토픽을 내보낼 수 있습니다.

For this example, we’ll create a custom mixer based on the RC passthrough mixer (pass.aux.mix). 이 믹서는 보통 대형 멀티콥터에서 AUX PWM 포트로 불러옵니다. 이 믹서로 4개의 사용자 정의 원격 조종 채널 값을 처리합니다(RC_MAP_AUXx/RC_MAP_FLAPS 매개변수로 설정). 그리하여 첫번째 4개의 출력은 AUX PWM 출력입니다.

  1. # Manual pass through mixer for servo outputs 1-4
  2. # AUX1 channel (select RC channel with RC_MAP_AUX1 param)
  3. M: 1
  4. S: 3 5 10000 10000 0 -10000 10000
  5. # AUX2 channel (select RC channel with RC_MAP_AUX2 param)
  6. M: 1
  7. S: 3 6 10000 10000 0 -10000 10000
  8. # AUX3 channel (select RC channel with RC_MAP_AUX3 param)
  9. M: 1
  10. S: 3 7 10000 10000 0 -10000 10000
  11. # FLAPS channel (select RC channel with RC_MAP_FLAPS param)
  12. M: 1
  13. S: 3 4 10000 10000 0 -10000 10000

Note 파일에서는 4개의 (출력에 대한) 믹서 결합을 나타냅니다. - M: 1 하나의 제어 입력(다음 S행)에 대한 출력을 나타냅니다. - S: 3n 제어 분류 3 (수동 처리)의 n번째 입력을 나타냅니다. 따라서 S: 3 5 은 “원격 조종 AUX1”입니다(이 입력은 RC_MAP_AUX1 매개변수의 원격 조종 채널 세트에 대응합니다). 섹션 선언 순서는 물리 버스에 할당할 출력 순서를 정의합니다(예: 세번째 섹션은 AUX3에 할당함).

믹서 파일을 복사하여 /etc/mixers/pass.aux.mix SD 카드의 <0>/etc/mixers/pass.aux.mix 디렉터리 위치에 놓는 과정으로 시작합니다(믹싱과 액츄에이터 > 개별 믹서 불러오기 참고).

첫번째 섹션과 탑재 장치 제어 분류 함수 입력을 제거하십시오:

  • 아래를:
    1. # AUX1 channel (control group 3, RC CH5) (select RC channel with RC_MAP_AUX1 param)
    2. M: 1
    3. S: 3 5 10000 10000 0 -10000 10000
  • 다음으로 바꾸십시오:
    1. # Payload 1 (control group 6) channel 1
    2. M: 1
    3. S: 6 1 10000 10000 0 -10000 10000

이 출력은 파일의 처음에 있기 때문에 (UAVCAN을 활성화하기 전에는) 첫번째 AUX PWM 출력에 대응합니다. 이 출력은 앞으로 탑재 장치 제어 분류 (6)의 출력 1을 업데이트합니다.

제어 분류 6은 코드에서 정의한 그대로 필요합니다(빠져있음!):

  • Add actuator_controls_6 to the TOPICS definition in /msg/actuator_controls.msg:
    1. # TOPICS actuator_controls actuator_controls_0 actuator_controls_1 actuator_controls_2 actuator_controls_3 actuator_controls_6
  • 동일한 파일에서 NUM_ACTUATOR_CONTROL_GROUPS 값을 7로 바꾸십시오.
  • Subscribe to the additional control group in the output library (/src/lib/mixer_module/mixer_module.cpp#L52) in the MixingOutput constructor. 대략 다음과 같습니다:
    1. {&interface, ORB_ID(actuator_controls_0)},
    2. {&interface, ORB_ID(actuator_controls_1)},
    3. {&interface, ORB_ID(actuator_controls_2)},
    4. {&interface, ORB_ID(actuator_controls_3)},
    1. {&interface, nullptr},
    2. {&interface, nullptr},
    3. {&interface, ORB_ID(actuator_controls_6)},

분류 6번의 출력은 액츄에이터 제어 분류 6번과 동작합니다. 우선 퍼블리케이션 객체를 만들어야합니다. 이 과정은 PX4 모듈을 초기화할 때 일어납니다(이 반복 규칙을 이미 사용한 곳을 살펴보십시오):

  1. uORB::Publication<actuator_controls_s> _actuator_controls_pub{ORB_ID(actuator_controls_6)};

그 다음 첫 메시지를 내보내야합니다:

  1. actuator_controls_s _act_controls{};
  2. _act_controls.timestamp = hrt_absolute_time();
  3. // set the first output to 50% positive (this would rotate a servo halfway into one of its directions)
  4. _act_controls.control[0] = 0.5f;
  5. _actuator_controls_pub.publish(_act_controls);