购物网站哪个东西便宜质量好,构建 物流网,凡科轻站小程序制作平台,建设银行网站多少之前学习点云库做一些简单的应用都是直接复制demo的代码#xff0c;然后把导入文件改一下#xff0c;今天尝试自己写一些程序#xff0c;结果错漏百出#xff0c;难受的早上#xff0c;不过坚持了下来#xff0c;求夸#xff5e;#xff5e;#xff5e;这个主要是一个…之前学习点云库做一些简单的应用都是直接复制demo的代码然后把导入文件改一下今天尝试自己写一些程序结果错漏百出难受的早上不过坚持了下来求夸这个主要是一个简单的绘制轨迹的教程绘制轨迹只需要两个东西旋转和平移只要我们能够得到这两个东西再结合初始坐标点利用点云库里面的Visualization模块中的addLine函数就可以实现轨迹的绘制了。这里为了简单我们直接采用模拟的数据以及模拟的旋转矩阵。先一步一步讲解流程最后再附上源码生成点云数据c //为了方便我们在这里只生成一个点pcl::PointCloud::Ptr cloud1(new pcl::PointCloud);cloud1-width 1;cloud1-height 1;cloud1-points.resize(cloud1-width * cloud1-height);cloud1-points[0].x 1;cloud1-points[0].y 1;cloud1-points[0].z 1;cout cloud1 size cloud1-points.size()模拟生成旋转矩阵模拟生成旋转矩阵c//模拟一个旋转矩阵为了简单这里只是用一个每次迭代都使用这个矩阵效果是x方向一次增加个单位长度//我们知道旋转矩阵形式如下[ R t0 1] 下一篇文章会讲解一下这些的由来Eigen::Matrix4f transform_1 ;transform_1 1 , 0 , 0 , 1 ,0 , 1 , 0 , 0 ,0 , 0 , 1 , 0 ,0 , 0 , 0 , 1 ;cout transform_1 接下来会用来 Register模块中的transforms函数来实现点的转变 //将矩阵进行变化pcl::PointCloud::Ptr cloud2(new pcl::PointCloud);pcl::transformPointCloud (cloud1, cloud2, transform_1);cout original cloud1 points cloud1-points[0].xcout吐槽不知道为啥B乎每次都把我们格式弄坏了。。。最后会用到Visualization模块中的PCLVisualizer类显示窗口pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer (3D Viewer));viewer-setBackgroundColor (0, 0, 0);viewer-addText(Trajector, 10, 10, v1 text);viewer-addCoordinateSystem (1.0);viewer-initCameraParameters ();int line_numeber 0;char str[25];//这一个的作用是为了下面给每条线段 个唯一的id符不然的画只能画出一条线while(!viewer-wasStopped()){viewer-spinOnce (1000);//这一句很重要一开始没有写这一句导致窗口一直没有显示用于更新屏幕line_numeber;//依次增加从而实现id号的不同sprintf(str, %d, line_numeber);//将数字转化为字符串addLine需要addLine函数定义在下面viewer-addLine:pointxyz (cloud1-points[0], cloud2-points[0], str);*cloud1 *cloud2;//将上一步的点云给另外一个pcl::transformPointCloud (*cloud1, *cloud2, transform_1);//cout语句用于测试cout cloud1 points cloud1-points[0].xpoints[0].y points[0].zcout cloud1 points cloud2-points[0].xpoints[0].y points[0].zcout}最后把头文件给你就组成完整的程序了#include #include#include #include //这两个std文件没有作用因为一开始想用到itoa()将整形转化为字符的函数后来发现这#include //这个函数只有在window下面才存在using namespace std;注意点void pcl::visualization::PCLVisualizer::spinOnce(int time 1 ; bool force_redraw false )Spin once method.Calls the interactor and updates the screen once.Parameters[in] time- How long (in ms) should the visualization loop be allowed to run.[in] force_redraw- if false it might return without doing anything if the interactors framerate does not require a redraw yet.while(!viewer-wasStopped()){// viewer-spinOnce (100); }viewer-spinOnce (100);一定要加这一句否则什么现象也没有bool pcl::visualization::PCLVisualizer::addLine(const P1 pt1, const P2 ptr2,const std::string id line,int viewpoint 0 )Add a line segment from two points.Parameters[in]pt1the first (start) point on the line[in]pt2the second (end) point on the line[in]idthe line id/name (default: line)[in]viewport(optional) the id of the new viewport (default: 0)Note:每一条线都需要有自己的id号总结还是要多多自己敲代码复制粘贴一时爽真定编码火葬场~~~B乎的格式和Typora很不一样....,还是CSDN好。