ROS2-PX4学习笔记

ROS2-PX4学习笔记

前言

做毕设其实是个有点痛苦的过程。

毕竟所有东西都得现学,然后探索,时间又有限。

研究没接触过的新东西,总会失败,没有产出,搞久了人难受。

所以还是写一点东西吧。

我挺想把这个坑做成一个系列的,因为互联网上就没有ROS2 Jazzy和Gazebo Harmonic,再加上PX4-Autopilot无人机的中文教程。

之后上真机的时候,还要琢磨一下树莓派怎么玩。

聊聊ROS2的学习

首先极力推荐https://github.com/MOGI-ROS,一步步指导如何基于ROS2 Jazzy和Gazebo Harmonic,构建一个两轮小车,安装传感器,进行导航。

这个教程的优势在于,它指导我们从零开始,以项目为引领,直接开始上手做项目,学习路径相对较短。而且我暂时也没找到讲ROS2和Gazebo sim的什么讲得好的网上教程。

此外,《ROS2智能机器人开发实践》这本书也值得参考,它对ROS2的各类机制讲的比较多,而且花大篇幅讨论了如何在现实中搓一个小的俩轮机器人出来。

另外,安装ROS2的话,一般需要Ubuntu系统,我推荐大伙整一块外置固态硬盘,PCIE3.0的就行,空间一般不少于1个T,还有硬盘盒一定要整个好的,最好不低于200块。

安装ROS2可以参考这个网站,一键安装工具:https://fishros.org.cn/forum/topic/20/小鱼的一键安装系列

当然,学习了ROS2和Gazebo的机器人应用之后,还得转向无人机。目前我还没研究到这一块,暂时先把PX4的官方文档挂着,等过段时间开搞的时候,再自行总结些内容。

https://docs.px4.io/main/en/ros2/user_guide.html 这个是ROS2 PX4的用户教程,先把这块操作一遍。

接着是ROS2和PX4的通信机制。

https://docs.px4.io/main/en/ros2/px4_ros2_interface_lib.html 这个是PX4和ROS2的控制接口和导航接口。

https://docs.px4.io/main/en/middleware/uxrce_dds.html 这个是PX4和ROS2的DDS桥。

https://docs.px4.io/main/en/ros2/px4_ros2_msg_translation_node.html 这个是PX4和ROS2的消息转换节点。

进度

目前我已经学到用代码搓一个小车的模型,装上单目相机和IMU;能通过脚本启动Gazebo sim模拟和Rviz2,能在ROS2终端用键盘控制小车运动,并能获取小车装的相机实时回传的图像。

下一步,根据教程,我还需要学习安装GPS、激光雷达,然后尝试使用OpenCV进行简单的图像处理。

接着就是Navigation2这个导航包了,也是我毕设最难的部分之一。

导航主要分成3个部分:建图、定位和导航。其中,建图和定位不是我毕设的重点,直接调已有的包就行了。

导航的话,虽然我现在用的是A*算法,已有的规划器,但是后面我必须要自己手搓一个规划器出来,算法上也得升级一轮,这里还没有主意。

这块折腾完之后,就得转向PX4那一块,认认真真看看怎样实现:

  • 带有激光雷达的无人机,能成功通过ROS2脚本调用,在Gazebo sim中显示,这个可能不能用make px4_sitl gz_x500,这样做应该就没有跟ROS2的通信了;
  • ROS2脚本能实现连接PX4软件包,和我的Navigation2的包,其中激光雷达的信息要从无人机传到Navigation2这边,然后从导航包输出控制信息到无人机,这个是绝对重点;
  • 最后模拟要的效果是,我在Rviz上选地图上的一个点,已知未知都行,无人机能边建图边规划,然后导航还得是三维的。(就是三维导航是不是得用Ego-planner?这又是另外的学习路径了,等后面加紧研究)
  • 一旦模拟能跑通,我的消息传递和建图定位规划都没问题,就需要上真机。一个是把我的包搞到机载电脑上,二个是无人机和地面站之间的通信,三个是定位需要改成用Lab里面的动捕,这个工作量也很大。而且还有个问题,我真机的飞控板还不知道是什么鬼样,只能祈祷我不用自己写飞控吧。

