【PX4(一)】PX4二次开发环境搭建-QGroundcontrol配置和gazebo环境搭建

2023-10-23 17:51

本文主要是介绍【PX4(一)】PX4二次开发环境搭建-QGroundcontrol配置和gazebo环境搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以前装PX4二次开发环境遇到了很多坑,也查过了很多帖子都很难达到理想的效果,现在重新捡起来,在安装时遇到的问题一个一个记录与解决,现在我把我成功安装与编译运行所遇到的问题与解决方案全都记录下来,希望给初入坑的人提供帮助。

linux系统:ubuntu18.04 (非虚拟机)

网络条件:可以上谷歌

一、下载源码和子模块

git clone -b v1.11.3 https://github.com/PX4/PX4-Autopilot.git

下载完毕后,界面如下:

进入源码目录:

cd PX4-Autopilot

接着:

sudo chmod 777 -R * 

下载子模块:

git submodule update --init --recursive

这个过程时长视网络状况而定,我的网络可以上谷歌,所以7分钟就解决了。

二、安装依赖项,编译

进入源码目录,运行:

bash ./Tools/setup/ubuntu.sh

接下来,输入如下命令检查gcc安装状态arm-none-eabi-gcc --version,如果提示没有该工具,则按照提示下载:

下载的命令:

sudo spt update
sudo apt install gcc-arm-none-eabi

再次查看该工具,提示如下即安装成功。

然后编译PX4固件,编译之前我们先查看PIX飞控对应版本的编译命令,

(官网:https://docs.px4.io/master/en/dev_setup/building_px4.html)

我的飞控为Pixhawk 4,所以进入源码目录并执行:

cd PX4-Autopilot
make px4_fmu-v5_default

编译过程中可能会出现如下错误:

/usr/include/newlib/math.h:18:3: error: '__ULong' does not name a type   __ULong i[2];  ^~~~~~~compilation terminated due to -Wfatal-errors.

按照字面意思理解,这个错误的意思就是源码中出现了未知的数据类型ULong,这是因为新的代码适用于新的系统,而老的系统没有定义这个。所以我们要去做的就是去系统的头文件中定义这个类型:

在/usr/include/newlib/math.h前面添加定义#define __ULong unsignedlong就行(具体位置:#ifndef _MATH_H_ 后面)。

再次编译,该错误解决,但出现如下新错误:

../../platforms/common/include/px4_platform_common/atomic.h:169:34: error: parameter 'expected' set but not used [-Werror=unused-but-set-parameter]  inline bool compare_exchange(T *expected, T desired)                                
compilation terminated due to -Wfatal-errors.cc1plus: all warnings being treated as errors

错误解释:当我们在函数中定义一个变量,我们给这个变量赋初值,但是在我们的函数结束之前,这个值并没有用于使用,换句话说,这个变量是没有实际意义的,完全可以去掉不用。

针对PX4 1.11.0 可修改文件PX4-Autopilot\cmake\px4_add_common_flags.cmake,注释-Werror行:

针对PX4 1.8.0,可修改文件PX4-Autopilot\cmake\common\px4_base.cmake,注释-Werror行。

再次编译,该错误变成警告,可忽略。

最后,成功编译。

三、地面站的安装

在上面这个网站下载QGC:

Releases · mavlink/qgroundcontrol · GitHub

在这里,我选择了4.0.11版本。不选择新版本的原因是安装完后不能打开,可能是版本太高的原因与我linux一些软件不兼容。

QGC安装与运行说明文档:

Download and Install · QGroundControl User Guide

按如下图安装运行:

对于运行后QGC地面站没有地图显示的问题,科学上网后问题得到解决。

在PX4源码目录下,运行

make px4_sitl jmavsim

这时候QGC就会与jmavsim连接上啦,可以在地面站进行航点规划

四、gazebo环境搭建与使用

1、下载模型

Building PX4 Software | PX4 User Guide

从这里下载gazebo模型,放到~/.gazebo/models/里,若没有.gazebo则运行一下gazebo,若没有models则新建一个。

2、更改python默认编码,sudo gedit /usr/lib/python2.7/site.py,找到setencoding()函数修改 encoding=”utf-8”

3、先安装一下mavros相关包,看官方说明文档这里,我选择二进制安装运行下面这一步就行:

ROS with MAVROS Installation Guide | PX4 User Guide

这里我将kinetic改为我ubuntu18.04的ros版本melodic。

进入PX4源码目录,运行

make px4_sitl gazebo

 

根据网上的说法,说这些错误不影响代码的运行,故忽略。

对此,我们尝试用QGC航点规划,来控制GAZEBO的无人机,效果如下图:

参考官方文档链接:Gazebo Simulation | PX4 User Guide

 后续将继续完善~……

这篇关于【PX4(一)】PX4二次开发环境搭建-QGroundcontrol配置和gazebo环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/269480

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML