自從接觸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輸出的值希望不吝賜教!
uj5u.com熱心網友回復:
如果要發送命令,需要建立連接嗎,樓主uj5u.com熱心網友回復:
樓主,設定的pwm值是脈沖寬度時間 還是占空比?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/21125.html
標籤:C#
