
Ardupilot V4.3.4 源码解析
文章平均质量分 82
APM的代码的解读是很多科研人员的烦恼,最近做一些项目,需要逐行解析Ardupilot V4.3.4 源码解析。这里我们一边自己学习和注释,一边分享出来和大家共同探讨学习。
陕西华兴通盛航空科技有限公司
陕西华兴通盛航空科技有限公司成立于2021年12月,注册于天津市东丽区慧谷园。2024年5月,公司迁址到陕西省西安市。公司秉持“中华兴盛,盛世通达”的民族使命,以技术创新为牵引,以国产化、自主可控为抓手,全力打造核心设计能力、关键设备生产能力。依托人工智能、数字孪生、云端智能协同等先进技术,发展多维度全产业链生态系统,实现“自动飞行”到“智能飞行”的行业升级目标。
目前,公司拥有“天鸿”系列飞控机、“瑶光”系列国产化飞控机、“天枢”系列卫星定位系统、“天璇”系列数据链系统、“天权”系列空速气流角测量系统,以及国产化惯导系统、“华兴”系列固定翼/垂起无人机、“通盛”系列多旋翼无人机等系列产品。同
展开
-
ardupilot/Ardupilot V4.3.4 源码解析:mode.h
*当使用STICK_MIXING=0时,如果某个飞行模式设置了航行器的目标位置,则该模式会控制是否忽略控制输入。/*如果某个飞行模式设置了飞行器的目标位置(即航点),那么STICK_MIXING=0将控制是否忽略控制输入。确定飞行模式:首先,需要确定要定义目标高度轮廓的特定飞行模式,例如手动飞行、定高模式或自动驾驶模式等。例如,手动飞行模式下可能没有特定的高度轮廓,而定高模式下可能需要设定一个固定的目标高度,也就是说,在这种情况下,如果飞行模式将航行器的目标位置设定好了,那么控制输入可能会被忽略。原创 2023-08-17 08:30:00 · 381 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:mode.cpp
/ 然而,布尔变量的取值与实际意义相反,前推油门使用'does_auto_throttle',而垂直油门使用'is_vtol_man_throttle'。在这个例子中,handle_automatic_flight_mode_change() 函数根据失控保护触发的条件来执行相应的操作。update_rc_failsafe_throttle(new_mode) # 更新RC失控保护油门设置。set_rc_failsafe_throttle(1300) # 设置失控保护油门为1300。原创 2023-08-16 08:30:00 · 341 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:Attitute.cpp(2)
/ 在这种情况下,`guided_state.target_heading` 是以弧度表示的,取值范围在 -π 到 π 之间(默认为 4 )。综上所述,你需要根据具体情况计算新的 `aerodynamic_load_factor` 并限制 `nav_roll_cd`,// 脚本程序在过去的50毫秒内没有调用set_target_throttle_rate_rpy函数。// 获取积分器值待办。计算一个新的 `aerodynamic_load_factor` 并限制 `nav_roll_cd`,原创 2023-08-15 09:42:33 · 424 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:Attitute.cpp(1)
在飞行控制中,偏航速率控制是指控制飞机偏航运动的变化速率。纯速率控制器通过根据期望的偏航速率和测量到的实际偏航速率之间的误差产生控制输出,以使得飞机的偏航速率逐渐趋近于期望值。积分器通过积累俯仰误差并添加到控制输出中,可以在俯仰持续变化的情况下提供额外的控制力,以稳定飞机的俯仰姿态*/根据用户的要求,可以使用 ACRO_YAW_RATE 参数来缩放偏航速率的大小,以满足用户的需求。//对速度面进行调节 在工程实践上,由于空速测量的限制,可能没有真正的速度信息,这个案件的限制更加严格。原创 2023-08-11 12:00:46 · 387 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:AP_Arming.cpp
*如果我们在这里发送一条消息来阻止舵机的解锁/禁用,那么进行舵面检查的人可能会因为接收到该消息而感到困扰。通过启用Q_ASSIST_SPEED,可以在四旋翼与固定翼飞行的过渡中提供额外的控制和稳定性,从而改善飞行性能和操纵性。因此,在启用或禁用Q_ASSIST_SPEED之前,应仔细评估和测试飞行器的表现,并根据实际情况进行相应的参数设置。/*在看门狗复位期间,可以绕过解锁检查,以允许在复位之前已被解锁的情况下进行飞行中的解锁。/*在看门狗重置时绕过解锁检查,并在重置之前已解锁的情况下允许在飞行中解锁,原创 2023-08-07 08:30:00 · 427 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:altitude.cpp(2)
如果current_loc位于地形的低处,那么即使其气压高度较低,也有可能current_loc位于loc的上方。// 如果我们在目标高度的滑行坡线最小值(米)GLIDE_SLOPE_MIN内,则重置偏移量以不使用滑行坡道。// 使用最大爬升速率的50%,以便我们不会持续处于100%油门状态,并且在地表上留有更多余地。// 在因过高的滑行坡度而中止着陆后,我们使用距上次着陆尝试的偏移量。根据目的地的高度与指定起始高度之间的差异,重新设置用于滑降道的高度偏移量。// 范围变化超过全范围的20%将重置计数器。原创 2023-08-05 17:05:09 · 234 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:altitude.cpp(1)
例如,如果位置结构提供了500米的高度,并且terrain_alt标志已设置,如果我们知道当前的地形海拔高度是200米,则应将目标高度设置为200米而不是500米。// 根据已完成的部分来调整目标高度偏差的方法可以确保新的目标高度考虑了已经完成的部分,并使飞行路径更加平滑和连贯。3) 使用adjusted_altitude_cm()函数,将当前高度和海拔偏移值作为参数传入,得到修正后的目标高度。例如,如果当前高度为100米,您希望将目标高度提高10米,通过应用海拔偏移值,可以将目标高度设置为110米。原创 2023-08-05 15:12:25 · 223 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:afs_plane.cpp固定翼飞机特有的类文件
/ 配置为反向推力,使用 TRIM。// 配置为反向推力,使用 TRIM。设置所有频道的radio_out值为终止值。// 为故障安全设置飞行器电机输出。// 气动终止的默认终止方法。// 正常油门,使用最小值。// 移除襟翼回转的限制。返回当前控制模式的 AFS_MODE。// 执行VTOL着陆。// 同时解锁以确保点火被阻断。固定翼飞机特有的类文件。原创 2023-08-04 13:41:48 · 263 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:Plane.h(2)
/ Loiter Time指令中应该在环绕飞行中停留的时间量,单位为毫秒。//例如,在延迟命令中,condition_start记录了延迟的起始时间。//例如在延迟命令中,condition_start记录了延迟的起始时间。//上一个航点和当前航点之间的高度差,单位厘米。//盘旋循环圈开始时的高度。用于检测每圈的高度变化。//在环绕飞行中所需的总旋转量,用于盘旋转弯命令.//FBWB/CRUISE模式下高度控制的最后输入。//海平面上方的目标高度,单位厘米。//先前的目标方位,用于更新sum_cd。原创 2023-08-03 08:23:21 · 383 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:Plane.h(1)
include <AP_HAL/AP_HAL.h> // 硬件板卡信息库 它可能是最重要的库,因为它包含读取无线、写入电机、处理数字和模拟端口、串行通信、实时操作调度程序、将数据包写入 SD 存储器等所有命令。#include <AP_Common/AP_Common.h> // 常用函数库,例如用于串行通信的高低部件转换器,角度测量系统之间的转换(弧度到角度)等。请记住,最佳的延迟时间取决于具体的应用场景和设备要求。原创 2023-08-03 08:12:44 · 507 阅读 · 0 评论 -
ardupilot/Ardupilot V4.3.4 源码解析:Ardupilot.cpp
if (AP_HAL::millis() - plane.launch_detector_pin_last_inactive_time_ms < ((uint32_t)plane.g2.launch_detector_delay_ms)) { // 虽然已经触发,但是没有达到延时时间。if (hal.gpio->read(plane.g2.launch_detector_pin) == plane.g2.launch_detector_polarity) { // 处于已触发状态。原创 2023-08-02 11:22:19 · 782 阅读 · 0 评论