怪不得普罗米修斯解锁和切offboard是通过调用服务实现的(输入999的方式),PX4官方的offboard示例代码也是通过调用服务切offboard的,我之前还好奇服务是写在哪里的,原来是MAVROS的!!!!
找了下,确实就是的。
https://gitee.com/maxibooksiyi/mavros/blob/master/mavros_msgs/srv/SetMode.srv
见下面这篇博文
https://blog.csdn.net/sinat_16643223/article/details/114060304
转载自:https://blog.csdn.net/zouxu634866/article/details/104112964
mavros的常用服务介绍
总被蚊子叮的小旭 2020-01-30 11:13:21 498 收藏 4
最后发布:2020-01-30 11:13:21首次发布:2020-01-30 11:13:21
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zouxu634866/article/details/104112964
版权
在mavros中,最常用的服务就两个,一个是解锁,还有一个就是模式切换。当然还有其他的服务,比如通过mavros修改航点信息,但是不常用,所以下面只介绍解锁和模式切换,这在前面的博客offboard源码解析里面已经介绍了。
这两种服务的用法参考之前的博客,这里不再赘述,这里补充一下模式切换服务里面可以切换哪些模式,除了offboard模式外还有那些模式。
这里需要用到mavros的源码:位置:
/home/zouxu/mavros_ws/src/mavros/mavros/src/lib
当然,这个位置的前提是你在安装mavros时用到了源码安装方式,在电脑上存在mavros的工作空间mavros_ws,如果你没有这个,可以在github上下载源码也还是可以的。
我们打开目录下的:uas_stringify.cpp
它里面有针对apm固件的模式,我们只看px4的固件部分:
//! PX4 custom mode -> string
static const cmode_map px4_cmode_map{
{
{ px4::define_mode(px4::custom_mode::MAIN_MODE_MANUAL), "MANUAL" },
{ px4::define_mode(px4::custom_mode::MAIN_MODE_ACRO), "ACRO" },
{ px4::define_mode(px4::custom_mode::MAIN_MODE_ALTCTL), "ALTCTL" },
{ px4::define_mode(px4::custom_mode::MAIN_MODE_POSCTL), "POSCTL" },
{ px4::define_mode(px4::custom_mode::MAIN_MODE_OFFBOARD), "OFFBOARD" },
{ px4::define_mode(px4::custom_mode::MAIN_MODE_STABILIZED), "STABILIZED" },
{ px4::define_mode(px4::custom_mode::MAIN_MODE_RATTITUDE), "RATTITUDE" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_MISSION), "AUTO.MISSION" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_LOITER), "AUTO.LOITER" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_RTL), "AUTO.RTL" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_LAND), "AUTO.LAND" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_RTGS), "AUTO.RTGS" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_READY), "AUTO.READY" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_TAKEOFF), "AUTO.TAKEOFF" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_FOLLOW_TARGET), "AUTO.FOLLOW_TARGET" },
{ px4::define_mode_auto(px4::custom_mode::SUB_MODE_AUTO_PRECLAND), "AUTO.PRECLAND" },
}};
后面所列出来的就是可以切换的模式。