px4 实现发送自定义mavlink协议消息解锁飞控板以及切换飞行模式

10 篇文章 3 订阅
10 篇文章 0 订阅

 

原理:通过mavlink控制台可以执行命令,在循环中调用控制台指令的函数就行了

查阅commander文件下, 所有模式切换都在commder_main函数

int commander_main(int argc, char *argv[])
{
...
    if (!strcmp(argv[1], "start")) {

    ...
    }
    if (!strcmp(argv[1], "stop")) {
    ...
    }
...
}

这个函数入参指令argv[]就是模式切换的指令,这个主函数是从底层调用的,入参也是在操作系统那一层判断的,但在函数中使用在if判断入参的指令,判断完成后会调用它的执行函数,这样,我们可以从一个循环中,去订阅mavlink消息,直接调用执行哪一个模式的函数就实现了,比如解锁和上锁的指令

if (!strcmp(argv[1], "arm")) {
		if (TRANSITION_CHANGED != arm_disarm(true, &mavlink_log_pub, "command line")) {
			warnx("arming failed");
		}
		return 0;
	}
if (!strcmp(argv[1], "disarm")) {
		if (TRANSITION_DENIED == arm_disarm(false, &mavlink_log_pub, "command line")) {
			warnx("rejected disarm");
		}
		return 0;
	}

可以从run函数中,while循环里我们订阅一个uorb消息.检查此消息是否更新(如何添加新的mavlink消息和urob消息看前几篇博客)

这样去写

orb_check(_missle_ctrl_sub,&updated);
		if (updated)
		{
			warnx("_missle_ctrl.cmd_id:%d",_missle_ctrl.cmd_id);
			orb_copy(ORB_ID(missle_control), _missle_ctrl_sub, &_missle_ctrl);
			if(_missle_ctrl.cmd_id == 0)
			{
				if (TRANSITION_CHANGED != arm_disarm(true, &mavlink_log_pub, "command line")) {
					warnx("arming failed");
				}
			}
			if(_missle_ctrl.cmd_id == 7)
			{
				if (TRANSITION_DENIED == arm_disarm(false, &mavlink_log_pub, "command line")) {
					warnx("rejected disarm");
				}
			}
		}

只要我发送过来的_missle_ctrl.cmd_id 的值等于 0 就会执行解锁指令,等与7就会执行上锁指令

同理,这样可以设置所有的飞行模式

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值