最近在复现一个有关激光雷达的比较出名的无人机工程,在单激光雷达传感器情况下可以在复杂环境中实现 $5m/s^2$ 的自主飞行速度,可以说是一个非常NB厉害就是了。首先是在普罗米修斯仿真环境下进行了仿真复现,从rviz的效果来看确实挺不错,想法挺好的通过雷达感知得到三维地图生成局部安全飞行走廊,进而在安全飞行走廊中规划飞行轨迹。仿真复现后就着手于真机飞行试验,下面是有关控制器方面的内容

??? 问我复现工程,为什么是控制器方面的内容( 也没人问你啊)

其实是有原因的,这个工程的开源仅仅开源了他们的规划器,相当于开源了大脑,没开源身体(小脑和脊柱),身体部分就需要我们自己写(自行找)。

对于控制器PX4CTRL因为做了fsm(有限状态机),相比于其他控制器来说,它要相对稳定一些(稳定很多),但是初上手有一些不适和难度,毕竟我们不是原创,就要按照作者大佬的思想来,了解他们像实现什么怎么做,代码是PX4CTRL的状态机转换

/* 

        Finite State Machine

          system start

                |

                |

                v

    ----- > MANUAL_CTRL <-----------------

    |         ^   |    \                 |

    |         |   |     \                |

    |         |   |      > AUTO_TAKEOFF  |

    |         |   |        /             |

    |         |   |       /              |

    |         |   |      /               |

    |         |   v     /                |

    |       AUTO_HOVER <                 |

    |         ^   |  \  \                |

    |         |   |   \  \               |

    |         |      |    > AUTO_LAND -------

    |         |   |

    |         |   v

    -------- CMD_CTRL

*/
tips:当然我们省去这个状态机直接使用遥控控制也是可以的。

通过简单的ros工程的编译我们就会得到一个可执行的状态机文件,在这倒是碰壁不少。因为两年(好像是)前复现过FastLabfast drone 250工程,其中的控制器就是PX4CTRL(当然就是他们写的)。所以这次抠出来单独使用还是有点信心的。所以没去温习他们在B站做的视频。

具体抠出来后需要进行的步骤是

  1. 遥控器通道映射,因为原控制器使用的遥控器与我们不同,即使相同其中ch通道定义也不一定一样。需要修改 /px4ctrl/src/input.cpp 内通道的映射
  2. 修改 /px4ctrl/launch/run_ctrl.launch 文件对于话题的映射,一个是里程计话题一个是命令控制话题用于接收规划器发出的控制命令

所以最终结果就是:

  1. 飞起来切换模式出错,虽然手忙脚乱最终还是进入了AUTO_HOVER但是并没有达到理想效果
  2. 使用了错误的方法导致指导学弟时方法出错,一飞冲天最后喜提炸鸡怕(此处无图)

认怂还是去看了一遍,最终通过确认还是因为遥控器通道映射问题以及启动方法不对

启动时需要将 modegear 同时拉高,油门偏航等通道回中(这里有一点点反常理)

只有提前设置好了才可以启动 launch, 不然就算启动了再进行调整遥控器也是进不去AUTO_HOVER模式的。

最终严格按照上述步骤后,大概率会顺利进入AUTO_HOVER,然后无人机会起飞定点在 {0,0,1} 位置。 在此调整 ch[0]-ch[3] 观看是否有不对的,如果不对进入代码进行映射修改。