本文章主要是记录ego planner算法如何在gazebo上快速跑起来,内容借鉴了B站博主大佬的视频以及课程整理而成,其中PX4软件包我在安装时使用该博主的还是遇到了问题,又参照了优快云博主提供的PX4软件包,才能顺利实现整个仿真流程,然后我把使用的源码以及依赖的软件放在了百度云中,可以直接下载进行使用。
链接: 百度网盘 请输入提取码 提取码: 1234
其中包含所使用经B站博主写好的的ego planner以及控制源码,PX4软件包,以及QGC。
注意:需要在ubuntu-20.04的台式机上实测,ubuntu-18.04和wsl我自己实测都出现了问题,但也可能可以在这两个环境中跑起来,自己没花时间去弄。
1. ros安装
使用小鱼一键安装,安装ros1-noetic
wget http://fishros.com/install -O fishros && . fishros
2. gazebo安装
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install gazebo11
sudo apt-get install libgazebo11-dev
#下载模型
git clone https://github.com/osrf/gazebo_models
sudo cp -r ~/gazebo_models/* /usr/share/gazebo-11/models/
#启动gazebo测试,能弹出一个gazebo界面表示安装成功
gazebo world/simple.world
3. mavros安装
sudo apt-get install ros-noetic-mavros-msgs
4. PX4安装
使用上述百度云中PX4文件
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
执行完无报错的话,重启电脑
执行以下内容,
cd PX4-Autopilot
make px4_sitl jmavsim //jmavsim仿真环境
编译完成后,显示无人机仿真界面表示成功,接着执行
make px4_sitl gazebo
编译完成后显示仿真画面,表示成功
下面这一步必须执行,否则后续无法使用,其中PX4-Autopilot的路径写自己的实际路径,后续就不要随意移动PX4-Autopilot文件的路径了,免得引起错误
#在~/.bashrc中添加以下内容,这里跟PX4-Autopilot相关的写自己对应的绝对路径
source /PX4-Autopilot/Tools/setup_gazebo.bash /PX4-Autopilot/ /PX4-Autopilot/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/PX4-Autopilot/
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/PX4-Autopilot/Tools/sitl_gazebo
保存, 执行souce ~/.bashrc
5. ego planner测试
测试环境,我在windows上使用wsl安装ubuntu20.04实测无法显示界面,所以需要一个ubuntu系统的电脑来实测,安装ubuntu-20.04系统,ros版本按照上述方法一键安装ros1-noetic,gazebo安装上述方法安装,mavros按照上述方法安装,PX4下载百度云盘,无需安装,可以直接启动使用。
上述所有环境安装好以后,下面进行ego planner测试,
- 第一步启动gazebo仿真环境
roslaunch px4 fast_test.launch
会启动一个gazebo界面以及无人机界面,无人机带了一个d435i深度相机,需要往地图里面拖动一些模块,在gazebo左上角第二排点insert找到bookshelf,如图所示后,不要关闭终端和gazebo界面,
- 第二步启动QGC,cd到下载的文件夹里面,会弹出一个地面站画面
./QGroundControl.AppImage
点击takeoff,然后使用手柄(如果没有虚拟手柄,点击左上角--application setting--虚拟手柄打钩,大概是右边第五个图标打钩),使用手柄可以控制无人机飞行,将无人机高度调整到1.5m左右的高度
- 第三步按照下面的步骤操作
#初始化空间
mkdir -p catkin_gazebo/src
cd catkin_gazebo
#编译
catkin_make
#将src里面的三个文件,ego-planner-swarm,px4ctrl和mybot_gazebo.sh拷贝到catkin_gazebo/src中,
#层级关系就是catkin_gazebo/src/ego-planner-swarm, px4ctrl, mybot_gazebo.sh
#重新编译
catkin_make
source ~/setup.bash
#进入到catkin_gazebo文件夹执行
sh src/mybot_gazebo.sh
就可以弹出一个控制界面以及rviz的无人机实时画面,终端会提示state:WAIT_TARGET,因为在ego planner的launch文件中设置了控制方式为1,即使用鼠标在rviz选点飞行,所以在rviz中先点击最上面的2D NAV Goal按钮再在rviz画面中选择一个点,使用鼠标左键点击并轻微拖动一下进行选点,无人机就可以开始飞行,如下面gif所示
6. 一些问题
我在测试中过程遇到的一些问题:
- QGC上点击takeoff后,无人机会起飞到默认的10m高度,但是没找到哪里可以修改这个默认高度,如果先运行ego planner,再点take off,ego planner会出现bad_alloc的崩溃问题,怀疑是ego planner中z方向的默认高度是3m所致,可以修改ego planner中launch文件z方向的地图大小
- 飞行中,有可能会陷入障碍物里面,比如让无人机转向,但是转向后就是一面墙,立马会急停,并且无法恢复,除非是把障碍物移除,我想的是可以改进一下算法,将无人机的local地图缓存一段时间(减小占据概率衰减值),即使转向也可以知道无人机后方的障碍物信息,然后让无人机后退一小段再进行重规划
- 无人机有概率会卡死在障碍物,此时是无法恢复的,需要重启程序,我想是否也可以采用第二种方式?因为无人机实际是不可能陷入障碍物里面的,最多是里障碍物距离很近,是否可用设计一个倒退一小段距离让无人机进行重规划?
- 无人机速度过快以后(我实测5m/s),会导致异常情况,无人机失控,直接倒立飞行,最后报错 loss depth错误,不知道是什么原因