MAVLink C# 控制APM输出的方法

追客1983 2016-08-01 10:14:12
自从接触MAVLink以来,就奔着用C#编程来控制APM等飞控的输出,捣鼓了近一个月终于有点结果,希望本文对于大家有点用处。
我的程序是基于的MAVLink地面站软件之一的MissionPlanner源码中附带的SimpleExample简单例子扩展来的。
我的环境是WIN7 VS2012
这个SimpleExample的例子编译第一次是通不过的,因为这个例子用的命令和新的MAVLink库函数不匹配,有几个命令名字都改了,可是这个例子却没改,所以需要在编译出错后把有问题的命令逐一改正过来,其实名字改动并不大,你把有问题的命令选择后直接打“.”C#会自动让你选择已经能够使用的命令,选个跟原来命令名字差不多的就行。

注意:这个方法只能控制APM飞控5-8的输出,1-4的输出不能用此方法改变!
SimpleExample里面关于端口连接和数据包传输大家可以自己看看,比较简单。
本文重点介绍控制输出的代码:

private void but_armdisarm_Click(object sender, EventArgs e)\\这个是例子中自带的解锁锁定命令发送
{
MAVLink.mavlink_command_long_t req = new MAVLink.mavlink_command_long_t();

req.target_system = 1;
req.target_component = 1;


req.command = (ushort)MAVLink.MAV_CMD.COMPONENT_ARM_DISARM;\\锁定解锁命令


req.param1 = armed ? 0 : 1;
armed = !armed;

/*
req.param2 = p2;
req.param3 = p3;
req.param4 = p4;
req.param5 = p5;
req.param6 = p6;
req.param7 = p7;
*/


byte[] packet = mavlink.GenerateMAVLinkPacket10 (MAVLink.MAVLINK_MSG_ID.COMMAND_LONG, req);


serialPort1.Write(packet, 0, packet.Length);


try
{
var ack = readsomedata<MAVLink.mavlink_command_ack_t>(sysid, compid);
if (ack.result == (byte)MAVLink.MAV_RESULT.ACCEPTED)
{


}
}
catch
{
}
}

private void button1_Click(object sender, EventArgs e)
{

int a1 = Convert.ToInt16(numericUpDown1.Value);\\输出通道选择,一般在5-8端口,1-4设了也不会有反应。
int a2 = Convert.ToInt16(textBox1.Text);\\输出值设定一般在1000-2000之间。


MAVLink.mavlink_command_long_t req = new MAVLink.mavlink_command_long_t();


req.target_system = 1;
req.target_component = 0;
req.command = (ushort)MAVLink.MAV_CMD.DO_SET_SERVO;\\设置舵机PWM值
req.param1 = a1;
req.param2 = a2;
//req.param3 = 0;
//req.param4 = 0;
//req.param5 = 0;
//req.param6 = 0;
//req.param7 = 0;


byte[] packet = mavlink.GenerateMAVLinkPacket10(MAVLink.MAVLINK_MSG_ID.COMMAND_LONG, req);\\命令打包


serialPort1.Write(packet,0, packet.Length);\\发送命令


try
{
var ack = readsomedata<MAVLink.mavlink_command_ack_t>(sysid, compid);
if (ack.result == (byte)MAVLink.MAV_RESULT.ACCEPTED)
{


}
}
catch
{
}

}

有了上面这个就可以控制5-8输出通道的PWM值了,有空大家可以试试,要是哪位高手知道怎么控制1-4输出的值希望不吝赐教!
...全文
327 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
debug_1 2020-07-20
  • 打赏
  • 举报
回复
楼主,设置的pwm值是脉冲宽度时间 还是占空比?
znr1995 2017-03-09
  • 打赏
  • 举报
回复
如果要发送命令,需要建立连接吗,楼主

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