MRPT学习之可视化

2019-07-12 23:54发布

MRPT学习之可视化

星期一, 31. 七月 2017 09:31下午 可视化是在做SLAM时的一个重要环节,比如显示点云地图,机器人位置和姿态等等,虽然不是SLAM算法的核心,但交互体验直接影响了SLAM的效果,所以如何高效方便的可视化也是很重要的,MRPT上的可视化是基于OpenGL的,它在其基础上进行了许多二次开发,使得图形绘制更加便捷,这里介绍下简单的使用。

示例

  • MRPT下源码在/sample/opengl_objects_demo
  • MRPT下源码在/sample/display3D

关联类

3D场景主要是基于类mrpt::opengl::COpenGLSence。这个类允许使用OpenGL创建,加载,保存和渲染3D场景。

MRPT可以对哪些图元进行渲染

mrpt::opengl可以轻松渲染多种对象,添加箭头mrpt::opengl::CArrow,平面mrpt::opengl::CGridPlaneXY,点云mrpt::opengl::CPointCloud,甚至是栅格地图CSetOfObjects::posePDF2opengl(),以及其他多种模型
示例]![(/home/zhangwei/图片/opengl_object.png

使用方法

官网函数说明

创建窗口和OpenGL对象

可以设置一些属性,窗口的大小,3D场景的视角,远近等等。 CDisplayWindow3D win("Demo of MRPT's OpenGL objects",640,480); COpenGLScenePtr &theScene = win.get3DSceneAndLock(); win.setCameraZoom(20); win.setCameraAzimuthDeg(-180); win.setCameraElevationDeg(70);`

插入一个坐标平面

opengl::CGridPlaneXYPtr obj = opengl::CGridPlaneXY::Create(-10,10,-10,10,0,1); obj->setColor(0.2,0.2,0.2); obj->setLocation(0,0,0); theScene->insert( obj );

插入一个机器人

opengl::CSetOfObjectsPtr obj1 = opengl::stock_objects::RobotPioneer(); obj1->setLocation(2,0,0); theScene->insert( obj1 );`

绘制机器人运动轨迹

绘制的方法是基于mrpt::opengl::CSetOfLines, linesPath->appendLineStriplinesPath->appendLine都可以实现,前者类似于OpenGL里的GL_LINE_STRIP即连接当前点和上一个点,当时一定要有起始点,否则出错,后者则是简单的连接两个点,更多详细参数参考函数参数说明 ;同时也要更新机器人的位置,obj1->setLocationobj1->setPose(CPose3D)都可以,但是后者可以更新机器人的姿态,这更加符合实际。 obj1->setPose(CPose3D(p)); theScene->insert( obj1 ); path.push_back(p); { opengl::CSetOfLinesPtr linesPath = opengl::CSetOfLines::Create(); linesPath->setColor(0,1,0); linesPath->setLineWidth(2); double gtx0=0,gty0=0; linesPath->appendLine(gtx0,gty0,0,gtx0,gty0,0 ); for (int i=0;iappendLineStrip(path[i].x(),path[i].y(),0 ); //linesPath->appendLine(gtx0,gty0,0,path[i].x(),path[i].y(),0 ); //gtx0=path[i].x(); //gty0=path[i].y(); } theScene->insert( linesPath ); }`

渲染步骤

  1. 得到窗口对象win.get3DSceneAndLock();并且锁住,防止渲染的时候被修改。
  2. 渲染生成的场景,就是修改属性,比如位置,姿态,记得插入OpenGLSence,语法theScene->insert( xxxxx )
  3. 解锁对象win.unlockAccess3DScene();,然后绘图win.repaint();

结果

机器人模拟行走轨迹]![这里写图片描述

Reference

[1] MRPT Tutorial
[2] http://www.mrpt.org/