ROS2从入门到精通2-4:Rviz2插件制作案例(以工具栏和多点导航插件为例)

news2024/11/12 23:39:57

目录

  • 0 专栏介绍
  • 1 Rviz2插件
  • 2 项目配置
  • 3 案例一:工具栏插件
  • 4 案例二:多点导航插件
  • 5 综合演示
    • 5.1 添加插件
    • 5.2 多点巡航

0 专栏介绍

本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。

🚀详情:《ROS2从入门到精通》


1 Rviz2插件

ROS2从入门到精通2-2:详解机器人3D可视化工具Rviz2与案例分析中说到ROS2提供了一个三维可视化工具,用于可视化传感器的数据和状态信息——Rvi2z,并介绍了Rviz2的基本使用方法

事实上,Rviz2是一种支持扩展的视图工具,可以使用插件机制来扩展丰富的功能,进行二次开发。Rviz2中使用的激光数据可视化、图像数据可视化等其实都是官方提供的插件

本文将介绍如何为Rviz2定制插件,使用的案例是实现一个工具栏导航箭头以及多点导航控制功能

2 项目配置

首先是CMakeLists.txt文件,因为Rviz2实际上是采用QT开发的,所以和一般的ROS工程相比,要增加一些QT库的链接配置

# Find QT dependencies
SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
set(CMAKE_AUTOMOC ON)
find_package(Qt5 COMPONENTS Core Gui Widgets UiTools REQUIRED) #Ejemplo para QWidget
QT5_WRAP_CPP(QT_HEADERS ${MOC_HEADERS})

set(dependencies
  ...
  Qt5
)

add_library(${library_name} SHARED
  ...
  ${MOC_FILES}
  ...
)

3 案例一:工具栏插件

package.xml中配置插件导出

 <export>
   <build_type>ament_cmake</build_type>
   <nav2_core plugin="${prefix}/goal_set_plugin.xml" />
 </export>

配置插件说明文件

<library path="goal_set_plugin">
    <class name="goal_set_plugin/GoalSetPlugin"
           type="goal_set_plugin::GoalSetPlugin"
           base_class_type="rviz_common::Tool">
        <description>A tool for goal setting.</description>
    </class>
</library>

主体继承自rviz_default_plugins::tools::PoseTool

namespace goal_set_plugin
{
  class RVIZ_DEFAULT_PLUGINS_PUBLIC GoalSetPlugin : public rviz_default_plugins::tools::PoseTool
  {
    Q_OBJECT
  public:
    GoalSetPlugin();
    virtual ~GoalSetPlugin() {}
    virtual void onInitialize();

  protected:
    virtual void onPoseSet(double x, double y, double theta);

  private Q_SLOTS:
    void updateTopic();

  private:
    // The ROS node handle.
    std::shared_ptr<rclcpp::Node> nh_;
    // goal publisher
    rclcpp::Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr wp_goal_pub_;

    rviz_common::properties::StringProperty *topic_property_;
  };
}

本项目使用这个插件为多点导航功能提供可视化选点

4 案例二:多点导航插件

package.xml中配置插件导出

 <export>
   <build_type>ament_cmake</build_type>
   <nav2_core plugin="${prefix}/multi_nav_plugin.xml" />
 </export>

配置插件说明文件

<library path="multi_nav_plugin">
    <class name="multi_nav_plugin/MultiNavPlugin"
           type="multi_nav_plugin::MultiNavPlugin"
           base_class_type="rviz_common::Panel">
        <description>A panel widget allowing multi-goals navigation.</description>
    </class>
</library>

主体继承自rviz_common::Panel

namespace multi_nav_plugin
{
    /**
     *  @brief multiple navigation setting plugin class
     */
    class MultiNavPlugin : public rviz_common::Panel
    {
        Q_OBJECT
    public:
        MultiNavPlugin(QWidget *parent = 0);

    public Q_SLOTS:
        void onInitialize() override;

    protected Q_SLOTS:
        void _startNavigation();
        void _cancelNavigation();
        void _completeNavigation();
        void _cycleNavigation();
        void _updatePoseTable();
        void _onGoalUpdate(const geometry_msgs::msg::PoseStamped &pose);
        void _OnResultCallback(const GoalHandle::WrappedResult & result_message);
        void _checkCycle();
        void _startSpin();
    };
}

