我正在使用PX4固件(最后一个)和JmavSim作为模拟器。 我已启用UDP端口
INFO [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 14570 remote port 14550
INFO [mavlink] mode: Onboard, data rate: 4000000 B/s on udp port 14580 remote port 14540
我在这里找到了一个有趣的nodejs项目: https://github.com/kvenux/nodegcs
使用此库解码mavlink消息
https://github.com/omcaree/node-mavlink#readme
,并且我尝试使用dgram库(而不是“ net”)重写它,以便使用UDP连接。
它似乎可以很好地用作数据列表器。
我创建套接字(此处为connection_port:14570):
mav_port_receive = dgram.createSocket("udp4")
mav_port_receive.bind( connection_port,connection_path);
mav_parser.on( 'ready', function () {
mav_port_receive.on("message", (msg, rinfo) => {
if(msg[0]!= 0 && msg[1]!= 7){
var radio_status = {
rssi: parseInt(msg[2]),
};
}
mav_parser.parse(msg);
});
..
}
但是当我尝试使用此代码发送命令时 ->此处端口:14550
mav_parser.createMessage("COMMAND_LONG", {
"param1": param1,
"param2": param2,
"param3": param3,
"param4": param4,
"param5": param5,
"param6": param6,
"param7": param7,
"command": command,
"target_system":1,
"target_component": 1,
"confirmation": confirmation
},
function (message) {
mav_port_receive.send(message.buffer, 0, message.buffer.length, PORT, HOST, function(err, bytes) {
if (err) {
LOG(err)
}
});
return;
});
}
它在px4控制台中返回一个错误
"WARN [mavlink] ignoring CMD with same SYS/COMP (1/1)"
我试图改变它创建缓冲区的方式,但是问题仍然存在。 我尝试使用不同的数值来更改““ target_system”:1,“ target_component”:1“,但它什么也不做(甚至没有消息错误)
我尝试使用其他udp套接字(一个新的)...同样的问题
即使将基本命令用作“ arm”,它也无法工作并返回相同的错误。
function port_send_message(message) {
mav_port_receive.send(message.buffer, 0, message.buffer.length, PORT, HOST, function(err, bytes) {
if (err) throw err;
// mav_port_send.close();
});
return;
}
你能帮我解决吗?