文章目录

  • 无人机仿真之仿真平台搭建
      • 前言
      • ardupilot-SITL---APM飞控
        • 安装
        • 启动仿真
          • 简单仿真
          • 结合gazebo仿真软件的3D环境仿真
            • 环境安装
            • 示例
          • 多无人机仿真
        • 终端操作无人机的部分指令
      • 安装PX4框架--PX4飞控
        • 仿真平台搭建完成后,可以试着跑一下
          • 单个无人机模拟
          • 使用JMAVSim进行多车辆仿真
          • 带凉亭的多车模拟-需要安装ROS
            • 给无人机添加摄像头-使用iris_fpv_cam模型-参考
      • 安装ROS
      • 安装gazebo
      • 修改参数-出现GPS故障时可参考

无人机仿真之仿真平台搭建

前言

 
  • 马上就要毕业了,看着一无是处的自己,老实说很沮丧,祈祷有个好去处吧???。
  • 很早之前看到了宾夕法尼亚大学的多无人机协同作业视频,很赶兴趣,就想做一做无人机相关的实验,很多原因综合起来就没能开展(其实就是没钱买无人机?),现在有一些好东西,让我这个穷逼也能玩玩无人机相关的一些实验,就是SITL和gazebo以及ROS,内容很多,具体细节参考?。
  • 主要的开源飞控有两个,APM和PX4,下面介绍两种飞控的仿真平台的安装步骤。安装出现错误很正常,多查查资料错误就解决了。
 

ardupilot-SITL—APM飞控

安装

 
  • 我是在Ubuntu16.04上安装的,可以参考安步骤参考链接,也可以看下面的安装步骤,做了一下简单的翻译。
  • 其他平台(Windows和OSX)的安装步骤在上面的网址中也可以找到
  • 首先下载项目源码(项目是开源的,前面讲到过)
 
git clone https://github.com/ArduPilot/ardupilot cd ardupilot git submodule update --init --recursive
 
  • 最后一步需要的时间较长,耐心等待即可
  • 然后是安装需要的依赖
 
Tools/environment_install/install-prereqs-ubuntu.sh -y . ~/.profile
 
  • 到这里无人机的仿真就可以做到了,下一步安装3D环境的仿真软件gazebo
  • 然后就可以利用这个平台向真实的飞控写入需要的固件,当然淘宝买飞控的时候可能店家就会帮助写好飞控。当自己需要修改飞控固件的时候可以参考这个链接
  • 不过这里做仿真还用不到向飞控写入固件,等以后买得起无人机再说吧

启动仿真

简单仿真
 
  • 启动仿真的方式为执行一个Python脚本,加入参数,具体有哪些参数可在脚本后加-h参数获取
  • 例如做一个简单的四旋翼无人机的仿真
 
cd ~/ardupilot/ArduCopter sim_vehicle.py --map --console
  • 这时候就会看到启动了一个控制终端,一个地图界面,类似下图这样,如果报错找不到文件,是装依赖环境的时候出错了,一般执行脚本安装依赖不会出错,如果一步一步安装依赖可能会出现这种情况,这时候将这个文件的目录加入到环境变量里即可
  1  
结合gazebo仿真软件的3D环境仿真
环境安装
 
  • 也可以结合一些其他的仿真平台实现更好的视觉效果,比如连接gazebo仿真器实现3D环境下的无人机仿真
  • 当然,前提是安装好了gazebo仿真软件,gazebo的安装步骤在下文中也有,可以参考
  • 然后是安装插件,项目开发文档上讲的插件安装方式在物理Ubuntu主机上可能不会报错,我使用Ubuntu虚拟机安装总会报错,最后关闭了虚拟机的硬件加速后安装成功,相关命令如下
 
echo “export SVGA_VGPU10=0” >> ~/.bashrc 关闭硬件加速 source ~/.bashrc 执行以下终端配置文件,其实最好重启终端
 
  • 然后就可以正常安装gazebo插件了(PS 如果使用物理主机,可以忽略上面步骤直接进行安装,如果出错再执行上面的步骤)
  • gazebo现在可用的有7、8、9三个版本,推荐使用7或8版本
 
