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

2023-05-16

[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行(注释掉),不然会卡在下载环节,
在这里插入图片描述手动下载SiamRPNVOT.model(提取码:2ckt ),然后放在Prometheus/Modules/object_detection/src/siam_rpn_lib路径下。
在这里插入图片描述编译成功!
在这里插入图片描述

引用一篇知乎笔记

  • 特别强调说明:

目前每个模块都是一个独立的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
BUG记录在这里插入图片描述

  • 网络上参考的解决方法:
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

在这里插入图片描述在这里插入图片描述

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

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

make px4_sitl jmavsim

shell成功打印在这里插入图片描述

安装 PX4 Autopilot

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

环境配置
 git clone https://github.com/PX4/PX4-Autopilot.git
 git clone https://github.com//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:
在这里插入图片描述

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官方文档
暂时忽略下面的错误:
在这里插入图片描述在这里插入图片描述敲黑板!记住这两个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!!!
在此环境基础的前提下,
一会再试试阿木的开源项目!!!
在这里插入图片描述在这里插入图片描述

安装QGroundControl

到这里,要想实现对机器人的控制还需要安装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
Install

下载工具包:QGroundControl.AppImage

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

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

初始化界面

在这里插入图片描述在这里插入图片描述

2. 无人机的仿真调试

在阿木开源项目的手册中:认识一下gazebo模拟器仿真的定位。
在这里插入图片描述

(未完待续…)
跟踪仿真:BUG记录
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[UAV] 无人机仿真平台搭建 的相关文章

  • linux---UDP代码通信

    udp连接特性 xff1a 无连接 xff1a 可以不构成连接就进行通信不可靠 xff1a 数据并不能保证可靠性面向数据报 xff1a 每条数据有长度限制 xff0c 整条数据发送整条数据接受 xff0c 传输不灵活 xff0c 但是不会存
  • virtualBox安装debian9.5的网络配置杂记

    2019 02 01补充 桥接模式设置方式 1 虚拟机界面 gt 设备 gt 网络 gt 网络 gt 网卡1 gt 桥接网卡 2 连接虚拟机 xff0c 为虚拟机配置一个ip地址即可 ip a add 192 168 0 107 24 de
  • 如何在linux shell脚本中自动输入密码.

    答案是需要通过expect 来实现 注意 如果没有 expect xff0c 需要预先安装 tony 64 pd2 yum info expect Loaded plugins fastestmirror Repodata is over
  • 动态捕捉(四)深度图像基础知识

    第一部分 xff1a 深度图像 xff08 depth image 也被称为距离影像 xff08 range image xff09 xff0c 是指将从图像采集器到场景中各点的距离 xff08 深度 xff09 作为像素值的图像 xff0
  • 完善二叉树的右指针

    对于一个二叉树 xff0c 每个结点有三个指针 xff0c 除了左右子节点指针外还有一个指向右边的结点的指针 现在给定一个二叉树 xff0c 每个结点的右指针为空 xff0c 让你把每一层的结点都连起来 xff08 默认是完全二叉树 xff

随机推荐

  • dockerfile文件参数

    一 背景 如果仅限于使用dockerhub里面的镜像 xff0c 是没办法满足我们实际的应用场景的 xff0c 所以我们需要创建属于自己的docker镜像 构建docker镜像需要编写dockerfile xff0c 却不知道语法怎么写 下
  • pycharm 不能单步调试(debug)的原因,或者点击debug不能进入断点。debug区域是灰色的

    如上图 xff0c 不要点击pycharm右上角的Debug 那样不能进入调试 xff08 在多个py文件都存在的情况下 xff09 xff0c 找到程序的入口点出 xff08 if name 61 61 34 main xff09 xff
  • 进程切换时是如何保存上下文的

    前言 当前操作系统大部分采用分时的进程调度 既每个进程运行一小段时间 然后切换到下一个进程运行 依次往复 当进程运行的时候是独占CPU的 此时操作系统是无法强行介入的 为了将执行权让出来 就需要硬件的配合了 硬件每个一个时钟周期 比如10m
  • 使用ROS节点控制PX4——总体流程

    1 安装ROS IDE xff1a Roboware Studio xff08 只支持linux xff09 网址 xff1a http www roboware me Roboware可以很方便的创建工作空间 xff0c 编写程序后可以自
  • 使用ROS节点控制PX4——位置控制

    上一篇简要介绍了ROS控制PX4并使用仿真环境进行调试的框架 点击打开链接 本篇将详细介绍ROS节点的发布与订阅细节 xff0c 并使用gazebo进行仿真调试 任务 xff1a 实现飞机的自动起飞 xff0c 然后在两点之间循环飞行数次
  • Odroid与电脑连接教程

    当我们在Odroid上安装了linnux系统后 xff0c 需要将电脑与Odroid进行连接 xff1a 一方面可以方便的把在电脑中调试成功的代码拷入odroid运行 xff0c 毕竟相比于电脑 xff0c Odroid还是很卡的 另一方面
  • Ue4行为树学习笔记 二

    Ue4行为树学习笔记 二 前言引用资料 行为树创建于布局任务设立 追逐随机巡逻AI控制器的设置最终设置尾声 前言 因为篇幅原因 xff0c 没看过上篇还请移步至 Ue4行为树学习笔记 一 引用资料 行为树快速入门指南 UE4学习笔记 xff
  • QGC Windows下编译环境搭建-------Qt5.7 + VS2015

    源码下载 打开qgc的github网址 xff0c 并选择最新的稳定版v3 4 https github com mavlink qgroundcontrol tree Stable V3 4 下载git xff0c 在电脑中进入希望下载的
  • ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: pip安装权限问题

    1 问题描述 xff1a 在使用pip安装transformers时 xff0c 报如下错误 xff1a pip install transformers ERROR Could not install packages due to an
  • 系统调用和函数调用的区别

    系统调用 操作系统服务的编程接口 通常由高级语言编写 xff08 C或C 43 43 xff09 程序访问通常通过高层次 的API接口 xff08 C标准库的库函数 xff09 而不是直接进行系统调用 每个系统调用对应一个系统调用编号 系统
  • FreeRTOS原理剖析:任务的基础知识

    1 任务的基础知识 1 1 前后台和多任务系统 在裸机程序中 xff0c 一般方式是在main 函数的while 1 中循环执行所有的程序 xff0c 有时 xff0c 使用中断去执行一些紧急的功能 xff0c 中断中执行的程序称为前台 x
  • FreeRTOS原理剖析:任务延时

    1 任务延时相关API函数 函数描述vTaskDelay 任务相对延时vTaskDelayUntil 任务绝对延时 xff0c 相对于任务相对延时而言 xff0c 即以一定的周期执行任务函数xTaskAbortDelay 任务中止延时函数
  • FreeRTOS原理剖析:空闲任务分析

    1 空闲任务相关API函数 函数描述portTASK FUNCTION 宏定义 xff0c 真正函数原型为void prvIdleTask void pvParameters 任务挂起中其它重要的API函数 介绍过的函数不列出 xff0c
  • FreeRTOS原理剖析:任务切换过程

    1 任务切换相关API函数 函数描述xPortPendSVHandler PendSV中断服务函数 xff0c 其实函数原型为PendSV Handler vTaskSwitchContext 检查任务堆栈使用是否溢出 xff0c 和查找下
  • FreeRTOS原理剖析:事件标志组

    1 事件标志组相关API函数 函数描述xEventGroupCreate 使用动态方式创建事件标志组xEventGroupCreateStatic 使用静态方式创建事件标志组vEventGroupDelete 删除事件标志组xEventGr
  • FreeRTOS原理剖析:任务调度器启动

    1 任务调度器启动相关API函数 函数描述vTaskStartScheduler 开启任务调度器 任务调度启动中其它重要的API函数 介绍过的函数不列出 xff0c 请参考前面的文章 xff1a 函数描述xPortStartSchedule
  • linux字符设备驱动 LED驱动程序

    1 字符设备驱动简介 Linux的外设主要分为三类 xff1a 字符设备 character device 块设备 block device 网络接口 network interface 字符设备是能像字节流一样读写操作的设备 xff0c
  • 学生时代的书单

    大话系列的书 xff0c 用独特的行文风格 xff0c 以风趣 幽默的语言向读者讲述 概念原理知识 xff0c 用漫画式的插图帮助读者理解晦涩 枯燥的技术 xff0c 让我们在快乐中掌握知识 xff01 1 大话通信 通信基础知识读本 作者
  • Linux字符时设备驱动 中断处理 按键

    1 Linux异常处理体系结构 Linux异常处理体系结构使用主要分成两步 xff1a 1 使用函数init IRQ 初始化中断体系结构 xff0c 源代码在arch arm kernel irq c中 2 用户使用函数request ir
  • [UAV] 无人机仿真平台搭建

    Amovlab 开源项目 从0开始的无人机仿真平台搭建1 基础环境1 1 新建本地代码仓库1 2 编译添加路径 xff08 记得 将Path To Prometheus替换成你的文件路径 xff09 1 3 安装ROS所需的其他插件或者库安