【QT学习】QT中加载Rviz显示(一)

1. 背景

在Qt中加载Rviz的时候,经常会用到Rviz的一些函数,下面介绍Rviz的函数以及对应的Rviz左侧界面的参数

2. Rviz界面

在这里插入图片描述
上面的rviz图形工具显示有三部分:中间显示容器 Rviz初始化、左侧图层参数设置栏 Rviz参数设置、右侧的视角栏 Rviz地图展示

3. 常见函数

3.1 头文件

在调用Rviz的相关函数的时候,需要先引用相关头文件


.h
#include <rviz/visualization_manager.h>
#include <rviz/render_panel.h>
#include <rviz/display.h>
#include <rviz/tool_manager.h>
#include<rviz/tool.h>
#include <rviz/default_plugin/view_controllers/orbit_view_controller.h>
#include <rviz/view_manager.h>

3.2 Rviz初始化

<span id="1>

创建rviz显示容器,其本质是继承QWidget类,因此可将其看成一个窗口控件,设置其显示布局
.
rviz::RenderPanel *render_panel_=new rviz::RenderPanel;

获取rviz的控制对象,该操作可以通过后续对控制对象操作进而对rviz显示容器进行操作显示
.
rviz::VisualizationManager* manager_=new rviz::VisualizationManager(render_panel_);

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

初始化rviz控制对象
.
manager_->initialize();
manager_->removeAllDisplays();
manager_->startUpdate();

以上几步就完成了对Rviz的初始化设置,想要显示点云等具体的内容还要设置一些属性。

3.3 Rviz参数设置

在Rviz的图形化工具中,可以看到在参数栏看到一些可配置项。

设置

  /** @brief Set the coordinate frame we should be transforming all fixed data into.
   * @param frame The name of the frame -- must match the frame name broadcast to libTF
   * @sa getFixedFrame() */
  void setFixedFrame( const QString& frame );

设置坐标转换,例如上面对应的rviz界面可如下:
.
manager_->setFixedFrame("/vehicle_link");

  /**
   * \brief Create and add a display to this panel, by class lookup name
   * @param class_lookup_name "lookup name" of the Display subclass, for pluginlib.
   *        Should be of the form "packagename/displaynameofclass", like "rviz/Image".
   * @param name The name of this display instance shown on the GUI, like "Left arm camera".
   * @param enabled Whether to start enabled
   * @return A pointer to the new display.
   */
  Display* createDisplay( const QString& class_lookup_name, const QString& name, bool enabled );

创建图层函数,其中class_lookup_name:还可以取“rviz/PointCloud2”,“rviz/RobotModel”,"rviz/TF"等:
图层创建好之后要设置图层的各个属性值,属性值也可以根据rviz图形界面右侧来设置:
subProp( QString propertyName )->setValue(Qvariant value);
.
例如设置网格:
rviz::Display* grid_ = manager_->createDisplay( “rviz/Grid”, “adjustable grid”, true );
grid_->subProp( “Line Style” )->setValue( “Billboards” );
grid_->subProp( “Color” )->setValue(QColor(125,125,125));

3.3 Rviz地图展示

该章节可设置显示的视角,距离,偏航等等;
在这里插入图片描述
直接看代码:

    rviz::ViewManager* viewManager = manager_->getViewManager();
    viewManager->setRenderPanel(render_panel_);
    viewManager->setCurrentViewControllerType("rviz/ThirdPersonFollower");
    viewManager->getCurrent()->subProp("Target Frame")->setValue("/base_link");
    viewManager->getCurrent()->subProp("Near Clip Distance")->setValue("0.01");
    viewManager->getCurrent()->subProp("Focal Point")->setValue("1.90735e-06;-7.62939e-06;0");
    viewManager->getCurrent()->subProp("Focal Shape Size")->setValue("0.05");
    viewManager->getCurrent()->subProp("Focal Shape Fixed Size")->setValue("true");
    viewManager->getCurrent()->subProp("Distance")->setValue("10");
    viewManager->getCurrent()->subProp("Yaw")->setValue("1.7004");
    viewManager->getCurrent()->subProp("Pitch")->setValue("0.770398");
在使用Qt5加载RViz界面时,我们首先需要安装Qt5和RViz的相关依赖,并建立好所需的开发环境。 在Qt5,我们可以使用Qt Widgets或Qt Quick来创建界面。对于RViz界面,一般使用Qt Widgets来创建。 首先,在Qt5创建一个新的Qt Widgets项目。然后,我们需要在项目包含RViz的头文件,并链接RViz的库文件。 在代码,通过创建一个QMainWindow的子类,并在构造函数初始化RViz,可以加载RViz界面。具体示例代码如下: ```cpp #include <QMainWindow> #include <QApplication> #include <rviz/render_panel.h> class RVizWidget : public QMainWindow { public: RVizWidget(QWidget *parent = nullptr) : QMainWindow(parent) { // 创建RViz的渲染面板 rviz::RenderPanel *render_panel = new rviz::RenderPanel(this); // 设置RViz渲染面板为主窗口的央部件 setCentralWidget(render_panel); // 初始化RViz render_panel->initialize(); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建RViz界面窗口 RVizWidget rviz_widget; rviz_widget.show(); return a.exec(); } ``` 以上代码,使用RenderPanel类创建了一个RViz的渲染面板对象,然后通过setCentralWidget方法将渲染面板设置为主窗口的央部件。最后调用initialize方法初始化RViz。 编译并运行代码,就可以看到加载RViz界面的Qt窗口。 需要注意的是,以上代码是一个简单的示例,实际使用可能需要更多的初始化和配置代码,以适应实际应用的需求。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值