apt-get install gazebo7 以7为例,安装8的话可以修改版本为8 sudo apt-get install libgazebo7-dev 这是必须安装的,根据自己安装的版本修改版本数字
 
  • 然后是安装插件
 
git clone https://github.com/SwiftGust/ardupilot_gazebo cd ardupilot_gazebo mkdir build cd build cmake … make -j4 sudo make install
 
  • 安装完成后,将gazebo的相关文件加入环境变量中(后面会用到模型和环境文件)
 
sudo gedit ~/.bashrc
 
  • 打开终端配置文件后,将下面内容添加到文件末尾
 
  • source /usr/share/gazebo/setup.sh export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models:${GAZEBO_MODEL_PATH} export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models_gazebo:${GAZEBO_MODEL_PATH} export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}
    • 到这里gazebo和插件就安装完成了,下面给出几个示例
    示例
    01.车辆仿真
  • On 1st Terminal(Launch Ardupilot SITL) sim_vehicle.py -v APMrover2 -f gazebo-rover -m --mav10 --map --console -I1 On 2nd Termianal(Launch Gazebo with Rover, Retrieved from Husky Model) gazebo --verbose rover_ardupilot.world
    1. 四旋翼无人机仿真
    On 1st Terminal(Launch Ardupilot SITL) sim_vehicle.py -v ArduCopter -f gazebo-iris -m --mav10 --map --console -I0 On 2nd Terminal(Launch Gazebo with demo 3DR Iris model) gazebo --verbose iris_ardupilot.world
    1. 飞机仿真
    On 1st Terminal(Launch Ardupilot SITL) sim_vehicle.py -v ArduPlane -f gazebo-zephyr -m --mav10 --map --console -I0 On 2nd Terminal(Launch Gazebo with demo Zephyr flying wing model) gazebo --verbose zephyr_ardupilot_demo.world
    • 这是也可以使用地面站软件连接仿真平台,具体地面站软件很多,大家自行学习使用
  • 多无人机仿真
  • 多无人机仿真需要启动三次仿真脚本sim_vehicle.py,修改部分参数,如下:
  • -I 0 has FDM in/out ports of 9002/9003 / GCS connection UDP:14550
    -I 1 has FDM in/out ports of 9012/9013 / GCS connection UDP:14560
    -I 2 has FDM in/out ports of 9022/9023 / GCS connection UDP:14570
    • 并且需要修改gazebo加载的word(word简单来说就是一个场景,具体是什么含义可以参考gazebo的博文)
    • 还有一个提示是这样说的,因为这部分我没有运行成功(其实当在gazebo中起飞无人机几秒后就会出现GPS故障而坠落,出错原因还未找到,博文最后介绍了禁用GPS的方法,没成功)
    Additional Note for GCS Connection You will also need to edit ArduPilot Parameter SYSID_THISMAV to be unique from one another for the GCS connection
    • 这里有一个大佬做多无人机仿真实验的视频,可以看一下视频(需要科学上网-FQ)

  • 终端操作无人机的部分指令

    • 在终端窗口可以输入指令控制无人机的飞行,如下:
    mode guided #启动引导模式,这个模式下可以输入起飞指令 arm throttle #无人机自检,只有通过自检后才可以执行起飞指令 takeoff 40 #起飞到40米处

    mode circle # 启动转圈模式,在无人机飞到空中后才能切换到此模式 param set circle_radius 2000 #设置转圈半径为2000厘米

    wp load …\Tools\autotest\CMAC-circuit.txt #载入任务,此目录下还有其他任务文件,任务文件要和地图匹配(基于经纬度) mode auto #模式切换到自动模式 wp set 2 #去掉第二个任务点(任务中包含了多个有序位置点) wp loop #设置任务点循环,即执行完最后一个任务点后重新开始这个任务

    mode #查看有哪些模式 param show fence* # 显示以fence开头的参数有哪些 param set fence_enable 1 # 设置fence_enable参数的值为1

    mode land #设置到land模式,即无人机落地,落到当前位置的地面 mode rtl # 设置到rtl模式,即无人机返回到起飞的位置
    • 当无人机处于guided模式下,在地图上点击右键可以出来菜单,在菜单里可以进行一些操作(设置飞到位置,高度,也可以绘制任务路线)
  2  