5 综合演示

5.1 添加插件

首先通过Rviz2->Panels->Add New Panel添加多点导航插件MultiNavPlugin,打开插件后如图所示

在这里插入图片描述
通过Rviz2->Add New Tool添加Goal Setting插件

在这里插入图片描述

5.2 多点巡航

通过2D Pose Estimate给机器人一个初始位置

在这里插入图片描述

接着设置导航点数量,以3为例,点击OK后出现对应数量的表格

在这里插入图片描述

通过Waypoint goal设置3个任意的路点

在这里插入图片描述

设置完毕后如下所示

在这里插入图片描述
点击start即可开始依次遍历路点。也可以通过cancel取消当前的导航任务,或通过cycle进行循环导航

在这里插入图片描述

完整代码通过下方博主名片联系获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

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

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

相关文章

企业图纸防泄密的最佳方案,10款好用的图纸加密软件排行榜

在数字化时代&#xff0c;企业的图纸文件往往包含了极其重要的知识产权和技术秘密&#xff0c;因此保护这些图纸的安全至关重要。有效的图纸加密不仅能防止未授权访问&#xff0c;还能确保图纸在内外部流转过程中的完整性与安全性。本文将介绍十款2024年市场上评价较高的图纸加…

基于Mysql的商业辅助决策系统的设计与实现

TOC springboot295基于Mysql的商业辅助决策系统的设计与实现 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们…

零-STM32与嵌入式

目录 一、嵌入式概述 二、微控制器的关系 三、STM32的学习原因 四、STM32的应用领域 五、STM32的就业前景 六、STM32开发方式 (1) 寄存器开发&#xff08;自己做饭&#xff0c;自己吃&#xff09; (2) 函数库开发&#xff08;别人做饭&#xff0c;自己吃&#xff09; …

喜报 亚信安全再次入选湖北省网络安全应急技术支撑单位

近日&#xff0c;中共湖北省委网络安全和信息化委员会办公室和国家计算机网络应急技术处理协调中心湖北分中心公布了《关于开展第二届湖北省网络安全应急技术支撑单位评选工作的通知》&#xff0c;亚信安全凭优秀的产品技术实力和丰富的安全服务实践经验&#xff0c;连续两届成…

调研适合c++训练和部署的框架

目录 1. caffe 2. TensorFlow 3. Pytorch 4. PaddlePaddle 5. darknet 1. caffe GitHub - BVLC/caffe: Caffe: a fast open framework for deep learning. Caffe (Convolutional Architecture for Fast Feature Embedding) Caffe是一个早期流行的深度学习框架&#xff0…

GreptimeDB融资数百万美元; Oracle提供免费长期MySQL; 谷歌大模型支持云数据库问题洞察

重要更新 1. 开源时序数据库 GreptimeDB宣布完成数百万美元的新一轮融资。GreptimeDB是一款Rust 语言编写的时序数据库&#xff0c;具有分布式&#xff0c;开源&#xff0c;云原生&#xff0c;兼容性强等特点&#xff0c;帮助企业实时读写、处理和分析时序数据的同时&#xff0…

Linux设备驱动——模块的构造、运行与设计 与众不同的hello world与点灯

编写一个Linux下的设备驱动&#xff0c;首先要准备好对应内核版本的内核源码树文件。 该系列的全部文章都以嵌入式系统的ARM-Linux的环境进行阐述&#xff0c;并以交叉编译的方式在主机Ubuntu20.04系统上编译和ARM开发板上跑测 (E2000Q、H616、或者IMX6ULL看情况交叉着使用) 关…

MySQL基础练习题44-只出现一次的最大数字

目录 题目 情况一 准备数据 分析数据 情况二 准备数据 实现一 题目 单一数字 是在 MyNumbers 表中只出现一次的数字。 找出最大的 单一数字 。如果不存在 单一数字 &#xff0c;则返回 null 。 情况一 准备数据 ## 创建库 create database db; use db;## 创建表 Cre…

腾讯云短信正文模板每个变量取值最多支持6个字符出现的问题及应对方法

