MRPT学习之可视化

MRPT的可视化功能在SLAM中扮演重要角色,提供基于OpenGL的图形库,简化了点云、机器人轨迹等的展示。本文通过示例代码介绍了如何创建窗口、插入坐标平面和机器人模型,以及绘制机器人运动轨迹,帮助理解MRPT的可视化使用方法。

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  "mrpt-opengl")

使用方法

官网函数说明

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

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

Reference

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值