Modules Reference: Communication
frsky_telemetry
Source: drivers/telemetry/frsky_telemetry
FrSky Telemetry support. Auto-detects D or S.PORT protocol.
Usage
frsky_telemetry <command> [arguments...]
Commands:
start
[-d <val>] Select Serial Device
values: <file:dev>, default: /dev/ttyS6
stop
status
mavlink
Source: modules/mavlink
Description
This module implements the MAVLink protocol, which can be used on a Serial link or UDP network connection. It communicates with the system via uORB: some messages are directly handled in the module (eg. mission protocol), others are published via uORB (eg. vehicle_command).
Streams are used to send periodic messages with a specific rate, such as the vehicle attitude.
When starting the mavlink instance, a mode can be specified, which defines the set of enabled streams with their rates.
For a running instance, streams can be configured via mavlink stream
command.
There can be multiple independent instances of the module, each connected to one serial device or network port.
Implementation
The implementation uses 2 threads, a sending and a receiving thread. The sender runs at a fixed rate and dynamically
reduces the rates of the streams if the combined bandwidth is higher than the configured rate (-r
) or the
physical link becomes saturated. This can be checked with mavlink status
, see if rate mult
is less than 1.
Careful: some of the data is accessed and modified from both threads, so when changing code or extend the functionality, this needs to be take into account, in order to avoid race conditions and corrupt data.
Examples
Start mavlink on ttyS1 serial with baudrate 921600 and maximum sending rate of 80kB/s:
mavlink start -d /dev/ttyS1 -b 921600 -m onboard -r 80000
Start mavlink on UDP port 14556 and enable the HIGHRES_IMU message with 50Hz:
mavlink start -u 14556 -r 1000000
mavlink stream -u 14556 -s HIGHRES_IMU -r 50
Usage
mavlink <command> [arguments...]
Commands:
start Start a new instance
[-d <val>] Select Serial Device
values: <file:dev>, default: /dev/ttyS1
[-b <val>] Baudrate
default: 57600
[-r <val>] Maximum sending data rate in B/s (if 0, use baudrate / 20)
default: 0
[-u <val>] Select UDP Network Port (local)
default: 14556
[-o <val>] Select UDP Network Port (remote)
default: 14550
[-t <val>] Partner IP (broadcasting can be enabled via MAV_BROADCAST
param)
default: 127.0.0.1
[-m <val>] Mode: sets default streams and rates
values: custom|camera|onboard|osd|magic|config|iridium|minimal,
default: normal
[-f] Enable message forwarding to other Mavlink instances
[-w] Wait to send, until first message received
[-x] Enable FTP
[-z] Force flow control always on
stop-all Stop all instances
status Print status for all instances
[streams] Print all enabled streams
stream Configure the sending rate of a stream for a running instance
[-u <val>] Select Mavlink instance via local Network Port
default: 0
[-d <val>] Select Mavlink instance via Serial Device
values: <file:dev>
-s <val> Mavlink stream to configure
-r <val> Rate in Hz (0 = turn off, -1 = set to default)
boot_complete Enable sending of messages. (Must be) called as last step in
startup script.
micrortps_client
Source: modules/micrortps_bridge/micrortps_client
Usage
micrortps_client <command> [arguments...]
Commands:
start
[-t <val>] Transport protocol
values: UART|UDP, default: UART
[-d <val>] Select Serial Device
values: <file:dev>, default: /dev/ttyACM0
[-b <val>] Baudrate
default: 460800
[-p <val>] Poll timeout for UART in ms
default: 1
[-u <val>] Interval in ms to limit the update rate of all sent topics
(0=unlimited)
default: 0
[-l <val>] Limit number of iterations until the program exits
(-1=infinite)
default: 10000
[-w <val>] Time in ms for which each iteration sleeps
default: 1
[-r <val>] Select UDP Network Port for receiving (local)
default: 2019
[-s <val>] Select UDP Network Port for sending (remote)
default: 2020
stop
status
uorb
Source: modules/uORB
Description
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.
Implementation
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.
Examples
Monitor topic publication rates. Besides top
, this is an important command for general system inspection:
uorb top
Usage
uorb <command> [arguments...]
Commands:
start
status Print topic statistics
top Monitor topic publication rates
[-a] print all instead of only currently publishing topics
[<filter1> [<filter2>]] topic(s) to match (implies -a)