MAVLink软件管理
此页面显示了所有可用的MAVLink软件管理功能 AnyMath .
|
使用MAVLink软件管理功能 AnyMath ,按照在给出的说明 文章. 之后,执行:
接下来,您需要创建一个Mavlink对象,该对象将用于与MAVLink设备进行交互。:
构造函数可以使用现有连接的句柄调用。 然后对象将使用此连接而不创建新连接。:
描述符由函数返回 |
方法 马夫林克
#
Main.EngeeDeviceManager.Devices.MAVLINK.close — Method
mavlink.close()
关闭 MAVLink 连接并停止自动发送 HEARTBEAT 消息。
示例
mavlink = MAVLINK.Mavlink()
desc = mavlink.connect("udp", "127.0.0.1", 14551, 255, 190)
# ... 消息交流 ...
mavlink.close()
#
Main.EngeeDeviceManager.Devices.MAVLINK.connect — Method
mavlink.connect(conn_type, host, port, source_system, source_component)
建立基于 TCP 或 UDP 的 MAVLink 连接,启动 HEARTBEAT 消息的自动发送,并返回连接描述符。
参数
-
conn_type::String:传输类型----"tcp"或"udp"。 -
host::String: MAVLink 设备的 IP 地址或主机名。 -
port::Int64: 设备的网络端口。 -
source_system::Int64: 代表该节点的系统标识符(system ID)。有效范围为1至255。 -
source_component::Int64:用于标识节点的组件标识符(component ID)。有效范围为1至255。
返回值
desc::Int64 :连接描述符。 将其传递给MAVLINK.Mavlink(desc) 的构造函数,以便从另一个对象中使用同一连接。
示例
using Main.EngeeDeviceManager.Devices.MAVLINK
mavlink = MAVLINK.Mavlink()
desc = mavlink.connect("udp", "127.0.0.1", 14551, 255, 190)
println("Дескриптор соединения: ", desc)
#
Main.EngeeDeviceManager.Devices.MAVLINK.get_latest_message — Method
mavlink.get_latest_message(message_type)
返回指定类型的最新接收消息:该函数始终返回该类型的最新消息,而非按接收顺序的下一条消息(如recv 所示)。如果尚未收到该类型的消息,则返回空字典。
参数
message_type::String :消息类型的名称,例如"SIMSTATE" 。
返回值
Dict{String, ...} :"字段名 → 值" 形式的字典,例如Dict("lat" => -353632610, "lng" => 1491652370) 。 如果该类型的消息尚未到达,则返回空字典。
示例
hb = mavlink.get_latest_message("HEARTBEAT")
if !isempty(hb)
println("Тип аппарата: ", hb["type"])
end
#
Main.EngeeDeviceManager.Devices.MAVLINK.get_latest_messages — Method
mavlink.get_latest_messages()
返回接收缓冲区中累积的所有类型的最新接收消息:对于每种类型,返回该类型最近接收的一条消息。
返回值
Dict{String, Dict{String, ...}} :字典"`消息类型名称 → 字段字典`",例如Dict("SIMSTATE" => Dict("lat" => ..., "lng" => ...), ...) 。 如果尚未接收任何消息,则返回空字典。
示例
msgs = mavlink.get_latest_messages()
println("Типы принятых сообщений: ", collect(keys(msgs)))
#
Main.EngeeDeviceManager.Devices.MAVLINK.recv — Method
mavlink.recv(timeout)
mavlink.recv(timeout, async_rpc)
从接收缓冲区中等待下一条MAVLink消息,并返回元组(message_type, fields_json) ----包含消息类型的名称及其字段(JSON格式)。消息按到达顺序(FIFO)返回: 每次调用都会从缓冲区中取出最早的尚未读取的消息。如果在等待期间未收到消息,元组的两个元素均为空:返回("", "") 。
参数
-
timeout::Float64:等待消息的最大时间(单位:秒)。 -
async_rpc::Bool = false:当设置为true时,函数不会等待请求完成,而是立即返回控制权。
返回值
(message_type::String, fields_json::String) :消息类型的名称及其字段(JSON格式)。可通过JSON3.read 方便地解析这些字段。如果在timeout 内未收到消息,则返回("", "") 。
示例
using JSON3
msg_type, fields_json = mavlink.recv(1.0)
if !isempty(msg_type)
println("Принято сообщение: ", msg_type)
fields = JSON3.read(fields_json, Dict{String, Any})
println("Поля: ", fields)
end
#
Main.EngeeDeviceManager.Devices.MAVLINK.send — Method
mavlink.send(message_type, fields)
mavlink.send(message_type, fields, async_rpc)
发送指定类型的MAVLink消息。消息发送后不等待响应:该函数不会等待接收方的确认。
参数
-
message_type::String: 消息名称,例如"GPS_INPUT"(不区分大小写)。 -
fields::Dict{String, ...}: 消息字段,采用"`名称 → 值`"的字典形式。未传入的字段将使用默认值填充。 -
async_rpc::Bool = false:发送模式。当设置为true时,该函数不会等待请求完成,而是立即返回控制权。
允许的值类型fields
Union{
Int64, Int32, UInt64, UInt32, Float64, Bool, String,
Vector{Int64}, Vector{Int32}, Vector{UInt64}, Vector{UInt32},
Vector{Float64}, Vector{Bool}, Vector{String},
}
每条消息的字段名称和类型详见 此页面。
示例:
MavlinkField = Union{
Int64, Int32, UInt64, UInt32, Float64, Bool, String,
Vector{Int64}, Vector{Int32}, Vector{UInt64}, Vector{UInt32},
Vector{Float64}, Vector{Bool}, Vector{String},
}
mavlink.send("HEARTBEAT", Dict{String, MavlinkField}(
"type" => 6, # MAV_TYPE_GCS
"autopilot" => 8, # MAV_AUTOPILOT_INVALID
"base_mode" => 0,
"custom_mode" => 0,
"system_status" => 4, # MAV_STATE_ACTIVE
"mavlink_version" => 3, # MAVLink 2
))