[UAV] 无人机仿真平台搭建

[Amovlab] 开源项目

  • 从0开始的无人机仿真平台搭建
    • 1. 基础环境
      • 1.1 新建本地代码仓库
      • 1.2 编译
          • 添加路径(记得 将Path To Prometheus替换成你的文件路径)
      • 1.3 安装ROS所需的其他插件或者库
          • 安装Mavros功能包
          • 安装rtabmap
          • 安装Octomap:
          • 激光SLAM依赖项安装(视情况安装):
      • 1.4 配置Prometheus_PX4
          • 环境配置
          • 编译BUG记录
          • Prometheus_PX4 编译成功!
          • 初次编译(使用 jMAVSim 模拟器)
          • 安装 PX4 Autopilot
          • 环境配置
          • 警告的解决办法
          • Gazebo模拟器在PX4上编译成功的关键点:
          • Install && Make
          • 更改cmake记录
      • 1.5 PX4 gazebo 编译成功!
        • 安装QGroundControl
          • 准备环境
          • Install
          • 初始化界面
    • 2. 无人机的仿真调试

从0开始的无人机仿真平台搭建

你好! 这是一篇无人机开源仿真平台的学习笔记, 如果你对无人机感兴趣的话,可以仔细阅读这篇文章,了解一下相关的基本知识。

1. 基础环境

这里采用Ubuntu18.04 + CUDA 11.7,ROS 1-melodic.
如果你没有安装ROS,请参考:Ubuntu18.04 melodic 安装与下载ROS。

1.1 新建本地代码仓库

git clone https://gitee.com/amovlab/Prometheus.git
cd Prometheus/
# 赋予编译权限
sudo chmod 777 ./compile_all.sh
./compile_all.sh

1.2 编译

需修改Prometheus/Modules/object_detection/CMakeLists.txt 的第156行(注释掉),不然会卡在下载环节,
[UAV] 无人机仿真平台搭建_第1张图片手动下载SiamRPNVOT.model(提取码:2ckt ),然后放在Prometheus/Modules/object_detection/src/siam_rpn_lib路径下。
[UAV] 无人机仿真平台搭建_第2张图片编译成功!
[UAV] 无人机仿真平台搭建_第3张图片

引用一篇知乎笔记

  • 特别强调说明:

目前每个模块都是一个独立的ros包,编译脚本会负责全部或部分编译模块代码,每个包的命名规则为prometheus_xxx因此如果你只做控制或者只做视觉,只需要编译对应的脚本即可,极大降低开发难度(比如你编译的时候你不感兴趣的代码报错了,也许这个报错你完全不需要考虑)

  • 编译脚本说明:

compile_all.sh默认编译项目中所有代码,因此编译时请确认每个模块都没有报错compile_control.sh则只编译控制部分代码,若只需要使用控制部分代码,运行./compile_control.sh即可,其他编译脚本其自行查阅理解

添加路径(记得 将Path To Prometheus替换成你的文件路径)
echo "source (Path To Prometheus)/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

如果你同时安装了ROS1ROS2请参考下面代码修改bashrc文件:

# source /opt/ros/eloquent/setup.bash
echo "ROS melodic (1) or ROS2 eloquent (2)?"
read edition
if [ "$edition" -eq "1" ];then
  source /opt/ros/melodic/setup.bash  
  # source ~/catkin_ws/devel/setup.bash
  echo using ros1 melodic
  source "/home/ps/data/project/amovlab/Prometheus/devel/setup.bash"
else
  source /opt/ros/eloquent/setup.bash 
 
  echo using ros2 eloquent
fi

1.3 安装ROS所需的其他插件或者库

安装Mavros功能包
sudo apt-get install ros-melodic-mavros ros-melodic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo chmod 777 ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh

在这里插入图片描述

安装rtabmap
sudo apt-get install ros-melodic-rtabmap*
安装Octomap:
sudo apt-get install ros-melodic-octomap-*
激光SLAM依赖项安装(视情况安装):

安装cartographer:

sudo apt-get install ros-melodic-cartographer*

1.4 配置Prometheus_PX4

在阿木开源项目的手册中:

prometheus_px4是Prometheus项目配套使用的PX4固件,Prometheus项目的仿真模块依赖PX4固件以及sitl_gazebo
ros功能包。(如果是配置Prometheus到真实无人机上那不需要配置prometheus_px4,因为这个是用于虚拟仿真的,真实无人机不需要)
但是实际参照手册安装make amovlab_sitl_default gazebo这一步时,会出现CMAKE的编译错误