安装PX4框架–PX4飞控

 
  • 首先是安装依赖,可以参考 链接,也可以看下面的步骤
  • 第一步,使用户成为“拨出”组的成员:
 
sudo usermod -a -G dialout $USER
 
  • 注销并再次登录(仅在新登录后进行更改)
  • 然后按下面的步骤进行
 
  1. 下载ubuntu_sim.sh。 source ubuntu_sim.sh 在终端中执行脚本
  • 这个脚本会安装带有gazebo的PX4环境
  • 最好可以翻墙安装,一些文件不翻墙下载会非常非常
  • 安装完之后下载PX4项目源码
 
cd ~/src git clone https://github.com/PX4/Firmware.git cd Firmware git submodule update --init --recursive 加载更新子模块,必需的操作
 

仿真平台搭建完成后,可以试着跑一下

 
单个无人机模拟
 
使用JMAVSim进行多车辆仿真
 
  • 参考链接
  • 使用jMAVSim进行多车辆仿真,它易于设置,可用于测试您的车辆是否可以起飞,飞行,降落并适应各种故障条件(例如GPS故障)。个人理解这只是用来测试地面站平台是否支持多无人机。
  • 这是模拟运行PX4的多辆车辆的最简单方法。它适用于在QGroundControl(或Dronecode SDK等)中测试多车辆支持。 带有Gazebo的多车模拟应该用于许多车辆的群体模拟,或用于测试仅由Gazebo支持的计算机视觉等功能。
 
带凉亭的多车模拟-需要安装ROS
 
  • 参考链接
  • mode文件的路径为(提示自己,可忽略)
/src/Firmware/Tools/sitl_gazebo/models
 
给无人机添加摄像头-使用iris_fpv_cam模型-参考
 
  • 修改模型文件
  • 因为默认构建模型用的是模型文件-.xacro结尾的文件
  • 首先选择使用sdf文件进行模型构建
multi_uav_mavros_sitl.launch > multi_uav_mavros_sitl_sdf.launch
  • 然后将launch文件中的vehicle参数修改为想要使用的无人机模型,无人机的所有模型的sdf文件在下面目录中
src/Firmware/Tools/sitl_gazebo/models
  • 运行roslaunch,通常会报错—px4无法找到iris_fpv_cam模型
  • 排错可参考这个链接,关键看下面的图片
  3  

安装ROS

  • 参考 链接
  • 这里安装ros最好安装全版本的,如果之前就安装了gazebo,先卸载掉,安装ROS自带的gazebo,网上有人说ROS自带的gazebo有错误,暂时使用正常,没发现有什么问题,读者发现了欢迎评论区交流

安装gazebo

  • Gazebo是一款3D动态模拟器,能够在复杂的室内和室外环境中准确有效地模拟机器人群。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
  • 如果已经安装了完整版的ROS平台,就已经安装gazebo了
  • 如果没有也可以直接使用命令安装
apt-get install gazebo8 apt-get install gazebo8-dev
  • 进行安装
  • 上面的安装完成后,将gazebo的相关文件加入环境变量中(后面会用到模型和环境文件)
sudo gedit ~/.bashrc
  • 打开终端配置文件后,将下面内容添加到文件末尾
source /usr/share/gazebo/setup.sh export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models:${GAZEBO_MODEL_PATH} export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models_gazebo:${GAZEBO_MODEL_PATH} export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}
 

修改参数-出现GPS故障时可参考

 
  • APM下GPS出现故障时,可参考以下操作
  • 进行以下设置,更改飞控使用的卡曼滤波器:
使用EKF3(最新版本的卡曼滤波) AHRS_EKF_TYPE = 3 停止EKF2 EK2_ENABLE = 0 使能EKF3 EK3_ENABLE = 1 *(地面站操作) 完成以上设置后,点击”Write Params“写入参数,写入成功后重启飞控(不然EKF3的相关参数不会出现)。
  • 重启后,再进行以下设置
禁用GPS GPS_TYPE = 0 #使用光流传感器作为定位源 EK3_GPS_TYPE = 3 使用超声波传感器作为高度源 EK3_ALT_SOURCE = 1
  • 在APM平台下禁用GPS在引导模式下无法通过自检。