!REDIRECT “https://docs.px4.io/master/ko/middleware/modules_communication.html

모듈 참조: 통신

frsky_telemetry

Source: drivers/telemetry/frsky_telemetry

FrSky 통신을 지원합니다. D, S.PORT 프로토콜을 자동으로 감지합니다.

Usage

  1. frsky_telemetry <command> [arguments...]
  2. Commands:
  3. start
  4. [-d <val>] Select Serial Device
  5. values: <file:dev>, default: /dev/ttyS6
  6. [-t <val>] Scanning timeout [s] (default: no timeout)
  7. default: 0
  8. [-m <val>] Select protocol (default: auto-detect)
  9. values: sport|sport_single|sport_single_invert|dtype, default:
  10. auto
  11. stop
  12. status

mavlink

Source: modules/mavlink

설명

이 모듈은 시리얼 통신이나 UDP 통신에 사용할 수 있는 MAVLink 프로토콜 구현체입니다. uORB로 시스템과 통신합니다. 일부 메시지는 모듈에서 직접 처리합니다(예: mission protocol), 다른 메세지는 uORB로 처리합니다(예: vehicle_command).

기체 자세와 같은 주기 메세지는 일정 속도로 내보냅니다. mavlink 인스턴스를 시작할 때, 자체 속도로 송수신하는 활성 스트림을 정의한 모드를 지정할 수 있습니다. 실행 인스턴스에 대해 mavlink stream 명령으로 스트림을 설정할 수 있습니다.

직렬 통신 장치나 네트워크 포트에 연결한 다중 독립 인스턴스가 있을 수 있습니다.

구현

송신 스레드, 수신 스레드 각각 하나씩 2개로 구현했습니다. 송신 스레드는 일정한 속도로 실행하며, 설정 속도(-r)보다 대역폭이 높거나, 물리 연결 회선이 포화 상태가 되면 스트림 전송 속도를 동적으로 줄입니다. mavlink status 명령러를 통해 확인할 수 있습니다. rate mult가 1보다 작은지 보세요.

Careful: 일부 데이터는 양쪽 스레드에서 접근하고 수정합니다. 코드를 바꾸거나 기능을 확장할 경우 경쟁 상태(race condition)로의 진입과 데이터 유실을 피하기 위한 검토가 필요합니다.

예제

ttyS1에 전송율 초당 921600비트, 최대 전송속도 80kB/s로 mavlink를 시작합니다.

  1. mavlink start -d /dev/ttyS1 -b 921600 -m onboard -r 80000

UDP 포트 14556에 HIGHRES_IMU 메시지를 초당 50번 전송하도록 설정하며 mavlink를 시작합니다.

  1. mavlink start -u 14556 -r 1000000
  2. mavlink stream -u 14556 -s HIGHRES_IMU -r 50

Usage

  1. mavlink <command> [arguments...]
  2. Commands:
  3. start Start a new instance
  4. [-d <val>] Select Serial Device
  5. values: <file:dev>, default: /dev/ttyS1
  6. [-b <val>] Baudrate (can also be p:<param_name>)
  7. default: 57600
  8. [-r <val>] Maximum sending data rate in B/s (if 0, use baudrate / 20)
  9. default: 0
  10. [-u <val>] Select UDP Network Port (local)
  11. default: 14556
  12. [-o <val>] Select UDP Network Port (remote)
  13. default: 14550
  14. [-t <val>] Partner IP (broadcasting can be enabled via MAV_BROADCAST
  15. param)
  16. default: 127.0.0.1
  17. [-m <val>] Mode: sets default streams and rates
  18. values:
  19. custom|camera|onboard|osd|magic|config|iridium|minimal|extvsisi
  20. on, default: normal
  21. [-n <val>] wifi/ethernet interface name
  22. values: <interface_name>
  23. [-c <val>] Multicast address (multicasting can be enabled via
  24. MAV_BROADCAST param)
  25. values: Multicast address in the range
  26. [239.0.0.0,239.255.255.255]
  27. [-f] Enable message forwarding to other Mavlink instances
  28. [-w] Wait to send, until first message received
  29. [-x] Enable FTP
  30. [-z] Force hardware flow control always on
  31. [-Z] Force hardware flow control always off
  32. stop-all Stop all instances
  33. status Print status for all instances
  34. [streams] Print all enabled streams
  35. stream Configure the sending rate of a stream for a running instance
  36. [-u <val>] Select Mavlink instance via local Network Port
  37. [-d <val>] Select Mavlink instance via Serial Device
  38. values: <file:dev>
  39. -s <val> Mavlink stream to configure
  40. -r <val> Rate in Hz (0 = turn off, -1 = set to default)
  41. boot_complete Enable sending of messages. (Must be) called as last step in
  42. startup script.

micrortps_client

Source: modules/micrortps_bridge/micrortps_client

Usage

  1. micrortps_client <command> [arguments...]
  2. Commands:
  3. start
  4. [-t <val>] Transport protocol
  5. values: UART|UDP, default: UART
  6. [-d <val>] Select Serial Device
  7. values: <file:dev>, default: /dev/ttyACM0
  8. [-b <val>] Baudrate (can also be p:<param_name>)
  9. default: 460800
  10. [-p <val>] Poll timeout for UART in ms
  11. [-l <val>] Limit number of iterations until the program exits
  12. (-1=infinite)
  13. default: 10000
  14. [-w <val>] Time in ms for which each iteration sleeps
  15. default: 1
  16. [-r <val>] Select UDP Network Port for receiving (local)
  17. default: 2019
  18. [-s <val>] Select UDP Network Port for sending (remote)
  19. default: 2020
  20. [-i <val>] Select IP address (remote)
  21. values: <x.x.x.x>, default: 127.0.0.1
  22. [-f] Activate UART link SW flow control
  23. [-h] Activate UART link HW flow control
  24. [-v] Add more verbosity
  25. stop
  26. status

uorb

Source: modules/uORB

설명

uORB is the internal pub-sub messaging system, used for communication between modules.

It is typically started as one of the very first modules and most other modules depend on it.

구현

No thread or work queue is needed, the module start only makes sure to initialize the shared global state. Communication is done via shared memory. The implementation is asynchronous and lock-free, ie. a publisher does not wait for a subscriber and vice versa. This is achieved by having a separate buffer between a publisher and a subscriber.

The code is optimized to minimize the memory footprint and the latency to exchange messages.

The interface is based on file descriptors: internally it uses read, write and ioctl. Except for the publications, which use orb_advert_t handles, so that they can be used from interrupts as well (on NuttX).

Messages are defined in the /msg directory. They are converted into C/C++ code at build-time.

If compiled with ORB_USE_PUBLISHER_RULES, a file with uORB publication rules can be used to configure which modules are allowed to publish which topics. This is used for system-wide replay.

예제

Monitor topic publication rates. Besides top, this is an important command for general system inspection:

  1. uorb top

Usage

  1. uorb <command> [arguments...]
  2. Commands:
  3. start
  4. status Print topic statistics
  5. top Monitor topic publication rates
  6. [-a] print all instead of only currently publishing topics with
  7. subscribers
  8. [-1] run only once, then exit
  9. [<filter1> [<filter2>]] topic(s) to match (implies -a)