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(),以及其他多种模型 。
使用方法
创建窗口和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->appendLineStrip和linesPath->appendLine都可以实现,前者类似于OpenGL里的GL_LINE_STRIP即连接当前点和上一个点,当时一定要有起始点,否则出错,后者则是简单的连接两个点,更多详细参数参考函数参数说明 ;同时也要更新机器人的位置,obj1->setLocation和obj1->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;i<path.size();i++)
{
linesPath->appendLineStrip(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 );
}`
渲染步骤
- 得到窗口对象
win.get3DSceneAndLock();并且锁住,防止渲染的时候被修改。 - 渲染生成的场景,就是修改属性,比如位置,姿态,记得插入
OpenGLSence,语法theScene->insert( xxxxx )。 - 解锁对象
win.unlockAccess3DScene();,然后绘图win.repaint();
结果
Reference
[1] MRPT Tutorial
[2] http://www.mrpt.org/
MRPT的可视化功能在SLAM中扮演重要角色,提供基于OpenGL的图形库,简化了点云、机器人轨迹等的展示。本文通过示例代码介绍了如何创建窗口、插入坐标平面和机器人模型,以及绘制机器人运动轨迹,帮助理解MRPT的可视化使用方法。
584

被折叠的 条评论
为什么被折叠?



