Pixhawk原生固件PX4之SITL软件在环仿真

2023-05-16

欢迎交流~ 个人 Gitter 交流平台,点击直达:Gitter

故事开始之前,先按照笔者的这一篇博客在Ubuntu上完成固件的编译。


jMAVSim仿真

jMAVSim仿真不需要任何配置,直接输入指令即可

cd ~/src/Firmware
make posix_sitl_default jmavsim

之后便会出现下图所示的界面

gazebo5

可以在终端中输入指令进行飞行操作

commander takeoff

但是显然使用地面站会更加方便,可以在地面站上自由的切换飞行模式,也可以对Mission模式进行仿真。

可以调出地面站的虚拟摇杆进行简单操作。听说某些遥控器可以直接连QGC,想想应该会很棒。

Linux下可以用两种方法打开QGC,建议选择AppImage,点击图片就可以运行,不用每次都输入冗长的./qgroundcontrol-start.sh
建议下载完成后将文件复制到Home目录下,并执行下列操作增加可执行权限
chmod +x ./QGroundControl.AppImage

QGC支持摇杆,部分遥控器可以直接连接地面站进行操作。开启虚拟摇杆的请看这里

qgc



Gazebo仿真

在使用Gazebo进行仿真之前有一些准备工作必不可少。

安装Gazebo7

  • 设置您的计算机以接受来自packages.osrfoundation.org的软件。
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
  • 添加秘钥
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
  • 安装Gazebo7
 # 首先更新源
 sudo apt-get update
 # 安装Gazebo7
 sudo apt-get install gazebo7 
 # 开发者需要安装额外的包
 sudo apt-get install libgazebo7-dev

现在可以尝试启动gazebo,直接从命令行启动

gazebo

首次打开 Gazebo 会比较慢,因为其需要下载一些模型文件

ga

在运行 Gazebo 仿真之前首先要进行相关文件的配置

Gazebo配置

  • 安装protobuf库,它用作Gazebo的接口。

    sudo apt-get install libprotobuf-dev libprotoc-dev protobuf-compiler libeigen3-dev 
  • 在仿真文件夹目录顶层创建一个 Build 文件夹

    cd ~/src/Firmware/Tools/sitl_gazebo
    mkdir Build
  • 添加路径
# 设置插件的路径以便 Gazebo 能找到模型文件
  export GAZEBO_PLUGIN_PATH=${GAZEBO_PLUGIN_PATH}:$HOME/src/Firmware/Tools/sitl_gazebo/Build
# 设置模型路径以便 Gazebo 能找到机型
  export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:$HOME/src/Firmware/Tools/sitl_gazebo/models
# 禁用在线模型查找
  export GAZEBO_MODEL_DATABASE_URI=""
# 设置 sitl_gazebo 文件夹的路径
  export SITL_GAZEBO_PATH=$HOME/src/Firmware/Tools/sitl_gazebo
  • 切换到构建目录并从中调用CMake
cd Build
cmake ..
  • 构建 gazebo 插件
make

万事俱备,只欠东风。现在就可以运行Gazebo仿真了,以最基本的iris仿真为例

cd ~/src/Firmware
make posix_sitl_default gazebo

你会看到下面的界面,操作很直观,其他机型的仿真自行查看PX4中文维基。

gazebo1

gazebo2

上图是Mission模式的仿真。

在Gazebo中可以先选中飞行器,右键Follow,这样飞行器会一直在界面中间,按Esc退出



MAVROS仿真

MAVROSROS包允许在运行ROS的计算机、支持MAVLink的飞控板以及支持MAVLink的地面站之间通讯。虽然MAVROS可以用来与任何支持MAVLink的飞控板通讯,但是本文仅就PX4飞行栈与运行ROS的协同计算机之间的通讯予以说明。

安装ROS indigo

前面我们已经安装过Gazebo7了,现在只需要装ROS桌面版,注意不要安装full版,Gazebo2(ROS-indigo自带)不能与更新版本的Gazebo共存。

  • 安装ROS indigo
