ROS学习笔记之——PX4开发
Posted gwpscut
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS学习笔记之——PX4开发相关的知识,希望对你有一定的参考价值。
PX4 是一款专业级飞控。 它由来自业界和学术界的世界级开发商开发,并得到活跃的全球社区的支持,为从竞速和物流无人机到地面车辆和潜水艇的各种载具提供动力。
目录
基本概念
首先,我们学习一些基本的概念~
PX4 的一些主要功能包括:
- 可控制许多不同的设备机架/类型,包括:飞机(多旋翼,固定翼和垂直起降),地面车辆和水下潜航器。
- 适用于设备控制器,传感器和其他外围设备的硬件选择。
- 灵活而强大的飞行模式和安全功能。
- PX4 是一个大型无人机平台的核心部分,它们都包括 QGC 地面站,Pixhawk 硬件 (opens new window),还有MAVSDK (opens new window)用于与机载计算机集成,相机还有其他使用 MAVLink 协议的硬件。
PX4/ArduPilot:两种都是开源的可以烧写到Pixhawk飞控中的自驾仪软件。
APM(Ardupilot Mega)早期也是一款自驾仪硬件,但是更新到了APM3.0版本后,这款自驾仪也就走到了终点。而ArduPilot是属于APM的原生固件,现在ArduPilot也全面支持Pixhawk,而大家也习惯将ArduPilot称为APM。
两个不同固件都是应用C++开发的,区别在于,PX4是Pixhawk的原生固件,它的架构更加清晰容易维护,但是功能比起APM来讲比较少;而APM相对而言,性能更加稳定成熟,功能也更加丰富,与之相对的就是架构不是太清晰所以不利于维护和修改。
QGroundControl(QGC地面站)
地面控制站称为 QGC 地面站 (opens new window)。 您可以使用QGroundControl 将PX4 加载(烧写)到飞行器控制硬件上,可以设置飞行器,更改不同参数,获取实时飞行信息以及创建和执行完全自主的任务。
QGC即在地面的基站,用于多旋翼飞行器起飞前对自驾行进行传感器校准和参数调整等初始化工作,以及在多旋翼飞行时,通过无线数据模块接受多旋翼的飞行状态并实时发送控制指令。(地面站有:QGC(QGround Control)和MP(Mission Planner)两种不同版本。一般来说,PX4固件使用QGC操作,APM固件配套MP使用。)
QGroundControl 可以在 Windows,android,MacOS 或 Linux 上运行(直接下载安装即可,但mac上好像安装不了,可能是权限问题,打开设置,安全与隐私、通用设置一下即可)。
下载链接:http://qgroundcontrol.com/downloads/
机体/飞行控制板
PX4最初设计为在 Pixhawk 系列 飞控上运行,但现在可以在 Linux 计算机和其他硬件上运行。 选择飞行控制板时,您应当考虑飞行器的物理尺寸限制,想要执行的活动,还有必不可少的成本。
所谓的Pixhawk是一款低成本高性能的飞控硬件平台,相当于一个载体,承载无人机运行的代码。
Pixhawk的构造:PIXHAWK拥有168MHz的运算频率,其中主处理器为STM32F427,协处理器STM32F103,主处理器和协处理器之间采用串口通信方式。为内置两套陀螺和加速度计MEMS传感器,互为补充矫正,内置三轴磁场传感器并可以外接一个三轴磁场传感器,同时可外接一主一备两个GPS传感器,在故障时自动切换。
传感器
PX4 使用传感器来确定飞行器状态(稳定和启用自动控制所需)。 系统*最低要求 *陀螺仪,加速度计,磁力计(罗盘)和气压计。 需要 GPS 或其他定位系统来启用所有自动模式和一些辅助模式。 固定翼和 VTOL 飞行器还应包括空速传感器(强烈推荐)。
加速度计其定义为去掉重力后的整体加速度。不太好理解,简单来说重力的分解,来测算物体所受的加速度。加速度计也可以测量横滚角、俯仰角。
优点:加速度计测量角度没有积累误差,低频特性好,可以测量低速的静态加速度。
缺点:因为其低频特性,容易受高频振动的影响。
陀螺仪主要测量角速度。利用高速回转体的动量矩敏感壳体相对惯性空间绕正交于自转轴的一个或二个轴的角运动检测装置。优点就是高频特性比较好,可以测量飞机的三个角,即横滚角、俯仰角和偏航角。
磁力计也被称为指南针可以得到当前磁场的分布。容易收到外界环境的干扰,而且只可以测量到飞机的偏航角。
无线电控制(遥控)
遥控(RC)系统用于 手动 控制机体。 它由一个遥控装置组成,使用发射机来与飞行器上的接收机通信。 一些 RC 系统还可以接自动驾驶仪传回的收遥测信息。
遥控系统:由遥控器和接收器、解码器和伺服系统组成.接收器接到遥控器信号(通常为PWM信号)进行解码,分离出动作信号传输给伺服系统,伺服系统则根据信号做出相应的动作。
动力系统及其他硬件设备
基本动力套装包括单片机、电机、电调、螺旋桨等套装。其余硬件设备还包括机架、电池、GPS、蜂鸣器等等,
输出:电机,舵机,执行器
PX4使用输出来控制:电机速度(例如通过ESC),飞行平面如副翼和襟翼,相机触发器,降落伞,抓手,和许多其他类型的有效载荷。
例如,下面的图像显示 Pixhawk 4 和 Pixhawk 4 mini 的 PWM 输出端口。
电调 & 电机
许多 PX4 无人机使用无刷电机,其由飞行控制器通过电子调速器(ESC)驱动(ESC将来自飞行控制器的信号转换为合适的功率水平,传递给电机)。
电池/电源
PX4 无人机通常由锂聚合物(LiPo)电池供电。 电池通常使用*电源模块 或电源管理板 *连接到系统,它为飞行控制器和 ESC(用于电动机)提供单独的动力。
安全开关
机体通常必须有一个 安全开关,然后才能使用 解锁(解锁后,电机会供电,螺旋桨开始旋转)。 通常,安全开关被整合到GPS设备中,但也可能是一个单独的物理组件。
数传电台
数传电台 可以在诸如 QGC 地面站 与运行 PX4 的机体之间提供无线 MAVLink 连接。 这使得飞机飞行中调试参数、实时检查遥测信息、更改任务等等成为了可能。
机载计算机
PX4 可以通过串行接线或 WiFi 由独立的机载伴飞计算机进行控制。 机载计算机通常使用 MAVLink API(如 MAVSDK 或 MAVROS)进行通信。
SD卡(可移除储存器)
PX4 使用 SD 储存卡存储 飞行日志,而且还需要内存卡才能使用 UAVCAN 外围设备,运行 飞行任务。
默认情况下,如果没有 SD 卡,PX4 将在启动时播放 格式化失败(2-声短响) 两次(且上述需要储存卡的功能都不可用)。
开发指南
PX4开发指南Mac OS
PX4代码可以在 Mac OS, Linux 或者 Windows上进行开发,建议在Mac OS和Linux上进行开发,因为图像处理和高级导航在windows上不容易开发。
这里看看在Mac OS上进行安装(之前博客《ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》已经在linux上配置了~)
第一步就是从Mac应用商店中安装Xcode。打开一个新的终端并安装命令行工具:
xcode-select --install
然后安装Homebrew 。Homebrew 是最简单和灵活的方式,用来在 Mac OS X 安装 Linux 工具包(https://blog.csdn.net/jdsjlzx/article/details/108081327)。
安装过程很简单:
https://gitee.com/cunkai/HomebrewCN
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
HomeBrew是ruby脚本,但是mac下不需要安装ruby解释环境,系统自带了。
安装好后,可以运行下面命令,通过检查homebrew版本确认是否安装成功。
brew –v
安装好Homebrew以后,拷贝以下命令到终端命令行:
brew tap PX4/px4
brew tap PX4/simulation(安装不了)
brew update
brew install git bash-completion genromfs kconfig-frontends gcc-arm-none-eabi
brew install astyle cmake ninja
# simulation tools
brew install ant graphviz sdformat3 eigen protobuf
brew install opencv
再安装以下:
brew tap PX4/px4
brew install px4-dev
# 可选,但建议安装额外的仿真模拟用工具
brew install px4-sim
遇到安装不成功,可以看看https://www.cnblogs.com/my-blogs-for-everone/articles/14256182.html
然后安装python包:
sudo easy_install pip
sudo pip install pyserial empy pandas jinja2
Java for jMAVSim
brew install xquartz java
Gazebo仿真
sudo easy_install pip
sudo -H pip install pyserial empy toml numpy pandas jinja2 pyyaml
# install required packages using pip3
python3 -m pip install --user pyserial empy toml numpy pandas jinja2 pyyaml pyros-genmsg packaging
# if this fails with a permissions error, your Python install is in a system path - use this command instead:
sudo -H python3 -m pip install --user pyserial empy toml numpy pandas jinja2 pyyaml pyros-genmsg packaging
jMAVSim 仿真模拟
brew install --cask xquartz
brew install px4-sim-gazebo
gazebo安装出错:http://gazebosim.org/tutorials?tut=install_on_mac
其他额外工具
brew tap AdoptOpenJDK/openjdk
brew install --cask adoptopenjdk15
brew install px4-sim-jmavsim
安装完毕
安装IDE vscode
下载px4的源代码
git clone https://github.com/PX4/PX4-Autopilot.git
通过vscode打开并编译(Select the PX4-Autopilot directory and then press OK.)
将推荐的都安装,然后cmake(依次点击小红框,选择px4_sitl)
调试成功后会显示:
然后点击build(其中可能会报错,需要安装一些依赖,安报错的要求安装即可)
You can then kick off a build from the config bar (select either Build or Debug).
After building at least once you can now use [code completion](#code completion) and other VSCode features.
下载 PX4 源代码
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/*
初次编译(使用 jMAVSim 模拟器)
导航到 Firmware 目录,并使用以下命令启动 jMAVSim:
make px4_sitl jmavsim
如下图所示
报错了,估计就是JDK版本不一致
参考链接:https://docs.px4.io/master/en/simulation/jmavsim.html#troubleshooting
里面要安装版本15好像没错~但是细细一看,应该是16才对,所以重新运行
brew install --cask adoptopenjdk16
再试试~终于ok了~
打开地面站
然后运行
pxh> commander takeoff
搭建第一个PX4应用
PX4 系统架构概述
PX4 由两个主要部分组成:
- 一是 飞行控制栈(flight stack) ,该部分主要包括状态估计和飞行控制系统;
- 另一个是 中间件 ,该部分是一个通用的机器人应用层,可支持任意类型的自主机器人,主要负责机器人的内部/外部通讯和硬件整合。
所有的 PX4 支持的无人机机型(包括其他诸如无人船、无人车、无人水下航行器等平台)均共用同一个代码库。 整个系统采用了响应式(reactive)设计,这意味着:
- 所有的功能都可以被分割成若干可替换、可重复使用的部件。
- 通过异步消息传递进行通信。
- 系统可以应对不同的工作负载。
顶层软件架构
下面的架构图对 PX4 的各个积木模块以及各模块之间的联系进行了一个详细的概述。 图的上半部分包括了中间件模块,而下半部分展示的则是飞行控制栈的组件。
参考资料
- PX4 Github主页:PX4 Github (代码有分支,请查看v1.10.0分支)
- PX4开发者手册:PX4手册 v1.11 (手册有分支,请查看v1.11.0分支)
- PX4官方仿真教程 : PX4手册 - gazebo simulation
-
PX4环境配置可参考PX4手册 - getting_started,请选择1.11分支。
以上是关于ROS学习笔记之——PX4开发的主要内容,如果未能解决你的问题,请参考以下文章