总之希望能按时完成。

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

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

相关文章

MessagePipe 中文文档

MessagePipe 是一个专为 .NET 和 Unity 设计的高性能内存/分布式消息管道。支持所有 Pub/Sub 场景、CQRS 中介模式、Prism 的 EventAggregator(视图与视图模型解耦)、IPC(进程间通信)-RPC 等。MessagePipeMessagePipe 是一个专为 .NET 和 Unity 设计的高性能内存/分布式消息…

Avalonia系列文章之样式与主题

随着社会的发展,大家对软件的要求,从最初的命令行输入输出,到可视化输入输出,如报表,图表等;从最初的可用性,稳定性为主,到现代软件理念中的便捷易用性转变,在保证稳定可用外,对软件的交互易用要求越来越高,而这些则离不开UI设计以及样式的应用。今天以一些简单的小…

SynchronousQueue的put方法底层源码

一、SynchronousQueue的put方法底层源码 SynchronousQueue 的 put 方法用于将元素插入队列。由于 SynchronousQueue 没有实际的存储空间,put 方法会阻塞,直到有消费者线程调用 take 方法移除元素 1、put 方法的作用将元素插入队列。如果没有消费者线程等待,当前线程会阻塞,…

【Tomcat文件上传】绕WAF姿势深入研究

环境 本地环境tomcat8.5.93,无黑白名单限制getSubmittedFileName()函数 tomcat可以通过filePart.getSubmittedFileName();获取上传文件的原始名filename获取Content-Disposition头后,判断值是否form-data或attachment开头 然后112行将form-data; name="file"; file…

关于一个手机控制电脑执行特定任务的解决方案探索【1】

【前言】 说来话长,关于这个手机控制电脑执行特定任务的想法早在几年前就有,但因为对安卓平台开发经验实在不足,就一直拖到了现在。不过好在没有忘记初衷,接下来我们一起来看我的思路和方法。 【思路】 想要通过手机作为控制端,来发送指令给同一网络下的电脑端,执行特定任…

如何升级 PowerShell 到最新版本

前言最近,需要大量使用PowerShell,然后有需要PowerShell 7正文升级的步骤也比较简单,按照下面的步骤就好了文字版本的,方便大家复制粘贴。PS C:\WINDOWS\system32> $PSVersionTable.PSVersionMajor Minor Build Revision ----- ----- ----- -------- 5 1 …

百万架构师第四十课:RabbitMq:RabbitMq-工作模型与JAVA编程|JavaGuide

来源:https://javaguide.net RabbitMQ 1-工作模型与Java编程 课前准备 预习资料 Windows安装步骤 Linux安装步骤 官网文章中文翻译系列 环境说明 操作系统:CentOS 7 JDK:1.8 Erlang:19.0.4或最新版 RabbitMQ:3.6.12或最新版 版本对应关系 典型应用场景跨系统的异步通信。人…

1月16日java假期学习读书笔记

一、学习目标 掌握HTML的基本结构和常用标签。 了解CSS的基本选择器和样式规则。 通过实际代码练习,构建一个简单的网页。 二、学习内容 (一)HTML基础 HTML简介 HTML(HyperText Markup Language,超文本标记语言)是用于构建网页的标准标记语言。 它通过一系列的标签(如、…

MapStruct使用指南并结合Lombok

MapStruct使用指南并结合Lombokhttps://juejin.cn/post/6956190395319451679#heading-1 2024-01-11 18:34:06如何结合 lombok 也就说说如果代码中使用了 lombok 注解来生成代码,mapstruct 的 getter/setter 方法也使用了 lombok 的 api,那就需要额外的配置,因为这两个工具都是使…

史上最全桌面级CPU天梯图-2024年10月更新(包含13/14代Intel/7000系列锐龙)

史上最全桌面级CPU天梯图-2024年10月更新(包含13/14代Intel/7000系列锐龙) 原文:https://www.zhihu.com/tardis/bd/art/499783467?source_id=1001

large_bin_attack

large_bin的结构如下 /*This struct declaration is misleading (but accurate and necessary).It declares a "view" into memory allowing access to necessaryfields at known offsets from a given base. See explanation below. */ struct malloc_chunk {INTERN…