3.2加载RVIZ常用的Display

2023-05-16

在这里插入图片描述
在这里插入图片描述

前面基本的gird图形设计好了,接下来就是去设置gird的图层属性,
在qrviz.hpp中声明一个接口函数:

    void Display_Grid(int Cell_Count,QColor color,bool enable);

初始化这个接口函数

void qrviz::Display_Grid(int Cell_Count,QColor color,bool enable)
{
    if(Grid_!=NULL)
    {
        delete Grid_;
        Grid_=NULL;
    }
    Grid_=manager_->createDisplay("rviz/Grid","myGrid",enable);
    //设置cell Count
    Grid_->subProp("Plane Cell Count")->setValue(Cell_Count);
    //设置颜色
    Grid_->subProp("Color")->setValue(color);
    ROS_ASSERT(Grid_!=NULL);
}

在在qrviz.hpp中声明Gird对象:

    rviz::Display* Grid_=NULL;

注意理解代码:是如何在main_window.cpp中去更改rviz的显示图层:

//链接Grid_Check是否被选中,来更新rviz图层显示,在槽函数中调用我们qrviz.cpp中写的接口函数Display_Grid
//connect(Grid_Check,SIGNAL(stateChanged(int)),this,SLOT(slot_display_grid(int)));
//更新图层函数,通过调用Display_Grid接口函数,传入设置更改后的参数

void MainWindow::slot_display_grid(int state)
{
    bool enable=state>1?true:false;
    //颜色使用";"分割,所以先对文本框内容进行拆分,转化为int 类型,然后传入Display_Gird接口函数
    QStringList qli=Grid_Color_Box->currentText().split(";");
    QColor color=QColor(qli[0].toInt(),qli[1].toInt(),qli[2].toInt());
    myrviz->Display_Grid(Cell_Count_Box->text().toInt(),color,enable);
}

需要理解的地方:
//这里的"rviz/Grid" 是代表类名,必须和rviz的名称对应,第二个参数图层名称,可以随便起
//还有就是manger必须有一个Display对象接受他,所以我们在对象的.hpp中获取一个display对象
//rviz::Display* Grid_=NULL;

    //通过 RVIZ控制对象创建Gird图层
    Grid_=manager_->createDisplay("rviz/Grid","myGrid",enable);
    //设置cell Count,通过subProp方法
    Grid_->subProp("Plane Cell Count")->setValue(Cell_Count);
    //设置颜色
    Grid_->subProp("Color")->setValue(color);

在这里插入图片描述
tf设计步骤:
qrviz.hpp创建一个接口函数:

    void Display_TF(bool enable);

创建一个私有的TF对象

rviz::Display* TF_=NULL;

去定义这个接口函数

void qrviz::Display_TF(bool enable)
{
    if(TF_!=NULL)
    {
        delete TF_;
        TF_=NULL;
    }
    TF_=manager_->createDisplay("rviz/TF","myTF",enable);
    //每创建一个manger都要ASSER断言一下,避免山退的bug
    ROS_ASSERT(TF_!=NULL);
}

在mian_window.cpp中进行ui设计

    //TF ui
    QTreeWidgetItem* TF=new QTreeWidgetItem(QStringList()<<"TF");
    //设置图标
    TF->setIcon(0,QIcon(":/classes/images/classes/TF.png"));
    //checkbox
    QCheckBox* TF_Check=new QCheckBox();
    connect(TF_Check,SIGNAL(stateChanged(int)),this,SLOT(slot_display_tf(int)));
    //向Treewidget添加TF Top节点
    ui.treeWidget->addTopLevelItem(TF);
    //向TF添加checkbox
    ui.treeWidget->setItemWidget(TF,1,TF_Check);

在main_window.hpp中声明槽函数

void slot_display_tf(int);

定义槽函数

//TF
void MainWindow::slot_display_tf(int state)
{
    bool enable=state>1?true:false;
    myrviz->Display_TF(enable);
}

运行,将FixedFream 坐标系改为base_footprint 即可看见坐标系
搞定:

激光显示:
注意需要把Fiexd_Fream改为laser,LaserScan的话题是"/scan",keyi可以看到几乎和rviz里面效果是一样的在这里插入图片描述

地图显示:
基本步骤:都是一样的和激光雷达
在这里插入图片描述
这里有一个bug,当你在qrviz.hpp中声明rviz::Display* RobotModel_=NULL;
的时候,有可能会出现山退的现象,解决方法:
将他的声明放置到qrviz.cpp中,作为.cpp文件的全局变量

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

3.2加载RVIZ常用的Display 的相关文章

