一:ROS2+gazebo+PX4环境搭建:环境搭建到无人机起飞

前言

写博客记录学习的过程。

由于博客是安装完环境后写的,因此实际可能会有一些出入,但是实际上也大差不差的。

环境搭建

前置环境

  • ROS2 humble
  • Gazebo Classic (11)

1.下载 PX4 源码

在你的 Home 目录下,用 Git 克隆 PX4 的代码仓库,并更新所有子模块。

git clone https://github.com/PX4/PX4-Autopilot.git --recursive

注意:由于这个源码中包含许多子模块,因此不建议到github主页下载zip再解压,这样做会缺失许多子模块。使用大陆的网络克隆起来会十分慢,因此强烈建议大家使用网络加速!

2.运行自动安装脚本

PX4 提供了自动化脚本,可以帮你安装编译仿真环境所需的所有依赖。

cd PX4-Autopilot bash ./Tools/setup/ubuntu.sh

由于我这里只用到仿真,并没有与阵势的硬件交互,所以我在运行自动安装脚本的时候,选择不安装固件/编译环境,还有一个原因是安装编译环境的时间太长了,大家可以自行选择。

cd PX4-Autopilot bash ./Tools/setup/ubuntu.sh --no-nuttx

3.编译并运行一个事例

PX4-Autopilot目录下

make px4_sitl gazebo-classic_iris

注意:第一次编译会有点慢,这是正常情况,请耐心等待

像这样弹出gazebo,并且gazebo中显示一个黑色的无人机,则成功了!

4.安装并配置 QGC(地面站)

QGroundControl (QGC) 就是你在地面监控和操控飞机的电脑软件 。安装前,需要先给 Ubuntu 系统做一点小配置,确保它能正常和“飞机”通信。

# 将你的用户添加到 dialout 组,以便访问 USB 设备 sudo usermod -aG dialout "$(id -un)" # 移除 ModemManager,它会干扰串口通信 sudo apt-get remove modemmanager -y # 安装 GStreamer 相关库,用于支持视频流 sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y sudo apt install libfuse2 -y sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -y

https://docs.qgroundcontrol.com/master/zh/qgc-user-guide/getting_started/download_and_install.html中找到linux版本下载并将固件移到主目录下。

# 赋予 AppImage 文件执行权限 chmod +x ./QGroundControl-x86_64.AppImage

5.安装 Micro-XRCE-DDS-Agent(ROS2与PX4通信桥梁)

# 安装依赖 sudo apt install -y ros-humble-ros-base ros-humble-geometry-msgs ros-humble-sensor-msgs # 编译Micro-XRCE-DDS-Agent cd ~ git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git cd Micro-XRCE-DDS-Agent mkdir build && cd build cmake .. make sudo make install sudo ldconfig /usr/local/lib/

注意:在编译Micro-XRCE-DDS-Agent时,对网络的要求很高,使用国内网络的朋友建议开启网络加速,即使开启了网络加速,也需要一定时间,此时需要耐心等待。

6.配置 PX4 的 ROS2 接口

cd ~/PX4-Autopilot # 你的PX4目录 # 安装Python依赖 pip3 install --user -U empy pyros-genmsg setuptools # mkdir -p ros2_ws/src cd ros2_ws/src # 克隆PX4消息包 git clone https://github.com/PX4/px4_msgs.git git clone https://github.com/PX4/px4_ros_com.git # 编译 cd .. colcon build

注意:在安装Python依赖时,可能会出现版本的问题,此时需要调整版本,反正我是用这个:

# 降级到稳定组合 pip3 install --user empy==3.3.4 setuptools==59.8.0

注意:每次创建PX4的工作空间,都要克隆PX4的消息包。

7.启动

# 终端1:启动Micro-XRCE-DDS-Agent(通信桥梁) MicroXRCEAgent udp4 -p 8888 # 终端2:启动Gazebo仿真 cd ~/PX4-Autopilot make px4_sitl gazebo-classic_iris # 或者其他机型:gazebo-classic_iris_depth_camera, gazebo-classic_iris_vision等 # 终端3:启动QGroundControl(可选,用于监控) ./QGroundControl-x86_64.AppImage # 终端4:进入工作空间再启动,无人机起飞! ros2 run px4_ros_com offboard_control