环境配置
git clone https://gitee.com/amovlab/prometheus_px4.git
source prometheus_px4/Tools/setup/ubuntu.sh
cd prometheus_px4
git submodule update --init --recursive
# 这里有一个坑,如果你Ubuntu上安装了anaconda的话,官方安装toml empy jinja2 packaging的方式被我注释掉了,因为会装到anaconda的虚环境里,gazebo编译的时候找不到!
# pip3 install --user toml empy jinja2 packaging
sudo -H python3 -m pip install --user toml empy jinja2 packaging -i https://pypi.douban.com/simple

cd prometheus_px4
# 这里有一个坑,官方的编译指令是不带sudo的,但是如果你没有给文件夹赋权就会报错
make amovlab_sitl_default gazebo_p450
# 加上sudo就OK了
sudo make amovlab_sitl_default gazebo_p450
编译BUG记录

编译不成功这个时候敲黑板了!先看一下bug:

[813/817] Linking CXX executable bin/px4
FAILED: external/Stamp/sitl_gazebo/sitl_gazebo-build /home/ps/data/project/amovlab/prometheus_px4/build/px4_sitl_default/external/Stamp/sitl_gazebo/sitl_gazebo-build 
cd /home/ps/data/project/amovlab/prometheus_px4/build/px4_sitl_default/build_gazebo && /usr/local/bin/cmake --build /home/ps/data/project/amovlab/prometheus_px4/build/px4_sitl_default/build_gazebo -- -j 30
ninja: build stopped: subcommand failed.
Makefile:231: recipe for target 'px4_sitl' failed
make: *** [px4_sitl] Error 1

BUG
[UAV] 无人机仿真平台搭建_第4张图片在这里插入图片描述

  • 网络上参考的解决方法:
sudo -H python3 -m pip install kconfiglib

然而我这,该方法没有效果,
上述BUG目前还未解决,推测是gazebo和PX4之间公用的插件版本不匹配,因为笔者是先装好了gazebo,但是gazebo模拟器在此PX4平台上有点问题。网上的其他朋友经验里是一直反复重装PX4,总有一次能成功,我试了很多次,没成功,不知道如何是好了,先放着吧。

后记
上述BUG们,通过修改cmake版本(详见后文的<更改cmake记录>)、相关指令(已在前文说明),以及tmp/bloary二进制编译库成功解决的。

Prometheus_PX4 编译成功!
sudo make amovlab_sitl_default gazebo_p450

[UAV] 无人机仿真平台搭建_第5张图片

初次编译(使用 jMAVSim 模拟器)

继续前进!
由于prometheus_px4是在PX4上二次开发的, 参考PX4 自动驾驶用户指南,于是乎,编译成功了:

make px4_sitl jmavsim

[UAV] 无人机仿真平台搭建_第6张图片

安装 PX4 Autopilot

由于上述PX4编译失败,于是决定编译一下另一个版本的PX4,感受下区别在哪。

