|
发表于 2019-7-4 13:52:36
26549 浏览 12 回复
[飞控嵌入式]
SD卡bug
8阿木币
bug描述如下:
在任务模式下,sd卡损坏或者松脱,那么飞机在到达当前目标航点后,固定翼状态下会持续绕着当前航点画8字,如果是旋翼状态,那么会悬停不动。此时mavlink的上行命令全部失效,即飞机无法响应返航,切模式,降落,紧急停止等命令,但是遥控器指令是有效的。
复现方法:
1. 在硬件在环仿真环境中,令飞机起飞,切换到任务模式,拔出sd卡,飞机即可复现上述现象;
2. 一架正常的飞机(记得配上遥控器),上传航点完成后,拔出sd卡,手动起飞,空中切换为任务模式,也能立刻复现该现象。
测试结果发现,mavlink_receiver和navigator貌似都没正常工作,为什么呢?
是否是Datamanager出了问题,但是为什么会卡死无关线程?
|
最佳答案
查看完整内容
虽然没有执行过px4的mission拔过卡,但是有过类似mission程序的开发,如果没有插卡执行过程中发现会在读取点和设置点状态的时候,会因为dm_read返回的长度不同,导致写失败,但是不会卡死。
因为所有的航线都是在卡中存储,所以会返回会出现读不到任务点,刚看了下代码,如果read_mission_item读取点失败,mission的话会执行悬停状态。 但是navigator和mission并不会死机。 工作模式可以通过遥控器进行切换。
关于mavlink为什么 ...
![](plugin.php?id=weijie_qr&data=http%3A%2F%2Fbbs.amovlab.com%2Fforum.php%3Fmod%3Dviewthread%26tid%3D488%26extra%3Dpage%253D1%26page%3D1&code=a2bce852) 扫一扫浏览分享
|
|
|
|
|
|
|
发表于 2019-7-4 13:52:37
虽然没有执行过px4的mission拔过卡,但是有过类似mission程序的开发,如果没有插卡执行过程中发现会在读取点和设置点状态的时候,会因为dm_read返回的长度不同,导致写失败,但是不会卡死。
因为所有的航线都是在卡中存储,所以会返回会出现读不到任务点,刚看了下代码,如果read_mission_item读取点失败,mission的话会执行悬停状态。 但是navigator和mission并不会死机。 工作模式可以通过遥控器进行切换。
关于mavlink为什么不管用的话,可以在接收处理的commander还有navigator放些打印,最近好久没有调试过hil的打印,但是印象也是很方便的,px4_err 或者mavlink_log_info 之类的。 |
|
|
|
|
|
|
|
发表于 2019-7-4 14:46:54
|
|
|
|
|
|
|
发表于 2019-7-4 15:15:27
赞认真测试的态度。通过你的测试表明,SD卡跟任务模式有非常强的关系。而遥控器,作为无人机控制的最后一道防线,是持续有效的。SD卡拔出,说明飞控任务流里面关键的航点log记录的程序段失效,导致依赖于他的mavlink_receiver等程序失效。但既然固定翼能画八字,旋翼能悬停,navigator应该就是没有失效的。否则可能就直接炸机了。当然最好的是在硬件在环仿真状态下,单步跟踪程序的走向,来确认没工作和卡死无关线程的原因。 |
|
|
|
|
|
|
|
楼主|
发表于 2019-7-4 15:33:27
补充一点哈,sd卡拔出去之后,即使切换到rtl模式,也是没用的,切换模式能够成功,但是飞机并不会返航,而是保持之前的状态。
只有手动控制的模式才能够救回飞机。
还有,mavlink_receiver除了调用dm_read()相关函数,并没有发现跟航点相关的内容,那个时候航点已经存储在sd卡里了。 |
|
|
|
|
|
|
|
发表于 2019-7-4 15:37:22
rtl模式也是把home点设置为需要去到的航点,跟任务模式区别不大啊。你看看是不是跟多线程调用有关系啊,看对ardupilot架构熟悉的大神能不能解答你的疑惑。 |
|
|
|
|
|
|
|
楼主|
发表于 2019-7-4 15:55:38
|
|
|
|
|
|
|
发表于 2019-7-4 16:06:52
好吧,不好意思。反正就是对代码框架熟悉的人来看看会好一点 。好像最近PX4中级视频阿木社区也免费了,我看公众号在推阿木学院什么的。可能可以看看那个。 |
|
|
|
|
|
|
|
发表于 2019-7-4 16:55:03
|
|
|
|
|
|
|
楼主|
发表于 2019-7-4 20:18:51
|
|
|
|
|
|
|