
Ardupilot4.2.2
文章平均质量分 60
主要以Ardupilot4.2.2版本进行开发,并记录开发过程中的笔记
H2Z20Str
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PIXHAWK(ardupilot4.52)上传航点的bug
地面站上传的平行航线与飞控读取的航点存在50厘米误差,经排查发现地面站仍在使用废弃5年的MISSION_ITEM(39)消息。问题根源在于该消息使用float类型存储经纬度,精度仅有7位,经飞控放大1e7倍后导致精度丢失。官方解决方案是采用MISSION_ITEM_INT(73)消息,改用整型数据存储经纬度。该案例展示了老旧协议在精度要求场景下的局限性,以及数据类型选择对系统精度的重要影响。原创 2025-06-30 18:01:09 · 436 阅读 · 0 评论 -
PIXHAWK(ardupilot4.52)Mavlink消息解析学习
摘要:文章详细解析了飞控系统如何接收和处理地面站发送的Mavlink消息。核心流程包括:通过串口接收数据、调用mavlink_frame_char_buffer函数进行消息帧解析、使用packetReceived函数处理有效消息、并通过handle_message函数根据消息ID进行分发处理。重点以MISSION_ITEM_INT(73)航点消息为例,展示了从消息解码到航点数据存储的全过程。对于自定义Mavlink消息,需要在handle_message中添加对应case并调用生成的头文件中的解码函数。原创 2025-06-30 15:27:23 · 650 阅读 · 0 评论 -
PIXHAWK(ardupilot4.52)NMEA的解析bug
摘要:在解析NMEA格式的GPS高程数据时,发现当输入负小数(如-0.3237)时,系统错误地输出正值。经排查,问题源于_parse_decimal_100函数中strtol处理"-0.xxx"时丢失负号。通过添加特殊判断(当整数部分为0时检测原始字符串符号),成功修复该bug,最终在输入-0.3237时正确输出-32。该问题涉及数值边界处理和字符串转换细节,修改后确保了高程数据的正负符号准确性。原创 2025-06-27 11:01:10 · 273 阅读 · 0 评论 -
PIXHAWK(ardupilot4.52)新增自定义mavlink消息
mavlink的定义在ardupilot\modules\mavink\message_ defnitions\v1.0\common.xml文件中。在头文件中可以看到mavlink的发送函数。在程序中调用该发送函数即可发送自定义的mavlink消息了。注意自定义的ID不要跟原有的ID冲突了,且定义在255后的ID需要用mavlink2协议才能有输出。可以直接效仿原有的定义新增一个自定义的mavlink消息;原创 2025-04-08 14:04:57 · 228 阅读 · 0 评论 -
PIXHAWK(ardupilot4.52)单ic通道输出pwm
搜索查找后可以找到void AP_MotorsUGV::output(bool armed, float ground_speed, float dt)这个函数,看名称可以判断为输出函数。_throttle在这个函数中使用了,但是最终都汇聚在SRV_Channels::output_ch_all();在这个函数中可以看到形参desired_throttle最终是递给了_throttle这个参数。该函数下,前面的都是验证每个通道分别需要多少的pwm输出,函数的最后才是控制单独通道的单独输出。原创 2024-11-18 09:51:15 · 794 阅读 · 0 评论 -
自动返航策略-电池篇
电池低电量和电池老化以及电池通讯丢失会触发返航。原创 2023-04-12 17:46:11 · 239 阅读 · 0 评论 -
ardupilot4.2.2-定制日志
其中的LOG_PACKET_HEADER_INIT(LOG_SPOS_MSG)中的LOG_SPOS_MSG和LOG_PACKET_HEADER_INIT(LOG_SBAT_MSG)中的LOG_SBAT_MSG需要在define.h中进行定义。电池采用6s电池,每个电芯的使用信息都记录在日志当中,记录的日志体为RCOU,在libraries\AP_Logger\LogFile.cpp当中。(2)、将添加的日志体添加到log_structure[]数组当中。(1)、定义日志结构体。原创 2022-12-27 08:57:34 · 362 阅读 · 0 评论 -
ardupilot4.2.2-定制地面站信息
在地面站上显示数据的文件为GCS_Common.cpp,在此文件中可以发现很多给地面站发送数据的函数,找到void GCS_MAVLINK::send_battery_status(const uint8_t instance) const,在此函数中可以给地面站发送一定的电池数据,应设计要求,需要把电池的电压,电量百分比,电量,温度,循环次数等信息发送到地面站并在地面站上显示出来。将对应的电压,百分比,电流等参数替换成我们已经设定好的数据即可。同样在GCS_Common.cpp文件中,原创 2022-12-26 11:14:05 · 755 阅读 · 0 评论 -
ardupilot4.2.2-雷达CAN通讯
解析到的8个扇区的距离数据都存储到hal.util->mr72_dist[i]数组当中,这些数据将到Proximity库当中运用。在实例识别当中可以发现所有的类型都是采用了串口通讯,而我们的雷达采用的是CAN通讯,因此我们要在实例识别程序中添加CAN通讯。雷达采用的是MR72,其BMS默认为0x21,最远探测距离是80米,通讯过程中会依次传回8个扇区测到的距离。在此函数当中添加CAN雷达通讯,并将我们的读取到的扇区数据传递给实例当中即可。其中最主要的是read_sensor_data();原创 2022-12-26 10:37:37 · 824 阅读 · 0 评论 -
Ardupilot仿真中遇到的问题(持续更新)
其次输入help,可以看到MAVProxy上的所有命令,其中accelcalsimple命令即为3D校准,输入此命令还不能解锁建议重新编译。首先是查看一下地图上是否有飞机的图标,如果没有,查看在初始设置下的必要硬件中的飞控的类型是否选择上了你编译的类型。2、仿真时提示需要3D校准,无法解锁。原创 2022-10-21 09:19:27 · 2009 阅读 · 1 评论