环境配置
 git clone https://github.com/PX4/PX4-Autopilot.git
 git clone https://github.com/PX4/Firmware.git  
 mv PX4-Autopilot PX4_Firmware
 git clone --recursive https://github.com/google/bloaty.git /tmp/bloaty \
      && cd /tmp/bloaty && cmake -GNinja . && ninja bloaty && cp bloaty /usr/local/bin/ \
      && rm -rf /tmp/*

直接编译版本: PX4_Firmware.zip(918.1 MB)

如果bloaty出现下载失败,建议切到文件路径/tmp/bloaty下逐个下载:

Cloning into '/tmp/bloaty'...
remote: Enumerating objects: 3170, done.
remote: Counting objects: 100% (652/652), done.
remote: Compressing objects: 100% (149/149), done.
remote: Total 3170 (delta 545), reused 502 (delta 497), pack-reused 2518
Cloning into '/tmp/bloaty/third_party/capstone'...
fatal: unable to access 'https://github.com/aquynh/capstone.git/': Failed to connect to github.com port 443: Connection timed out
fatal: clone of 'https://github.com/aquynh/capstone.git' into submodule path '/tmp/bloaty/third_party/capstone' failed
Failed to clone 'third_party/capstone'. Retry scheduled
Cloning into '/tmp/bloaty/third_party/demumble'...
Cloning into '/tmp/bloaty/third_party/googletest'...
fatal: unable to access 'https://github.com/google/googletest.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
fatal: clone of 'https://github.com/google/googletest.git' into submodule path '/tmp/bloaty/third_party/googletest' failed
Failed to clone 'third_party/googletest'. Retry scheduled
Cloning into '/tmp/bloaty/third_party/protobuf'...
fatal: unable to access 'https://github.com/protocolbuffers/protobuf.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
fatal: clone of 'https://github.com/protocolbuffers/protobuf.git' into submodule path '/tmp/bloaty/third_party/protobuf' failed
Failed to clone 'third_party/protobuf'. Retry scheduled
fatal: unable to access 'https://github.com/google/googletest.git/'
Failed to clone 'third_party/googletest' a second time, aborting
# 然后再次执行
 cmake -GNinja . 
 ninja bloaty
 cp bloaty /usr/local/bin/
 rm -rf /tmp/*

注意了,这里 cmake -GNinja . 也可能遇到如下错误或者警告:
[UAV] 无人机仿真平台搭建_第7张图片

警告的解决办法
cmake -GNinja -Wno-dev

这里也需要注意System re2 not found, using bundled version:
[UAV] 无人机仿真平台搭建_第8张图片

Gazebo模拟器在PX4上编译成功的关键点:
cd third_party/re2
make
make test
sudo make install
make testinstall
cd ../capstone/
make
make install
# 然后再次切换到/tmp/bloaty/,执行下面语句
cmake -GNinja -Wno-dev
# 然后把编译好的二进制库bloaty拷贝到指定位置
cd ..
sudo cp -r bloaty /usr/local/bin/   # 文件递归拷贝
sudo rm -rf /tmp/*   # 大功告成,可以删到这个临时的仓库了
ls /usr/local/bin/bloaty/   # 检查一下拷贝是否成功

注意了啊,敲黑板!上述步骤决定了你gazebo模拟器能否编译通过。
建议gazebo编译出问题的重头再来一遍。
cmake成功图示(只截图了底部几行):
在这里插入图片描述

Install && Make
cd PX4-Autopilot/
git submodule update --init --recursive
sudo apt update  # 本来用的中科大源,奈何找不到包,于是更换阿里源
sudo apt upgrade  # 顺便升级一下包
sudo bash ./Tools/setup/ubuntu.sh

gazebo官方文档
暂时忽略下面的错误:
在这里插入图片描述[UAV] 无人机仿真平台搭建_第9张图片敲黑板!记住这两个cmake路径,因为cmake3.17根3.23的安装过程非常不一样!3.17不会自动生成这两个路径下的文件夹,后期我们要自己复制过去。

/usr/local/share/cmake-3.23
/usr/local/bin/cmake
更改cmake记录

CMAKE版本更换为3.17 :下载地址。
cmake修改参考:文档。

 sudo chmod +x cmake-3.17.2-Linux-x86_64.sh
 sudo ./cmake-3.17.2-Linux-x86_64.sh
 # 切换到cmake3.17的安装路径
 cd /your path to cmake/cmake-3.17.2-Linux-x86_64/bin  
 sudo cp cmake /usr/local/bin/
 cd /your path to share/cmake-3.17.2-Linux-x86_64/share
 sudo cp -r cmake-3.17 /usr/local/share/
 sudo gedit ~/.bashrc
 # 在bashrc最后一行添加下面的指令,记得改成你自己的cmake路径
export PATH="/Your path to cmake/cmake-3.17.2-Linux-x86_64/bin:$PATH"
source ~/.bashrc

1.5 PX4 gazebo 编译成功!

结束了上述踩坑记录之后,再次

cd
git clone https://github.com/PX4/Firmware
mv Firmware PX4_Firmware
cd PX4_Firmware/
git checkout -b xtdrone/dev v1.11.0-beta1
git submodule update --init --recursive
sudo make px4_sitl_default gazebo

更改cmake版本之后成功编译gazebo!!!
在此环境基础的前提下,
一会再试试阿木的开源项目!!!
[UAV] 无人机仿真平台搭建_第10张图片

安装QGroundControl

到这里,要想实现对机器人的控制还需要安装QGroundControl。

QGroundControl为PX4或ArduPilot动力飞行器提供完整的飞行控制和飞行器设置。它为初学者提供了简单直接的使用,同时仍然为有经验的用户提供高端功能支持。
控制器安装步骤如下:

sudo usermod -a -G dialout $USER 

[UAV] 无人机仿真平台搭建_第11张图片

准备环境
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libqt5gui5 -y
sudo apt install libfuse2 -y
Install

下载工具包:QGroundControl.AppImage

chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage

涉及的知识点很多,推荐大家有空读一读官方文档。

初始化界面

[UAV] 无人机仿真平台搭建_第12张图片

2. 无人机的仿真调试

在阿木开源项目的手册中:认识一下gazebo模拟器仿真的定位。
[UAV] 无人机仿真平台搭建_第13张图片

(未完待续…)
跟踪仿真:BUG记录

你可能感兴趣的:(UAV,深度学习,人工智能)