当前位置: 首页> 教育> 就业 > ArduPilot二次开发零基础教程

ArduPilot二次开发零基础教程

时间:2025/7/11 9:31:30来源:https://blog.csdn.net/qq_38768959/article/details/141223597 浏览次数:0次

文章目录

  • 前言
  • 一、概述
  • 二、开发环境搭建
  • 三、多旋翼MAVROS自主控制接口
  • 四、无人船(车)MAVROS自主控制接口
  • 五、二次开发基础
  • 六、控制LED灯
  • 七、自定义串口驱动
  • 八、Guided控制接口
  • 九、输出自定义PWM信号
  • 十、添加自定义MAVLINK消息和QGC通信
    • 1、添加消息定义
    • 2、添加消息发送
    • 3、QGC接收消息
    • 4、测试
  • 十一、自定义日志
  • 十二、自定义参数
    • 1、修改Parameters.h
    • 2、修改Parameters.cpp
    • 3、修改config.h
    • 4、添加打印
    • 5、测试

前言

ArduPilot是一个多功能和开源的自动驾驶系统,支持多种车辆类型:多旋翼、传统直升机、固定翼飞机、船只、潜水器、无人车等。其源代码是由一大群专业人士和爱好者开发。
官方wiki:
https://ardupilot.org/ardupilot/
https://ardupilot.org/dev/

本教程主要是讲解基于ArduPilot固件的二次开发,适用于没有任何相关开发经验的朋友。

硬件:
超维USV-M系列无人船
pix2.4.8飞控

软件:
ArduPilot 4.4
QGC4.2

ArduPilot二次开发零基础教程(一):概述

课程内容暂时包括下面这些,后面有空了会继续补充

一、概述

二、开发环境搭建

文档地址:
https://blog.csdn.net/qq_38768959/article/details/131133686?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22131133686%22%2C%22source%22%3A%22qq_38768959%22%7D

三、多旋翼MAVROS自主控制接口

源码地址:
https://gitee.com/Mbot_admin/hyper-drone.git

四、无人船(车)MAVROS自主控制接口

源码地址:
https://gitee.com/Mbot_admin/hyper-drone.git

先下载源码:

git clone https://gitee.com/Mbot_admin/hyper-drone.git

然后编译

cd hyper-drone/
source compile.sh 

然后启动仿真,在ardupilot/Rover目录下执行:

../Tools/autotest/sim_vehicle.py -f rover

在这里插入图片描述

打开仿真后,新建apm.launch如下:

<launch><!-- vim: set ft=xml noet : --><!-- example launch script for ArduPilot based FCU's --><arg name="fcu_url" default="udp://127.0.0.1:14551@14555" /><arg name="gcs_url" default="" /><arg name="tgt_system" default="1" /><arg name="tgt_component" default="1" /><arg name="log_output" default="screen" /><arg name="fcu_protocol" default="v2.0" /><arg name="respawn_mavros" default="false" /><include file="$(find mavros)/launch/node.launch"><arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" /><arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" /><arg name="fcu_url" value="$(arg fcu_url)" /><arg name="gcs_url" value="$(arg gcs_url)" /><arg name="tgt_system" value="$(arg tgt_system)" /><arg name="tgt_component" value="$(arg tgt_component)" /><arg name="log_output" value="$(arg log_output)" /><arg name="fcu_protocol" value="$(arg fcu_protocol)" /><arg name="respawn_mavros" value="$(arg respawn_mavros)" /></include>
</launch>

然后启动apm.launch

roslaunch apm.launch

启动成功后如下:
在这里插入图片描述
然后启动guided控制节点:
在~/hyper-drone工作空间路径下打开终端执行:

source devel/setup.bash
rosrun apm_commd apm_commd_Rover

执行成功后打印如下:
在这里插入图片描述
仿真中的无人船(车)会自动切换到Guided模式,然后按指令自主的运动
在这里插入图片描述

五、二次开发基础

六、控制LED灯

七、自定义串口驱动

八、Guided控制接口

九、输出自定义PWM信号

十、添加自定义MAVLINK消息和QGC通信

1、添加消息定义

在下面的文件添加自定义消息的xml定义
请添加图片描述
我这里添加如下:

   <message id="12000" name="SENSOR_MESSAGE"><description>xj.</description><field type="int32_t" name="unuse1" units="degC">Temperature.</field><field type="float" name="depth" units="m">depth.</field><field type="float" name="unuse2" units="cA">Current.</field><field type="float" name="unuse3" units="mAh">Total current.</field><field type="float" name="unuse4" units="rpm">RPM (eRPM).</field><field type="float" name="unuse5">count of telemetry packets received (wraps at 65535).</field></message>

在这里插入图片描述
然后编译固件,会生成相应的消息头文件
请添加图片描述

2、添加消息发送

修改ap_message.h
添加MSG_TEST,上面的逗号不要忘记
请添加图片描述
修改libraries/GCS_MAVLink/GCS.h
添加

void send_depth() const;

在这里插入图片描述

修改libraries/GCS_MAVLink/GCS_Common.cpp
添加:

{ MAVLINK_MSG_ID_SENSOR_MESSAGE, MSG_TEST},

在这里插入图片描述
添加:

 do_try_send_message(MSG_TEST);

在这里插入图片描述
添加:

void GCS_MAVLINK::send_depth() const
{//   gcs().send_text(MAV_SEVERITY_INFO,"test");
mavlink_msg_sensor_message_send(chan, 5,5,5,5,5,5);
}

在这里插入图片描述
添加:

case MSG_TEST:send_depth();break;

在这里插入图片描述

3、QGC接收消息

修改下面的xml文件,加上apm里同样的消息,然后用mavgen生成消息库替换掉原来的库,再重新编译QGC即可。
请添加图片描述

4、测试

下载好固件,重新编译地面站。可以看到地面站能显示接收到的自定义数据。
请添加图片描述

十一、自定义日志

十二、自定义参数

本教程是根据apm官网wiki操作的,也可以直接参考官方教程

1、修改Parameters.h

修改Parameters.h,添加如下:

k_param_my_new_parameter,

在这里插入图片描述

AP_Int16        my_new_parameter;  

在这里插入图片描述

2、修改Parameters.cpp

// @Param: MY_NEW_PARAMETER
// @DisplayName: My New Parameter
// @Description: A description of my new parameter goes here
// @Range: -32768 32767
// @User: Advanced
GSCALAR(my_new_parameter, "MY_NEW_PARAMETER", MY_NEW_PARAMETER_DEFAULT),

在这里插入图片描述

3、修改config.h

#ifndef MY_NEW_PARAMETER_DEFAULT# define MY_NEW_PARAMETER_DEFAULT      100     // default value for my new parameter
#endif

在这里插入图片描述

4、添加打印

经过前三步,参数已经添加到固件了,这一步就是调用参数并打印到地面站
修改Rover.h

void my_test();

在这里插入图片描述
修改Rover.cpp

SCHED_TASK(my_test,             1,     75,  84),

在这里插入图片描述

void Rover::my_test()
{gcs().send_text(MAV_SEVERITY_INFO,"%d",(int16_t)g.my_new_parameter);
}

在这里插入图片描述

5、测试

编译烧录到飞控,然后连上地面站
可以在参数列表里搜索到参数
在这里插入图片描述
地面站会实时打印当前的参数值
在这里插入图片描述

关键字:ArduPilot二次开发零基础教程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: