无人机的计算机仿真模拟控制

🏡作者主页:点击! 

🤖编程探索专栏:点击!

⏰️创作时间:2024年12月3日10点24分


神秘男子影,
  秘而不宣藏。
泣意深不见,
男子自持重,
   子夜独自沉。

论文链接

点击开启你的论文编程之旅icon-default.png?t=O83Ahttps://www.aspiringcode.com/content?id=17269203938591&uid=f6960f8aee124b488acfa41b7d4a4a75

概述

所有的机械相关载具在投入到现实世界中应用或测试之前,为了节省制造成本和避免不必要的意外发生,都会先在仿真软件中先模拟设备的操作和流程。这一方面不仅减少了意外发生的可能,也大幅度的减低了测试的时间和成本,达到一个可以快速对代码测试、修改、重复的功效。这篇文章里着重会提到目前最主流的无人机仿真测试程序——新手友好的入门级Gazebo Classic Simulator。为了方便查看无人机在仿真环境中的运行过程以及它的路径,会再安装QGroundControl来方便查看无人机状态(包括位置数据,全球地图定点标记,无人机速度和高度等)

Gazebo Classic起飞展示

Gazebo Classic Simulator环境仿真图:

QGroundControl图形界面:

QGroundControl连接了仿真环境中的无人机后所显示的卫星地图和定点标记:

Gazebo Classic的安装

安装Gazebo Classic Simulation步骤如下:

sudo apt install curl wget python3
curl -sSL http://get.gazebosim.org | sh
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 https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install gazebo11 libgazebo11-dev
gazebo    # 打开 Gazebo Classic 验证是否已成功安装

Gazebo Classic Simulation需要搭配PX4-Autopilot固件才能实现无人机的控制与仿真,所以PX4-Autopilot的安装如下:

sudo apt install git
cd ~    # 回到主目录里以便 PX4 的目录方便查找
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
sudo apt-get install protobuf-compiler libeigen3-dev libopencv-dev -y

PX4-Autopilot需要用到GeographicLib的数据集,下载步骤如下:

wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo bash ./install_geographiclib_datasets.sh

实现无人机的自主操控通常会搭配ROS进行控制,所以ROS安装如下:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt install ros-noetic-desktop-full
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
echo "export ROS_DISTRO=noetic" >> ~/.bashrc    # 把 ROS 的版本放到 bashrc 里边以便后续使用
source ~/.bashrc

ROS安装完毕后可以开始编译PX4的固件了,需要先去到安装PX4的目录里面再进行固件编译:

cd ~/PX4-Autopilot
DONT_RUN=1 make px4_sitl_default gazebo
echo "source /home/${USER}/PX4-Autopilot/Tools/simulation/gazebo-classic/setup_gazebo.bash /home/${USER}/PX4-Autopilot /home/${USER}/PX4-Autopilot/build/px4_sitl_default" >> ~/.bashrc
echo "export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$/home/${USER}/PX4-Autopilot" >> ~/.bashrc
echo "export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/${USER}/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic" >> ~/.bashrc
source ~/.bashrc
roslaunch px4 mavros_posix_sitl.launch

经过如上步骤以后PX4,Gazebo Classic Simulation,ROS1 Noetic以及MAVROS就已经全部安装并编译完毕。后续要跑PX4和Gazebo Classic的时候只需要在终端敲下指令:

roslaunch px4 mavros_posix_sitl.launch

就可以打开Gazebo Classic,并自动连接PX4 SITL固件了。打开了Gazebo Classic和PX4 SITL后可以在另一个终端输入:

rostopic echo /mavros/local_position/odom

既可以通过ROS接受无人机在Gazebo Classic仿真环境中的位置数据。回到开启PX4 SITL固件的那个终端,pxh固件终端里面输入:

pxh> commander takeoff

既可以操控PX4无人机在仿真环境中起飞,可以通过添加 --help 来查看哪一些命令可以被使用。

QGroundControl的安装

在安装QGroundControl之前需要先设置计算机以及把所有的依赖包先安装下来,所以需要在终端执行一下代码:

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 libfuse2 -y
sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -y

