本系列教程文章专栏:
ROS机器人GUI程序开发
本系列课程已上线古月学院,欢迎感兴趣的小伙伴订阅:
开发交流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();
}
若要使用librviz模块需要添加如下头文件:
#include
#include
#include
#include
#include ;
首先需要创建一个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的一个黑色窗体
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标个星哦~~
您的支持就是我最大的动力~