ROS Qt5 librviz人机交互界面开发四(添加rviz显示界面)

本系列教程文章专栏:

ROS机器人GUI程序开发

本系列课程已上线古月学院,欢迎感兴趣的小伙伴订阅:

  1. ROS Qt开发环境搭建以及基础知识介绍
  2. ROS人机交互软件的界面开发
  3. ROS Rviz组件开发方法

在这里插入图片描述
开发交流QQ群: 797497206
完整项目代码:
github

一,实现效果

实现效果:

在这里插入图片描述

二,核心代码

创建librviz界面类,将一些方法封装在一个类中,方便我们操作:
qrviz.hpp
在qrviz.hpp文件中,主要是导入一些头文件和一些对象的声明
qrviz.cpp

这里在qrviz.cpp的构造函数中我们传入ui界面的layout指针,之后在该layout上显示rviz的RenderPanel,构造函数:

QRviz::QRviz(QVBoxLayout *layout,QString node_name)
{

    this->layout=layout;
    this->nodename=node_name;


    //创建rviz容器
    render_panel_=new rviz::RenderPanel;
    //向layout添加widget
    layout->addWidget(render_panel_);
    //初始化rviz控制对象
    manager_=new rviz::VisualizationManager(render_panel_);
    ROS_ASSERT(manager_!=NULL);
    //获取当前rviz控制对象的 tool控制对象
    tool_manager_=manager_->getToolManager();
    ROS_ASSERT(tool_manager_!=NULL);
   //初始化camera 这行代码实现放大 缩小 平移等操作
    render_panel_->initialize(manager_->getSceneManager(),manager_);
    manager_->initialize();
    tool_manager_->initialize();
    manager_->removeAllDisplays();

}

三,代码说明:

3.1添加rviz RenderPanel到界面中

若要使用librviz模块需要添加如下头文件:

#include <rviz/visualization_manager.h>
#include <rviz/render_panel.h>
#include <rviz/display.h>
#include <rviz/tool_manager.h>
#include <rviz/tool.h>;

首先需要创建一个rviz的显示容器:

 //创建rviz容器
        rviz::RenderPanel *render_panel_=new rviz::RenderPanel;

RenderPanel是继承自QWidget类,因此创建显示容器之后就能向操作widget一样操作RenderPanel对象,这里我就直接向ui界面中的布局添加显示界面:

 ui->verticalLayout->addWidget(render_panel_);

接下来创建rviz控制对象(一些图层的添加删除都是通过这个控制对象进行操作):

  rviz::VisualizationManager* manager_=new rviz::VisualizationManager(render_panel_);
  //进行断言防止闪退
  ROS_ASSERT(manager_ !=NULL);

其中,为了实现鼠标放大缩小移动的功能,本来以为需要自己监听鼠标事件,读了读rviz源码,发现这一行代码就能实现:

 //初始化camera 这行代码实现放大 缩小 平移等操作
       render_panel_->initialize(manager_->getSceneManager(),manager_);

初始化控制对象:

  manager_->initialize();
  manager_->removeAllDisplays();
  manager_->startUpdate();

到这里即可在qt界面上显示rviz的一个黑色窗体

3.2添加Rviz显示图层到界面中

Rviz的各种可视化显示都是一个个图层叠加起来的,如果需要向界面中添加图层通过createDisplay函数:

Display* createDisplay( const QString& class_lookup_name, const QString& name, bool enabled );

其中 class_lookup_name(图层类名)就是rviz软件界面上那些图层名,注意大小写:

“rviz/Grid”, “rviz/RobotModel”,”rviz/Map”,“rviz/LaserScan”……..

设置图层是否显示就通过enable参数,name就是显示的图层名,这个可以任意设置

如果需要设置图层属性通过subProp方法,这里的prop_name也为rviz显示界面上的那些属性名(注意大小写和空格)不进行设置的属性rviz就按照默认值:

subProp(Qstring prop_name)->setValue(Qvariant value)

这里我们添加Grid图层:

	  rviz::Display* grid_ = manager_->createDisplay( "rviz/Grid", "adjustable grid", true );
	  //进行断言防止闪退
        ROS_ASSERT( grid_ != NULL );

        //设置属性值
        grid_->subProp( "Line Style" )->setValue( "Billboards" );
        grid_->subProp( "Color" )->setValue(QColor(125,125,125));

四,完整开源项目

在我自己学习的过程中目前发现没有相关类似完整开源项目,为了帮助其他人少走弯路,我决定将自己的完整项目开源:
github
创作不易,如果本教程对你有帮助,关注或点个赞吧,或者github标个星哦~~
您的支持就是我最大的动力~

(转载请注明作者和出处:https://blog.csdn.net/qq_38441692 未经允许请勿用于商业用途)

【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于qt和C++的ROS人机交互界面源码+项目说明+效果图片.zip ## ROS qt 人机交互界面 - 实现图像显示,可以自动刷新图像类型画图 - 实现多机通讯,点击链接可自动读取rosmaster地址,自动启动roscore并链接rosmaster - 实现GPS显示,速度显示,速度控制,不同平台的切换 *** ### 运行方式 ```bash rosrun robot_hmi robot_hmi ``` 支持Ubuntu与Windows平台,设计主要是为了window平板 ### 界面大致介绍 开机界面,上面一栏是车辆状态显示,可以显示连接状态、车辆速度、GPS位置与电池电量信息。 中间位置是显示车辆的平台选择、图像显示、路径类型选择、激光雷达与地图。最下面是车辆控制按钮,左边是速度控制,右边是转型控制,用于平板操作。 ![](https://github.com/lrm2017/robot_hmi/blob/main/%E6%95%88%E6%9E%9C%E5%9B%BE/%E7%95%8C%E9%9D%A2%E6%98%BE%E7%A4%BA.png?raw=true) ![](2022-08-29%2010-20-49%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png) 点击移动平台1,如果未开启roscore,会自动启动roscore。其中图像与激光雷达会自动切换都平台1的消息画图。 左边是图像,点击刷新可以自动获取图像画图; 图中间是小车采用纯跟踪算法跟随S型曲线的轨迹 ......
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值