依赖项处理完毕后再点击 QGroundControl 来下载Ubuntu AppImage程序包。下载完毕后需要去到下载目录里面并执行:

cd ~/Downloads
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage    # 可以终端运行或者双击 AppImage 文件

QGroundControl用户见面就会弹出,并自动连接仿真环境中的无人机(若Gazebo Classic已经打开)。

ROS操控仿真无人机

从上面的步骤中,所有的环境包括Gazebo Classic仿真环境都已经设置完毕,下面开始展示如何通过ROS话题来操控Gazebo Classic里面的无人机。首先在终端启动PX4固件,Gazebo Classic,ROS Noetic以及MAVROS,运行以下指令即可:

roslaunch px4 mavros_posix_sitl.launch

去到QGroundControl.AppImage之前所在的下载目录里边双击文件打开QGroundControl图形界面就可以看到PX4仿真无人机成功连接到了仿真环境里。

在附件里面下载并解压SimulationCtrl.zip文件,打开SimulationCtrl文件夹并进到code文件夹里面将会看到PX4CtrlCommand.py文件以及main.py文件。右击code文件夹并选择在终端中打开,然后运行以下指令:

python3 ./main.py

回到Gazebo Classic的图形界面就可以看到PX4仿真无人机在MAVROS的操控下开始自检解锁,并用其走过的路径画出一个正四方形。可以打开QGroundControl图形界面就可以看到无人机飞出的四方形了。

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+mars3d给影像底图叠加炫酷效果

话不多说,直接上效果图: 在这里墙体其实是有一个不太明显的流动效果 实现方式:这里我使用了PolylineEntityWallPrimitive,开始我用的是polygonEntity但是发现实现效果并不好,所有直接改用了线 map.vue文件&#xff1…

浅谈volatile

volatile有三个特性: (1)可见性 (2)不保证原子性 (3)禁止指令重排 下面我们一一介绍 (一)可见性 volatile的可见性是说共享变量只要修改,就可以被其他线…

Redis自学之路—高级特性(实现消息队列)(七)

目录 简介 Redis的Key和Value的数据结构组织 全局哈希表 渐进式rehash 发布和订阅 操作命令 publish 发布消息 subscribe 订阅消息 psubscribe订阅频道 unsubscribe 取消订阅一个或多个频道 punsubscribe 取消订阅一个或多个模式 查询订阅情况-查看活跃的频道 查询…

Java-09 深入浅出 MyBatis - 注解开发 注解映射 基本介绍 与 一对一模型

点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatis&#xff…

【k8s】kubelet 的相关证书

在 Kubernetes 集群中,kubelet 使用的证书通常存放在节点上的特定目录。这些证书用于 kubelet 与 API 服务器之间的安全通信。具体的位置可能会根据你的 Kubernetes 安装方式和配置有所不同,下图是我自己环境【通过 kubeadm 安装的集群】中的kubelet的证…

ES语法(一)概括

一、语法 1、请求方式 Elasticsearch&#xff08;ES&#xff09;使用基于 JSON 的查询 DSL&#xff08;领域特定语言&#xff09;来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成&#xff1a; curl -X<VERB> <PROTOCOL>://&l…

Redis开发实践

在现代开发中&#xff0c;Redis 已经成为一种重要的高性能内存数据库。无论是作为缓存、消息队列还是排行榜的实现工具&#xff0c;它都表现出了极高的性能和灵活性。本文将带你了解 Redis 的基本概念&#xff0c;并通过 Python 示例代码实现 Redis 的核心功能。 文章目录 1. R…

【el-table】表格后端排序

在需要排序的列添加属性 sortable&#xff0c;后端排序&#xff0c;需将sortable设置为custom 如果需要自定义轮转添加 sort-orders 属性&#xff0c;数组中的元素需为以下三者之一&#xff1a;ascending 表示升序&#xff0c;descending 表示降序&#xff0c;null 表示还原为原…

Linux迁移gitlab容器

Linux迁移gitlab容器并配置 迁移gitlab容器本文分两部分&#xff0c;第一步在新服务器上安装相同版本的gitlab容器&#xff0c;可以在确定gitlab版本之后直接在docker上拉取&#xff0c;我这里直接从原服务器上将镜像打包加载到新服务器上。第二步从原服务器上操作备份文件&am…