目录 一、参考链接二、应对方法 一、参考链接 对于长期未使用的账号及 2024 年 1 月 25 日后开通的新账号&#xff0c;腾讯云对短信正文模板的变量进行了限制&#xff1a; 验证码短信&#xff1a;每个变量取值最多支持6位纯数字。 非验证码短信&#xff1a;每个变量取值最多支…

MySQL架构设计

MySQL架构设计 查询语句&#xff1a; select * from users;返回结果为&#xff1a; 问题&#xff1a; 一条SQL查询语句是如何执行的&#xff1f; Server层 MySQL架构可以分为server层和Engine层两部分&#xff1a; 连接器&#xff08;connector&#xff09; 1. 连接管理 …

关于python中的get,set方法

一般在python面向对象中&#xff0c;每个类内都会有其所对应的属性。 而在定义属性值的时候&#xff0c;可能还得会对这些属性值进行修改和获取。为了确保代码的安全性&#xff0c;封装性和可操作性&#xff0c;我们可以使用get&#xff0c;set方式去操控。 get方法用于获取属…

贝莱德与摩根大通的最新季度持仓分析

近期&#xff0c;华尔街的两大投资巨头贝莱德和摩根大通公布了其2024年第二季度的13F报告&#xff0c;揭示了他们在投资组合上的最新动向。通过分析这些持仓数据&#xff0c;我们可以更清楚地了解这些顶级投资机构的投资策略和市场偏好。 贝莱德的科技巨头与能源投资 根据贝莱…

Trilium Notes:你的个人知识库!【送源码】

简介 Trilium Notes是一款功能全面的层次化笔记应用&#xff0c;通过树形结构构建个人知识库&#xff0c;支持Markdown编辑、网页内容剪切、笔记搜索与映射&#xff0c;并特别提供了基于画布的自由涂画功能&#xff0c;极大地提升了笔记的灵活性和创造性&#xff0c;是知识管理…

移动UI:把握好这9点,轻松设计积分兑换页面。

设计移动UI的积分兑换页面需要考虑用户体验和交互设计&#xff0c;以下是一些设计建议&#xff1a; 1. 清晰的积分信息展示&#xff1a; 在页面顶部或者中间位置展示用户当前的积分数量&#xff0c;让用户清晰地了解自己的积分情况。 2. 商品列表展示&#xff1a; 以列表或者…

[数据集][目标检测]违规撑伞检测数据集VOC+YOLO格式341张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;341 标注数量(xml文件个数)&#xff1a;341 标注数量(txt文件个数)&#xff1a;341 标注类别…

浅看MySQL数据库

有这么一句话&#xff1a;“一个不会数据库的程序员不是合格的程序员”。有点夸张&#xff0c;但是确是如此。透彻学习数据库是要学习好多知识&#xff0c;需要学的东西也是偏难的。我们今天来看数据库MySQL的一些简单基础东西&#xff0c;跟着小编一起来看一下吧。 什么是数据…

什么是树的先/中/后序遍历

前言 很久没有写c教程&#xff08;有几个月&#xff09;了&#xff0c;今天来讲讲树 为什么之前不讲树因为我不会但我现在能写出一些树的选择题了 首先我们画一棵树&#xff1a; 有些潦草 遍历是什么 我们要研究先/中/后序遍历&#xff0c;我们应该先知道什么叫遍历 遍历…

论文精要:《对静态分析缺陷报告进行聚类,以降低维护成本》

1. 前言 周末找到一篇《对静态分析缺陷报告进行聚类&#xff0c;以降低维护成本》&#xff0c;读了之后受到不少启发&#xff0c;特此将笔记整理出来。 论文出处&#xff1a; Published in: 2013 20th Working Conference on Reverse Engineering (WCRE)Date of Conference:…

疫情期间高校人员管理

TOC springboot322疫情期间高校人员管理 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大&#xff0c;人为计算方面才是一个巨大的短板&#xff0c;所以发明了各种计算设备&#xff0c;从结绳记事&#xff0c;到算筹&#xff0c;以及算盘&#xff0c;到如今的计算机&a…

C语言家教记录(六)

导语 本次授课的内容如下&#xff1a;指针&#xff0c;指针和数组 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 指针 指针变量 计算机按字节划分地址&#xff0c;每个地址访问一个字节 指针变量指向变量的地址&#xff0c;指的是变量第一个字节的…