
ArduPilot
文章平均质量分 57
Chasing中的小强
自信悠然,不争,不端,实事求是
展开
-
Ardupilot动力分配-混控部分分析
首先从copter.cpp中的fast_loop开始进入到motors_output()函数中上述函数中完成的有一些解锁检查, 进入之后如下图所示这个函数中完成由τ\tauτ , thrust到 PWM的输出转换过程首先在output_armed_stabilizing()函数中完成系数因子* τ\tauτ, 具体代码为for (i = 0; i < AP_MOTORS_MAX_NUM_MOTORS; i++) { if (motor_enabled[i]) {原创 2022-03-29 16:01:12 · 1077 阅读 · 0 评论 -
ArduPilot-Mocap转换解析
针对小直升机在optitrack移植过程中出现的两个Bug进行解析:1)高度的控制如何实现,在直升机中,存在油门和总螺距的一起联动问题。2)在切换的瞬间,会有一个大的偏差,需要查看log并想办法修复这个问题.问题1) 解答:在loiter模式下, 摇杆的位置对应的是给定的target_climb_rate, 详见代码如下:对应语句为target_climb_rate = get_pilot_desired_climb_rate(channel_throttle->get_control_原创 2021-11-28 20:16:22 · 440 阅读 · 0 评论 -
ArduPilot之遥控器数据读取
写在前面的话:近日,有小伙伴反应在dronekit中采用channel.override没有效果,因此抽个空看了一下ardupilot代码中遥控器的读取代码。首先,遥控器的读取在copter.cpp中完成, 如下图所示:可见读取的频率为100Hz, 接着跳转进去,可以得到:再次进行跳转可得:跳转update()函数进去这个地方需要说明一下:上图画圈的地方可以看出 radio_in 来自2个地方: 1. 从mavlink消息中传送进来, 2. 从后端接口读取;下面箭头的函数则负责将 ra原创 2021-07-03 18:07:27 · 1697 阅读 · 1 评论 -
ArduPilot航点控制
新航点进去当mavlink收到一个航点消息之后,会执行下面的函数:经过一系列跳转,之后,一个比较关键的函数如下其中,对应的origin是根据当前速度,与当前位置得到的stopping_point。 destination是给进去的目标点。然后停止点会更新成新的_origin变量。开始计算位置误差一个很重要的函数,如下图所示:跳转进该函数中,上述所示表示将计算得到的target_pos 送给位置计算中,为后面的位置误差的给定值。(反馈值为当前的位置值)。而上面一句话则表示位置的计算方法原创 2021-06-25 21:53:30 · 1914 阅读 · 2 评论 -
ArduPilot 添加自定义调节参数
实际变成操作中,需要对ardupilot代码进行修改并添加对应的调试参数,这样,可以通过地面站很方便的进行修改参数。原创 2021-06-23 14:53:23 · 2177 阅读 · 0 评论 -
简易mavgcs制作
视频链接自制科研简易地面站采用的python包有mavsdk, tkinter, asyncio, threading,dronekit实现方式 tkinter制作UIUIUI界面,采用多线程实现数据的读取与显示通过mavsdk或者dronekit完成与无人机之间的通信通常mavsdk对应PX4固件友好一点,dronekit对APM代码友好一点。这次两个都用了。dronekit对mavlink协议支持的全面一些。mavsdk仅支持部分mavlink协议内容,对offboard模式比较友好。mav原创 2021-06-19 21:17:17 · 1616 阅读 · 0 评论 -
ardupilot之mavlink消息--飞控接收--单向
ardupilot程序测试-mavlink 飞控接收, dronekit自动化测试脚本原创 2021-05-31 15:58:44 · 3364 阅读 · 2 评论 -
ardupilot之mavlink消息--从飞控发出--单向
飞控采用mavlink消息进行数据的传输。普遍说法是,现有的mavlink消息几乎已经涵盖了所有你的能想象到的内容,完全可以覆盖多处需求。 无奈科研总是要定义一些新鲜玩意 ,所以总是有无法完全满足需求,需要自定义消息的时候。mavlink 消息的创建,首先在common.xml文件中找到对应的message部分,在common.xml文件的最后部分, 对应复制一个message消息,修改对应的消息ID,消息名称,消息内容,然后编译即可,生成对应的.h文件,对应的.h文件在 build/XXX/libra原创 2021-05-31 15:24:07 · 3057 阅读 · 0 评论 -
ArduPilot 添加日志文件
ArduPilot 添加日志文件。在程序的调试或者科研过程中,经常要记录所需要的变量值,一方面, 我们可以将其打印在地面站上进行查看,但是这种方式的速度比较慢(毕竟是串口传输数据,且发送太快,怕印象程序的稳定性),那么另一方式就是将所需的变量以log的方式存储起来了。注: 其实添加过程没有太复杂,完全可以参照现有程序一步一步依葫芦画瓢做出来。首先进入到主程序 Copter.cpp 中,对应找到记录log的地方,一般以 Log_Write_XXX();跳转过去在 Copter.h 中定义的原创 2021-05-29 13:38:35 · 1974 阅读 · 6 评论 -
APM代码调试知识点汇总
由于项目的需要,对ardupilot的源码进行二次开发。本文记录在二次开发中遇到的问题以及注意事项:CUAV V5 实测 apm 串口,对于姿态数据的发送和接收在200Hz的时候,是没有问题的,但是当达到250Hz及以上之后,数据传送会在很大概率出现丢包的现象,而且这还是在有线串口的情况下测试的。这点和PX4代码有点相像,尽管PX4当时是采用mavros消息的形式完成对数据的采集,但是PX4姿态环的更新频率(也就是说把mavlink消息相关姿态环的数据提升到unlimited,也就是一收到姿态数据立马原创 2021-05-16 22:23:32 · 4916 阅读 · 8 评论 -
apm-ros-optitrack初步尝试
本文记录采用ArduPilot固件,室内optitrack环境下飞行实现中遇到的一些问题原创 2021-04-24 17:12:03 · 1893 阅读 · 0 评论 -
matlab发送mavlink消息
主要介绍了通过matlab脚本实现UDP发送mavlink消息,为后面matlab计算,与Optitrack联合调试,控制无人机做准备。示例演示效果链接为 matlab通过UDP协议发送mavlink消息demo采用的github仓库为https://github.com/lustosa-leandro/matlab-mavlink添加matlab下.m文件代码为fclose(instrfindall);des = mavlink('127.0.0.1');while 1 sendH原创 2021-04-23 10:34:52 · 4858 阅读 · 3 评论 -
Ardupilot 伴飞,追击demo
视频链接如下:简单介绍:采用2个ArduPilot固件才实现的,放在不同的路径下,启动即可。注意事项:两架飞机需要采用不同的句柄。–instance=X.两架飞机需要设置不同的ID, 对应参数sysidXXX =X采用dronekit-python 分别连接上两个端口。然后通过句柄读出第一架飞机的GPS信息,并经过算法处理发送给2号飞机。...原创 2021-03-31 14:56:00 · 2216 阅读 · 0 评论 -
C语言实现mavlink库与px4通信仿真
参照网址:http://mavlink.io/en/mavgen_c/首先从github上下载对应的C_uart_interface_example,对应的github仓库网址为https://github.com/mavlink/c_uart_interface_example按照github教程,完成编译和下载。这里,他们改写了makefile文件,使得在make的时候还需要从github上面下载对应的mavlink_library_v2.对应编译的主要存在mavlink_control.cpp原创 2021-03-29 18:13:21 · 1158 阅读 · 0 评论 -
ArduPilot 代码书写规范
ardupilot中采用多线程包含有三种模式:信号量,无锁数据模式以及PX4 ORB形式原创 2020-11-30 11:12:57 · 898 阅读 · 0 评论 -
Ardupilot中的串口调试以及example学习
Ardupilot代码提供了丰富的学习历程,方便新手入门。官方网站已经给出了具体的实验步骤,我这里只是重复做了一下。首先,可以通过 ./waf list|grep 'examples' 查看对应的examples都有哪些。然后将对应的example 编译到板子之中即可。执行指令如下:./waf configure --board=Pixhawk1./waf build --target examples/UART_test --upload也可以通过sitl的方式来查看,具体如下:./waf原创 2020-11-26 22:20:35 · 2864 阅读 · 0 评论 -
烧写自定义ArduPilot到自定义的开发板
写在前面的话:本篇章内容参看《怒飞垂云》的资料。将APM固件移植到自制硬件实际操作过程中,需要如下几个步骤:先在ardupilot中的 ./waf distclean 完成清理,主要删除了build文件夹在libraries/AP_HAL_ChibiOS/hwdef中创建自己的飞控的文件夹。在文件内创建并编辑相应的硬件描述文件,其中-bl.dat表示bootloader文件,hwdef表示剩下的硬件描述文件。./waf configure --board XXXX --bootloader.原创 2020-11-23 19:43:11 · 2635 阅读 · 0 评论 -
ArduPilot-sitl中的一些操作记录
ArduPilot 这么优秀的代码,提供了一套很方便的SITL仿真开发模式。在git clone代码的时候,已经将相关的东西下载下来了。问题是如何进行使用。首先要安装mavproxy 这个软件,pymavlink --mavlink封装的python module,后面也可以采用这个脚本给仿真加上自己的程序。这点和ROS/MAVROS 的模式类似。(ROS是C++编程,多线程是没有问题的,python是伪多线程)其中指令有多点,./sim_vehicle.py --vehicle=ArduCopter原创 2020-11-16 13:14:49 · 2410 阅读 · 2 评论 -
飞控之姿态结算和姿态控制(对比)
今天了解了姿态结算部分。目前看过的飞控含有Apm,px4,国内开源飞控 正点原子,匿名飞控,小马哥飞控,以及一个不知名的飞控。Apm,px4比较优秀,毕竟很多大佬在维护。就姿态结算方面为ekf,mahony,以及互补滤波。其中互补滤波为最简单,算力消耗最小的。表示为在陀螺仪和加速度计的不同频率特性上,陀螺仪短时间内可靠,长时间有积分漂移。而加速度计z轴分量含有重力影响。然后互补特性。注意,即使在互补滤波中两个传感器的更新频率也应该不同。该方法在智能车的平衡车上在用。Mahony算法现在飞机上普遍都在用。原创 2020-06-08 16:57:48 · 925 阅读 · 0 评论 -
ArduPilot代码解读----EKF2(未完待续)
EKF2 绝对是ArduPilot 的一大亮点,28个状态量,10个输出量。如下图所示:原创 2020-05-24 14:13:01 · 3913 阅读 · 0 评论 -
ArduPilot代码学习--模式切换
引言:ArduPilot代码兼容无人机,无人车,UUV,帆船等多种vehicle,本文以Copter为例,说明代码中是如何完成模式切换的。各个模式的init首先定位在系统初始化中,即system.cpp中的 rc().init(); 执行跳转查看函数init_aux_all(); -->reset_mode_switch(); -->c->reset_mode_switch();–>read_mode_switch();void RC_Channel::read_mode_s原创 2020-05-24 11:19:24 · 6358 阅读 · 0 评论 -
ArduPilot飞行前检查——PreArm解析
ArduPilot飞行前检查 主要包括两个部分:1. 初始化中遥控器输入检查;2. 1Hz解锁前检查。附: 显示地面站信息参考文章:Ardupilot Pre-Arm安全检查程序分析1. 初始化中遥控器输入检查直接跳转进去查看函数为;bool AP_Arming_Copter::rc_calibration_checks(bool display_failure){ const RC_Channel *channels[] = { copter.channel_ro原创 2020-05-10 09:59:22 · 9926 阅读 · 0 评论 -
ArduPilot姿态环控制-----传感器初始化
首先我们假定从void AP_Vehicle::setup() 开始,这里是飞控所有初始化所在,程序位于 AP_vehicle.cpp中。找到其中的 init_ardupilot();函数,执行跳转执行跳转过程中,需要选择是机型(无人机,无人车,UUV等)。我们这里选择多旋翼,则走到了 system.cpp中。继续寻找到其中的 startup_INS_ground(); 如上图所示。然后再次跳转,如下图所得。这里跟踪定位到 ins.init(scheduler.get_loop_rat原创 2020-05-09 16:37:45 · 7170 阅读 · 0 评论 -
ArduPilot姿态控制方法解析---(倾转分离)
ArduPilot飞控因其成熟稳定,受到了大多飞控研究者的膜拜,以及大多航模玩具的青睐。但是,即使已经发展了十几年,仍有很多人对其中的控制算法和原理一知半解。本文给出了一些参考和个人见解,仅供参考。原创 2020-05-07 17:04:39 · 4480 阅读 · 2 评论 -
ArduPilot_SimpleMode和SuperSimpleMode
SimpleModeSimilar to the “care free” mode on other systems, this mode allows you to fly your copter as though it were pointed in the direction it was pointed when it was armed regardless of its curre...原创 2020-05-06 11:34:36 · 2533 阅读 · 0 评论 -
ArduPilot Systems Update 2020-PPT中文补丁版
主题:为国内开源出一份力量,对ArduPilot 2020堪培拉会议总纲进行中文翻译,方便国内科研人员进行研究和学习,由于本人能力有限,以下翻译仅仅代表个人意见,如有不对地方或者更好的措辞,欢迎留言或者私信,我这边进行相应修改。...原创 2020-04-25 17:05:07 · 798 阅读 · 0 评论 -
ArduPilot+mavros+gazebo+QGC联合仿真初体验
首先给出最终效果图:实现内容与PX4官网代码功能类似,四旋翼飞机自动起飞至2.5m高度,悬停一定时间,然后自主降落。记录如下几个需要注意的地方:一共使用到三个文件夹,其中第一个为源代码,第二个为参照官网下载的gazebo地图信息,第三个为ROS功能包。2.第二个gazebo地图需要在github上下载然后编译git clone https://github.com/khancyr/...原创 2020-04-12 16:06:46 · 8405 阅读 · 4 评论 -
ArduPilot源码极速下载手册(一文告别github慢速问题)
克隆项目后,默认子模块目录下无任何内容。需要在项目根目录执行如下命令完成子模块的下载:git submodule initgit submodule update或:git submodule update --init --recursive有时子模块的项目维护地址发生了变化,或者需要替换子模块,就需要删除原有的子模块。删除子模块较复杂,步骤如下:rm -rf 子模块目录 删除...原创 2020-04-03 13:21:14 · 3943 阅读 · 0 评论