总结

本文章完成了ROS2 + gazebo classic + PX4的仿真环境搭建,对后续无人机仿真的学习打下了坚实的环境基础。

这篇文章是我第一次写的文章,有些不足的地方可及时指出,也请多多包容。

参考资料

PX4飞控官网:https://docs.px4.io/main/zh/

QCG地面站:https://qgroundcontrol.com/

Read more

【队列】循环队列(Circular Queue)详解

【队列】循环队列(Circular Queue)详解

文章目录 * 一、循环队列简介 * 二、循环队列的判空和判满 * 三、循环队列的实现 * leetcode 622. 设计循环队列 一、循环队列简介 在实际开发中,队列是一种常用的数据结构,而循环队列(Circular Queue)则一般是一种基于数组实现的队列(也可使用循环链表)。与传统的 FIFO 队列相比,循环队列通过将数组首尾相连形成一个 “环”,能够更高效地利用内存空间。 循环队列的主要思想是:当队尾指针到达数组末端时,如果数组前面还有空余空间,就可以从数组头部重新利用这些空间进行入队操作。也就是说,数组的末端和头部通过逻辑上的连接,形成一个环状结构,从而避免了顺序队列中由于出队操作而导致的空间浪费问题。 如下图就是一个典型的循环队列,其中的 front 表示头指针,指向队头。rear 则表示尾指针,指向队尾元素的下一个位置。 二、循环队列的判空和判满 在循环队列中,front 与 rear 都是可以循环移动的,当队空时,front

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇)

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇)

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇) 前言 在工业视觉和自动化领域,GigE Vision 协议因其无需采集卡、传输距离远、生态成熟等优势,已成为高性能工业相机的核心通讯标准。然而,在 FPGA 上实现一套完全符合标准的 Transmitter(发射端)方案并非易事。 本文将结合 Artix-7 和 Kintex-7 系列 FPGA 的架构特性,深度解析一套工业级 GigE Vision 方案的底层逻辑、核心功能以及在 A7/K7 平台上的落地实践,为企业项目集成和个人进阶学习提供参考建议。 一、 GigE Vision 协议栈的工业级功能拆解 一套商用级的 GigE Vision 方案(Transmitter)必须在

Flash Table实测:JAI赋能低代码开发,重塑企业级应用构建范式

Flash Table实测:JAI赋能低代码开发,重塑企业级应用构建范式

目录 * 🔍 引言 * 1.1 什么是Flash Table * 1.2 低代码平台的进化与FlashTable的革新 * ✨FlashTable背景:为什么需要新一代低代码平台? * 2.1 传统开发的痛点 * 2.2 低代码平台的局限 * 2.3 FlashTable的差异化定位 * 💻 FlashTable安装:Docker部署&Jar包部署 * 3.1 基础环境要求 * 3.2 Docker部署(推荐方案) * 3.3 Jar包部署(无Docker环境) * 3.4 常见问题 * 📚FlashTable功能深度评测:从案例看真实能力 * 4.1 数据孤岛?FlashTable 自动化匹配字段 * 4.2 FlashTable复杂表单的开发挑战 * 4.3

Java 大视界 -- Java 大数据在智能家居设备联动与场景化节能中的应用拓展(413)

Java 大视界 -- Java 大数据在智能家居设备联动与场景化节能中的应用拓展(413)

Java 大视界 -- Java 大数据在智能家居设备联动与场景化节能中的应用拓展(413) * 引言: * 正文: * 一、技术基石:Java 大数据赋能智能家居的 “三位一体” 架构 * 1.1 架构全景图 * 1.2 核心技术栈选型与生产配置(附数据出处) * 1.3 核心数据模型(POJO 类,附表结构与业务含义) * 1.3.1 设备状态实体类(对应 ClickHouse 实时表) * 1.3.2 联动规则实体类(对应 MySQL 配置表) * 1.3.3 缺失工具类补充:SpringContextUtil(生产必用) * 二、核心场景 1: