你好! 这是一篇无人机开源仿真平台的学习笔记, 如果你对无人机感兴趣的话,可以仔细阅读这篇文章,了解一下相关的基本知识。
这里采用Ubuntu18.04 + CUDA 11.7,ROS 1-melodic.
如果你没有安装ROS,请参考:Ubuntu18.04 melodic 安装与下载ROS。
git clone https://gitee.com/amovlab/Prometheus.git
cd Prometheus/
# 赋予编译权限
sudo chmod 777 ./compile_all.sh
./compile_all.sh
需修改Prometheus/Modules/object_detection/CMakeLists.txt 的第156行(注释掉),不然会卡在下载环节,
手动下载SiamRPNVOT.model(提取码:2ckt ),然后放在Prometheus/Modules/object_detection/src/siam_rpn_lib路径下。
编译成功!
引用一篇知乎笔记
目前每个模块都是一个独立的ros包,编译脚本会负责全部或部分编译模块代码,每个包的命名规则为prometheus_xxx因此如果你只做控制或者只做视觉,只需要编译对应的脚本即可,极大降低开发难度(比如你编译的时候你不感兴趣的代码报错了,也许这个报错你完全不需要考虑)
compile_all.sh默认编译项目中所有代码,因此编译时请确认每个模块都没有报错compile_control.sh则只编译控制部分代码,若只需要使用控制部分代码,运行./compile_control.sh即可,其他编译脚本其自行查阅理解
echo "source (Path To Prometheus)/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
如果你同时安装了ROS1和ROS2请参考下面代码修改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
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
sudo apt-get install ros-melodic-rtabmap*
sudo apt-get install ros-melodic-octomap-*
安装cartographer:
sudo apt-get install ros-melodic-cartographer*
在阿木开源项目的手册中:
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:
[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
sudo -H python3 -m pip install kconfiglib
然而我这,该方法没有效果,
上述BUG目前还未解决,推测是gazebo和PX4之间公用的插件版本不匹配,因为笔者是先装好了gazebo,但是gazebo模拟器在此PX4平台上有点问题。网上的其他朋友经验里是一直反复重装PX4,总有一次能成功,我试了很多次,没成功,不知道如何是好了,先放着吧。
后记 :
上述BUG们,通过修改cmake版本(详见后文的<更改cmake记录>)、相关指令(已在前文说明),以及tmp/bloary二进制编译库成功解决的。
sudo make amovlab_sitl_default gazebo_p450
继续前进!
由于prometheus_px4是在PX4上二次开发的, 参考PX4 自动驾驶用户指南,于是乎,编译成功了:
make px4_sitl jmavsim
由于上述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 . 也可能遇到如下错误或者警告:
cmake -GNinja -Wno-dev
这里也需要注意System re2 not found, using bundled version:
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成功图示(只截图了底部几行):
cd PX4-Autopilot/
git submodule update --init --recursive
sudo apt update # 本来用的中科大源,奈何找不到包,于是更换阿里源
sudo apt upgrade # 顺便升级一下包
sudo bash ./Tools/setup/ubuntu.sh
gazebo官方文档
暂时忽略下面的错误:
敲黑板!记住这两个cmake路径,因为cmake3.17根3.23的安装过程非常不一样!3.17不会自动生成这两个路径下的文件夹,后期我们要自己复制过去。
/usr/local/share/cmake-3.23
/usr/local/bin/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
结束了上述踩坑记录之后,再次
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!!!
在此环境基础的前提下,
一会再试试阿木的开源项目!!!
到这里,要想实现对机器人的控制还需要安装QGroundControl。
QGroundControl为PX4或ArduPilot动力飞行器提供完整的飞行控制和飞行器设置。它为初学者提供了简单直接的使用,同时仍然为有经验的用户提供高端功能支持。
控制器安装步骤如下:
sudo usermod -a -G dialout $USER
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
下载工具包:QGroundControl.AppImage
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage
涉及的知识点很多,推荐大家有空读一读官方文档。
在阿木开源项目的手册中:认识一下gazebo模拟器仿真的定位。
(未完待续…)
跟踪仿真:BUG记录