随机推荐

  • 计算机网络考研/考博复试常见问题

    目录 第一章 计算机网络体系结构 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第一章 计算机网络体系结构 快速唤起记忆知识框架 1 计算机网络的主要功能 xff1f 1 硬件资源共享 可以在全网范围内
  • 编写python代码实现打开并登录网页、对网页进行点击、输入信息等操作

    当我们打开一个网页进行信息搜索时 xff0c 少不了要对它进行点击和输入信息等操作 xff0c 有的网页还可能需要你先登录才能开始其他操作 这篇博客就带大家来了解一下如何编写一段python代码实现打开并登录网页 对网页进行点击 输入信息等
  • Linux查看物理CPU个数、核数、逻辑CPU个数

    CPU总核数 61 物理CPU个数 每颗物理CPU的核数 总逻辑CPU数 61 物理CPU个数 每颗物理CPU的核数 超线程数 1 查看CPU信息 xff08 型号 xff09 span class token function cat s
  • Windows系统:将Typora加入右键新建快捷选项

    本文使用写 reg注册表文档并执行的方法将Typora加入右键新建快捷选项 用执行 reg的方法将Typora加入右键新建选项 步骤 xff1a 新建txt文档 xff0c 命名文档为typora 注意 xff0c 可在本机的任意位置建立
  • 如何在 win系统 桌面上加入某个软件的快捷方式

    其实很简单 xff0c Win 43 R 打开运行 xff0c 输入shell AppsFolder打开文件夹 xff0c 就像这样 回车进入应用列表 xff1a 找到你想放到桌面的那个app右键然后点击创建快捷方式然后选择是 xff0c
  • Python 文件加密

    我们通常编写的python源文件 xff08 py文件 xff09 可以由记事本等软件直接打开 xff0c 如果想要发布程序 xff0c 那么只能直接发布源文件 xff0c 但是发布源码的话 xff0c 就极易被别人轻松使用 有没有加密的方
  • Echarts显示数据被遮挡了

    设置参数 xff1a trigger 39 item 39 在echarts中自定义提示框内容 1 期望效果 以柱状图为例 xff0c 在鼠标滑过每个数据标签时 xff0c 为了更友好地显示数据内容 xff0c 需要对显示的数据内容作格式化
  • Debian 查看系统版本的6种方式

    1 lsb release命令 lsb release 命令可以查看操作系统的具体版本 xff0c 但是需要我们手动安装 安装 apt get install lsb release 使用 lsb release a 2 查看 etc is
  • 下一代 IDE 工具 JetBrains Fleet 正式公测

    这几天 xff0c JetBrains Fleet 可以说是闹的沸沸扬扬 xff0c 官方的态度很明确 xff0c 我们是下一代 IDE xff0c 使用了 IntelliJ 代码处理引擎 xff0c 并且是建立在 20 年的 IDE 开发
  • vue实现websocket断线重连

    下面有demo和注释 span class token tag span class token tag span class token punctuation lt span template span span class token
  • 斐讯K3 在openwrt上如何手动安装阿里云盘aliyun-dav

    感觉网络上很多的东西 xff0c 不那么复杂的 xff0c 是没有教程让它变复杂 斐讯K3 在openwrt上如何手动安装阿里云盘aliyun dav xff0c 这很正常的需求吧 xff0c 只有固件打包在里面的 xff0c 没有手动安装
  • 多主机IIC系统中时钟同步及仲裁

    两个主机可以同时开始在空闲总线上进行传输 xff0c 并且必须有一种方法来确定控制总线并完成数据传输 xff0c 这是通过时钟同步和仲裁完成 在单主机系统中 xff0c 不需要时钟同步和仲裁 时钟同步是通过I2C接口中SCL线的线与实现 x
  • ros-机器人URDF建模问题

    參考這篇文章 xff0c 分分钟解决问题 xff0c 感谢博主 参考链接 xff1a https blog csdn net m0 46259024 article details 105333552 这里总结一下出现的问题 问题1 ros
  • Ubuntu16.04vscode打不开的问题

    1 问题描述 我第一次在这位博主点击这里的教程下尝试去安装vscode xff0c 但是呢他是用wget的方式按装的 xff0c 后来设置也不好弄 xff0c 但是这个时候其实vs已经可以打开了 可是我把图标设置到桌面上 xff0c 直接点
  • rbx1运行出错

    xacro Traditional processing is deprecated Switch to inorder processing To check for compatibility of your document use
  • ubuntu18.04中解决无法创建文本文件问题

    ubuntu18 04无法创建文本文件问题 1 打开文件夹 xff0c 在用户主目录里找到 模板 文件夹打开并打开模板终端 2 输入 xff08 sudo gedit 文本文件 xff09 会弹出一个空白文本文件 xff0c 点击保存 3
  • 2.4电池电量的显示

    一 ui界面设计 打破布局 xff1a mainwindowDesgin 然后继续添加几个label用于显示电量提示信息等 导入resources图片资源文件 xff1a 首先把图片以及相关的资源文件copy到resources文件夹下 x
  • 2.5订阅图像话题并显示

    出错了 xff0c 一直找不到rviz config cmake配置文件 重新创建一个工作空间又好了 xff0c 奇怪的一批 xff0c 估计又是工作空间的问题 首先添加依赖 xff0c 包含头文件 ui界面设计 对显示图片的那个label
  • ROS Rviz组件开发方法 3.1

    首先我们先进行ui设计 xff1a 在两个主页面添加两个页 xff0c 名称改为rviz xff0c 在curentTabText里面修改 然后在电池电量下面那个rviz的页面中加入一个treewidget 给他纵向布局 xff0c 修改大
  • 3.2加载RVIZ常用的Display

    前面基本的gird图形设计好了 xff0c 接下来就是去设置gird的图层属性 xff0c 在qrviz hpp中声明一个接口函数 xff1a void Display Grid int Cell Count QColor color bo