3.建立本地仓库及常用命令

1.建立本地仓库 要使用Git对我们的代码进行版本控制&#xff0c;首先需要获得本地仓库 1&#xff09;在电脑的任意位置创建一个空目录&#xff0c;作为我们的本地Git仓库 2&#xff09;进入这个目录&#xff0c;右键点击Git Bash 窗口 3&#xff09;执行命令git init 4) 如果创…

Narya.ai正在寻找iOS工程师!#Mixlab内推

如果你对AI技术和iOS开发充满热情&#xff0c;这里有一个绝佳的机会加入一家专注于AI应用创新的初创公司。Narya.ai正在招聘iOS工程师&#xff0c;帮助他们开发下一代效率工具&#xff0c;旨在提升用户的日常生活效率与幸福感。 关于Narya.ai&#xff1a; 专注于AI应用层创新&a…

AI开发:生成式对抗网络入门 模型训练和图像生成 -Python 机器学习

阶段1&#xff1a;GAN是个啥&#xff1f; 生成式对抗网络&#xff08;Generative Adversarial Networks, GAN&#xff09;&#xff0c;名字听着就有点“对抗”的意思&#xff0c;没错&#xff01;它其实是两个神经网络互相斗智斗勇的游戏&#xff1a; 生成器&#xff08;Gene…

网络安全攻击和防范措施

常见的有四种网络安全攻击方式. 第一种是XSS跨站脚本攻击,往网页中插入恶意脚本代码以攻击用户. 防范措施有三种. 第一种是输入过滤,对用户的所有输入数据进行检测,过滤掉可能导致脚本的字符. 第二种是输出编码,使用工具对用户输入进行编码,使其中可能含有的HTML脚本变成普通…

Redis服务配置文件 redis.conf 更新修改配置参数说明

场景&#xff1a; 在安装redis服务中&#xff0c;默认的配置项通常不能实际使用&#xff0c;需要修改一些配置参数 修改配置参数 1、拿到 redis.cnf 文件&#xff0c;此文件通常在 redis 项目源码的第一级目录下 2、修改配置内容&#xff0c;主要修改项如下 protect…

成功解决logs is not a directory [Op:CreateSummaryFileWriter] name

成功解决logs is not a directory [Op:CreateSummaryFileWriter] name 目录 解决问题 解决思路 解决方法 1、确保日志目录存在 2、权限问题 3、日志路径配置问题 解决问题 tensorflow.python.framework.errors_impl.FailedPreconditionError: {{function_node __wrapped…

数据集增强:提升深度学习模型泛化能力的关键技术

在深度学习中&#xff0c;数据是模型性能的基石。大规模、高质量的数据集通常能显著提高模型的泛化能力&#xff0c;帮助模型在真实场景中做出更准确的预测。然而&#xff0c;在很多实际应用中&#xff0c;数据收集困难、昂贵或者受限&#xff0c;尤其是当数据集相对较小或标注…

039集——渐变色之:CAD中画彩虹()(CAD—C#二次开发入门)

&#xff08;来左边儿 跟我一起画个龙&#xff0c;在你右边儿 画一道彩虹 ~~~~~~~~~~~ &#xff09; 效果如下&#xff1a; 以下展示部分颜色源码&#xff1a; namespace AcTools {public class Class1{public Wform.Timer timer;//定时器需建在类下面public s…

第1章:CSS简介 --[CSS零基础入门]

1. 什么是CSS CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于描述HTML或XML&#xff08;包括各种XML方言如SVG、XHTML等&#xff09;文档表现的样式语言。CSS的主要目的是将网页的内容与它的表现形式分离&#xff0c;从而使得开发者能够…

Android 中绘制带箭头的线

在 Android 中绘制带箭头的线&#xff0c;可以使用 Canvas 和 Paint 类。以下是一个示例&#xff0c;展示了如何在自定义 View 中绘制一条带有箭头的线。 自定义 View 实现 你可以创建一个自定义的 View&#xff0c;并覆盖其 onDraw() 方法来实现这个功能。 java public clas…

面试题整理(二)

芯冰乐知识星球入口:芯冰乐