sudo apt-get install ros-indigo-desktop 

然后,安装ros-gazebo接口库等

~$ sudo apt-get install ros-indigo-gazebo7-  
ros-indigo-gazebo7-msgs         ros-indigo-gazebo7-ros-control  
ros-indigo-gazebo7-plugins      ros-indigo-gazebo7-ros-pkgs  
ros-indigo-gazebo7-ros  

这里就要讲到Linux系统下的一个常用快捷键[Tab]了
它具有“命令补全”与“文件补齐”的功能,可以让我们少打很多字,还阔以避免我们打错命令或文件名。
上面我们在输入了sudo apt-get install ros-indigo-gazebo7-后连续输入两个[Tab],所有以ros-indigo-gazebo7-开头的命令都显示出来了。
至少需要安装ros-indigo-gazebo7-ros-pkgs其他的看着办吧

  • 初始化 rosdep

在开始使用ROS之前你还需要初始化rosdep。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。

sudo rosdep init
rosdep update
  • 将ROS环境变量添加到bash会话中
echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

安装MAVROS

  • 安装mavros依赖的包,使用apt-get安装即可:
$ sudo apt-get install ros-indigo-mavros ros-indigo-mavros-extras ros-indigo-control-toolbox

假定你有一个catkin工作空间位于~/catkin_ws,如果没有,则创建一个:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws

mavros包可以采用apt-get install ros-indigo-mavros*安装,也可以从github上下载编译

$ cd ~/catkin_ws/src
$ git clone https://github.com/mavlink/mavros.git
$ cd mavros
# 切换到indigo-devel分支
# 可以通过git branch -a查看所有远程分支
$ git checkout indigo-devel
  • 建立自己的外部控制程序包

外部控制程序offboard_node.cpp以及释义请点击PX4中文维基。

根据ROS官网教程,先建一个ROS包,

$ cd ~/catkin_ws/src
$ catkin_create_pkg offboard roscpp mavros geometry_msgs

这一步会创建一个名为offboard的新程序包,这个程序包依赖于roscpp 、mavros以及geometry_msgs。

在offboard目录下生自动成两个文件夹include和src。我们将外部控制例程offboard_node.cpp放入刚刚生成的src目录下。然后修改/catkin_ws/src/offboard目录下的CMakeLists.txt文件。取消掉一些注释,生成相应节点(否则会出现找不到节点的错误)。

cmk

注意: 第一个框
add_executable(offboard_node src/offboard_node.cpp)
第一个offboard_node是我们根据src/offboard_node.cpp创建的节点的名称

最后,在catkin工作空间(catkin_ws)中,使用catkin_make工具从源文件构建和安装一个包:

$ cd ~/catkin_ws
$ catkin_make

catkin_make命令在catkin 工作空间中是一个非常方便的工具。如果你查看一下当前目录应该能看到’build’和’devel’这两个文件夹。在’devel’文件夹里面你可以看到几个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层,想了解更多请参考catkin文档。接下来首先source一下新生成的setup.*sh文件:

$ source devel/setup.bash

要想保证工作空间已配置正确需确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录,采用以下命令查看

$ echo $ROS_PACKAGE_PATH
/home/<youruser>/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks

到此你的工作环境已经搭建完成,可以进行mavros仿真了。

启动仿真

通过MAVROS应用在Gazebo模拟的Iris四旋翼上。最后,应该会看到飞行器缓慢起飞到高度2米。

# 切换到固件目录
cd ~/src/Firmware
# 启动gazebo仿真
make posix_sitl_default gazebo
# 启动MAVROS,链接到本地ROS
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
# 运行外部控制程序
rosrun offboard offboard_node

或者可以先升级ROS环境后启动px4的节点

cd <Firmware_clone> 
make posix_sitl_default
source ~/catkin_ws/devel/setup.bash    // (只有mavros是用源码编译的才需要)
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build_posix_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_gazebo
roslaunch px4 mavros_posix_sitl.launch

最终结果如下

gazebo3

gazebo4

可以发现,现在在地面站上无论切换什么飞行模式,飞行器都会自动返回Offboard外部控制模式。

常见错误解决

  • 启动时出现No namespace found

下载Model文件到目录~/.gazebo/models中。Linux中隐藏文件使用Ctrl + H查看,~/即Ubutnu下的
Home文件夹。

hg clone https://bitbucket.org/osrf/gazebo_models
mkdir -p ~/.gazebo/models
cp -r gazebo_models/* ~/.gazebo/models

                                          By Fantasy

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

Pixhawk原生固件PX4之SITL软件在环仿真 的相关文章

  • PX4项目学习::(六)项目的配置与编译(Cmake)

    一 简介 在讲解编程之前 xff0c 我得交代两个重要的东西 xff0c 因为这两个东西存在于px4的源码系统当中 xff0c 非常重要 xff0c 它们就是make和Cmake 首先谈谈何为make 熟悉linux系统的朋友对make肯定
  • PX4项目学习::(一)项目架构::软件简明架构

    1 软件构架 PX4软件架构由两个层次组成 xff1a 一是飞行控制栈 flight stack xff0c 即自驾仪的软件解决方案 xff0c 二是中间件 xff0c 一种可以支持任意类型自主机器人的通用机器人中间件 2 1 中间件 中间
  • PX4项目学习::(四)中间件::驱动框架

    驱动框架 PX4的代码库使用一个轻量级的 xff0c 统一的驱动抽象层 xff1a DriverFramework POSIX和 QuRT的驱动写入这个驱动框架当中 旧的NuttX驱动是基于设备 架构的 xff0c 以后将会移植到驱动框架之
  • PX4项目学习::(四)中间件::任务管理与调度

    目录 1 PX4模块运行方式2 PX任务启动方式Task工作队列 参考文献 1 PX4模块运行方式 PX4项目采用两种方式运行 Tasks Work queue tasks Tasks 模块在自己的任务中运行 xff0c 具有自己的堆栈和进
  • PX4项目学习::(五)项目启动流程(纯代码讲解)

    PX4启动流程 xff0c 分为4步 xff1a 1 start xff1a 上电之后程序入口为Firmware NuttX nuttx arch arm src stm32 stm32 start c中的 start函数 xff0c 负责
  • 无人机原理::(一)模型框架与控制系统框架详解

    0 完整框图 1 无人机软件框图 上图为PX4固件框架总览 xff0c 蓝色方块是指飞控系统中的各个模块 下面分别介绍各个模块的作用 xff1a Mavlink模块最为常用 xff0c 可以调整为off board模式以配合机载电脑 xff
  • 基础理论知识

    序 xff1a 综述 机器人专业需要学习什么理论知识 robinvista的博客 CSDN博客 零 基础中的基础 数学 力学 运动学 一 动力学建模与仿真 1 机器人 机器人学基础 蒋志宏 微信读书 2 无人机 全权的两本书 B站有课 3
  • 面试流程总结

    一 HR简单了解情况 xff08 会来了解一般就没啥多说的 xff0c 就是了解下你的意象 xff0c 除非你自己不想去 xff09 二 技术面 一般分两面 xff0c 有些公司急缺人 xff0c 或者一些小公司及其它情况也有可能 面一次
  • 8款设计师常用漂亮的HTML CSS表格样式

    原来的地址 xff1a http www laozuo org 2040 html 我们在布局网站的时候以前都可能直接用TABLE设计 xff0c 如今都更流行使用CSS设计 xff0c 这样对于网站结构更加友好和轻便 下面老左整理的8款设
  • Apollo车辆控制模块::框架与流程

    self drive car 学习笔记 第11课 xff1a 控制理论 鸿 H的博客 CSDN博客 智能驾驶进阶8 控制 次言的博客 CSDN博客 一 框架图 控制输入 xff1a 主要来源于规划模块以及反馈阶段信息 xff08 如loca
  • rt-thread源码分析篇十五:rt_application_init函数分析

    一 rt application init函数调用 二 函数分析 span class token keyword void span span class token function rt application init span s
  • USB 协议整理 八:STM32官方USB库

    https blog csdn net asher zhou article details 105519209 https blog csdn net zcshoucsdn article details 78936456 本章摘取 ST
  • 常用SDK整合

    databuilding SDK官方地址 xff1a https developer android google cn topic libraries data binding
  • 机会留给有准备的人

    通过这次考试 xff0c 发现自己很多不足 xff0c 关上书完全是空白 xff0c 努力吧 xff0c 还有机会
  • 精致代码(C算法——进制问题10-->16)

    xff08 精致算法 xff09 开发思维 十进制转十六进制 蓝桥练习题 xff1a 十进制转十六进制 资源限制 时间限制 xff1a 1 0s 内存限制 xff1a 512 0MB 问题描述 十六进制数是在程序设计时经常要使用到的一种整数
  • C语言多线程同步 -- 信号量semaphore.h

    多线程读文件使用fopen xff0c 出现BUG xff0c 然后寻找同步方法 xff0c 找到这个 信号量 首先需要用sem init 初始化sem t型变量 xff0c 并设置初始信号量 比如设置为1 每次调用sem wait sem
  • 错误管理记录机制(一)

    当执行configure aprutil时 xff0c 提示 xff1a sed 不是内部或外部命令 xff0c 也不是可运行的程序或批处理文件 这是因为 configure aprutil bat 文件中使用了 Linux 下的 sed
  • 从零编写一个双目视觉SLAM系统(一):一个滑窗的PnP里程计

    最近在尝试用光流法写一个基本的双目视觉SLAM xff0c 希望通过这个项目把SLAM的各个模块都自己实现一遍 xff0c 以此加深对SLAM各个模块的理解 目前刚完成了一个通过求解相邻帧PnP问题的双目视觉里程计 xff0c 基本有了一个
  • 盘点丨无人机与AI 深度融合及跨域应用

    在密集的竹林里 xff0c 一群无人机自如地穿梭其中 xff0c 像组织有序的鸟群 xff0c 时而灵巧地掠过低矮灌木丛 xff0c 时而交叉飞行变换队形 这不是科幻内容 xff0c 而是浙江大学团队研发的自主导航的集群飞行系统 xff0c
  • 安全即代码:为Go实现lint和gosec | Gopher Daily (2020.08.05) ʕ◔ϖ◔ʔ

    每日一谚 xff1a a little copying is better than a little dependency 有意想学习容器或Kubernets的童鞋可以了解一下我的慕课网实战课 xff1a k8s实战 https codi

随机推荐

  • 终于有人把RISC-V讲明白了

    http m elecfans com article 653167 html
  • OpenHarmony 3.1 Beta版本关键特性解析——ArkUI容器类API介绍

    xff08 以下内容来自开发者分享 xff0c 不代表 OpenHarmony 项目群工作委员会观点 xff09 刘鑫 容器类 xff0c 顾名思义就是存储的类 xff0c 用于存储各种数据类型的元素 xff0c 并具备一系列处理数据元素的
  • 200个DIY及科技网站

    http www powerlabs org 高能diy 电磁枪 微波武器 http www altair org tesla html 高电压diy爱好者 http www richieburnett co uk tesla shtml
  • Linuxunexpected error reading Dockerfile: is a directory--2021-08-25

    编写完Dockerfile后需要通过命令将其制作为镜像 mobaXterm报错 unexpected error reading Dockerfile read var lib docker tmp docker builder314741
  • 在Eclipse中配置Tomcat

    简介 xff1a 1 3步为 xff1a 把Tomcat配置到eclipse中 4 7步为 xff1a 把新建的Web项目部署到Tomcat中并运行 最后一部分为 xff1a 改变Web工程的真实部署路径到Tomcat中目录下 x1f447
  • ROS与C++入门教程-消息-序列化和适配类型

    原文地址 xff1a ROS与C 43 43 入门教程 消息 序列化和适配类型 创客智造 说明 xff1a 介绍序列化和适配类型在C Turtle版本增加 序列化到内存 使用ros serialization serialize 函数 xf
  • 前方高能,官方教程:教你如何玩转 GitHub !

    回复 1024 xff0c 送你一个特别推送 作为程序员 xff0c 一般手上会有三把剑 xff0c 用好了这三把剑 xff0c 对于编程来说 xff0c 对于解决编程中遇到的 Bug xff0c 都应该能够轻而易举的解决 程序员手中的三把
  • 树莓派安装宝塔面板后无法连接VNC

    解决方法 xff1a 登陆宝塔面板后台 xff0c 在 安全 中放行端口5900即可
  • Python并行处理视频帧

    参考链接 xff1a Speedy Computer Vision Pipelines using Parallelism 方案 xff1a 使用Python多进程编程 xff0c 将视频分成多个小段 xff0c 可按照CPU核数num p
  • 深度学习目标检测之SSD

    经典论文SSD笔记 论文链接 xff1a SSD Single Shot MultiBox Detector论文报告 xff1a ssd eccv2016 slide目标检测百页综述 xff0c 从传统方法到深度学习 xff1a Objec
  • C++编译报错fmt未定义的引用

    对 fmt v5 internal basic data POWERS OF 10 64 未定义的引用 1 最简单的方法 xff1a 把代码中printf的输出全部换成std cout或者其他的 2 安装fmt包 git clone htt
  • PyG/torch_geometric的一些坑

    安装PyG span class token keyword import span os span class token keyword import span torch os span class token punctuation
  • Pixhawk官网飞行模式介绍

    欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a Flight Mode 飞行模式 原文地址 http dev px4 io concept flight modes html 飞行模式定义了系统在任何给定时间的状态
  • PX4中文维基汉化项目启动

    欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a 敬启者 xff1a 打算进行PX4官网的汉化工作 GitBook 与官网的方式相同 xff0c 我们也是将网站以GitBook的方式呈现给大家 汉化后的版本先点点点点
  • Windows / Ubuntu操作系统下Pixhawk原生固件PX4的编译方法

    欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a 更新于2017 3 13 FAQ 本文说明针对 PX4 Firmware 1 6 0 问题 1 xff1a 找不到python jinja2模块 CMake Erro
  • Sublime Text中文乱码的解决方法

    Sublime Text Sublime Text这款代码编译器相当不错 xff0c 自带高亮显示 xff0c 界面清新 但是Sublime Text默认是不支持中文显示的 xff0c 这种中文乱码的行为万万是不能够接受的 这里简单介绍一下
  • 自制Pixhawk飞控板烧写BootLoader教程

    对于自己制作的飞控板 xff0c 通过USB连接电脑之后 xff0c 开始电脑是无法检测到飞控板的端口存在的 检测不到端口 xff0c 就不能用控制台给飞控板烧写固件 xff0c 就不能用QGroundControl xff0c 就不能进行
  • Pixhawk原生固件PX4之常用函数解读

    欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff
  • Pixhawk原生固件PX4之添加uORB主题

    欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a 本说明针对 Firmware v1 5 4 1 添加流程说明 1 在Firmware msg下新建uORB的成员变量 xff0c eg xxx msg 2 在Firm
  • Pixhawk原生固件PX4之SITL软件在环仿真

    欢迎交流 个人 Gitter 交流平台 xff0c 点击直达 xff1a 故事开始之前 xff0c 先按照笔者的这一篇博客在Ubuntu上完成固件的编译 jMAVSim仿真 jMAVSim仿真不需要任何配置 xff0c 直接输入指令即可 s