之前学习点云库做一些简单的应用都是直接复制demo的代码,然后把导入文件改一下,今天尝试自己写一些程序,结果错漏百出,难受的早上,不过坚持了下来,求夸~~~

这个主要是一个简单的绘制轨迹的教程,绘制轨迹只需要两个东西,旋转R和平移T,只要我们能够得到这两个东西,再结合初始坐标点,利用点云库里面的Visualization模块中的addLine函数就可以实现轨迹的绘制了。

这里为了简单,我们直接采用模拟的数据以及模拟的旋转矩阵。先一步一步讲解流程,最后再附上源码~~

1.生成点云数据

```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()<<endl;

2.模拟生成旋转矩阵

2.模拟生成旋转矩阵```c++
//模拟一个旋转矩阵,为了简单,这里只是用一个,每次迭代都使用这个矩阵,效果是x方向一次增加1个单位长度
//我们知道旋转矩阵形式如下[ 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 <<endl;

3.接下来会用来 Register模块中的transforms函数来实现点的转变

```c++     //将矩阵进行变化    pcl::PointCloud::Ptr cloud2(new pcl::PointCloud);    pcl::transformPointCloud (cloud1, cloud2, transform_1);  cout << "original cloud1 points "<< cloud1->points[0].x<<" "<points[0].y <<"    "<points[0].z<points[0].x<<" "<points[0].y <<"    "<points[0].z<<endl;    cout<<"----------------------------------------"<<endl;

吐槽:不知道为啥B乎每次都把我们格式弄坏了。。。

4.最后会用到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];//这一个的作用是为了下面给每条线段 1 个唯一的id符,不然的画只能画出一条线while(!viewer->wasStopped()){viewer->spinOnce (1000);//这一句很重要,一开始没有写这一句,导致窗口一直没有显示,用于更新屏幕line_numeber++;//依次增加,从而实现id号的不同sprintf(str, "%d", line_numeber);//将数字转化为字符串,addLine需要,addLine函数定义在下面viewer->addLine<pcl::PointXYZ> (cloud1->points[0], cloud2->points[0], str);*cloud1 = *cloud2;//将上一步的点云给另外一个pcl::transformPointCloud (*cloud1, *cloud2, transform_1);  //cout语句用于测试cout << "cloud1 points "<< cloud1->points[0].x<<" "<<cloud1->points[0].y <<" "<<cloud1->points[0].z<<endl;cout << "cloud1 points "<< cloud2->points[0].x<<" "<<cloud2->points[0].y <<" "<<cloud2->points[0].z<<endl;  cout<<"----------------------------------------"<<endl;
}

5.最后把头文件给你就组成完整的程序了

#include <iostream>
#include<pcl/visualization/pcl_visualizer.h>
#include<pcl/registration/transforms.h> #include<stdio.h> //这两个std文件没有作用,因为一开始想用到itoa(),将整形转化为字符的函数,后来发现这
#include <stdlib.h>//这个函数只有在window下面才存在
using namespace std;

注意点:

1.

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 interactor's framerate does not require a redraw yet.

while

viewer->spinOnce (100);一定要加这一句,否则什么现象也没有

2.

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好。

用pcl读ply文件_PCL之轨迹绘制(二)相关推荐

  1. 用pcl读ply文件_一分钟详解PCL中点云配准技术

    原文首发于微信公众号「3D视觉工坊」:一分钟详解PCL中点云配准技术 本文是对前两篇文章:点云配准(一 两两配准)以及3D点云(二 多福点云配准)的补充,希望可以在一定程度上帮助大家对点云配准理解地更 ...

  2. PCL读取ply文件

    PCL读取ply文件 PCL读取ply文件 PCL读取ply文件 以下是利用PCL库读取ply文件代码 int readcloud(pcl::PointCloud<pcl::PointXYZ&g ...

  3. pcl画圆球_PCL之轨迹绘制(二)

    之前学习点云库做一些简单的应用都是直接复制demo的代码,然后把导入文件改一下,今天尝试自己写一些程序,结果错漏百出,难受的早上,不过坚持了下来,求夸--- 这个主要是一个简单的绘制轨迹的教程,绘制轨 ...

  4. pcl中set程序_PCL 常用小知识

    时间计算 pcl中计算程序运行时间有很多函数,其中利用控制台的时间计算 首先必须包含头文件#include #include pcl::console::TicToc time; time.tic() ...

  5. 046 实例11-自动轨迹绘制

    目录 一."自动轨迹绘制"问题分析 1.1 问题分析 1.2 自动轨迹绘制 二."自动轨迹绘制"实例讲解 2.1 自动轨迹绘制 2.2 数据接口定义 2.3 数 ...

  6. CloudCompare源码分析:读取ply文件

    CloudCompare源码分析_读取ply文件 写这些博客的原因,是因为打算好好研究一下点云的各种库的源码,其中比较知名的是PCL(point cloud library)和CC(CloudComp ...

  7. Q81:“三角形网格”之“PLY文件”

    81.1 引入 在"Q79"和"Q80"中用三角形网格细分曲面时,都是将每一个三角形的三个顶点的坐标都保存在内存中.这句话有两个重点: 其一,每个三角形的三个顶 ...

  8. PCL—从PCD文件中读取点云数据(一)

    1.从PCD文件中读取点云数据 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_ty ...

  9. pandas 读csv文件 TypeError: Empty 'DataFrame': no numeric data to plot

    简单的代码,利用pandas模块读csv数据文件,这里有两种方式,一种是被新版本pandas遗弃的Series.from_csv:另一种就是pandas.read_csv 先说一下问题这个问题就是在读 ...

最新文章

  1. 科大讯飞董事长:AI创业,做平台已没有机会
  2. python自学教材-python零基础自学教材
  3. 配置HADOOP开发环境
  4. 编译linux内核成vmlinuz,编译一个内核 - no bzImage/vmlinuz生成
  5. Oracle查询日期
  6. 音视频技术开发周刊 93期
  7. 分数转小数C语言,这是把小数转换成分数的程序,可是输入0.6666无限循环
  8. 如何设置 Windows 默认命令行窗口大小和缓冲区大小
  9. Javascript jquery css 写的简单进度条控件
  10. html5页面制作成品,dw网页设计成品代码
  11. Net(C#)高级程序员面试题
  12. 局域网屏幕共享_给安卓手机连一个大屏幕——多端协作(六)
  13. sqlserver恢复已经删除的表记录
  14. 干货 | 携程用户数据采集与分析系统
  15. mysql 删除自定义函数_MySQL学习——操作自定义函数
  16. mysql error1205 博客_Mysql Error:1205错误诊断
  17. 《AMNet: Deep Atrous Multiscale Stereo Disparity Estimation Networks》
  18. 企业邮箱大全,企业邮箱查询,最大的邮箱是哪个?
  19. 码农与程序员,就好比哈士奇与狼
  20. 软件系统开发费用的估算——功能点方法 应用实例

热门文章

  1. 【Android】SlidingMenu属性详解
  2. Windows Phone本地数据库(SQLCE):11、使用LINQ查询数据库(翻译) (转)
  3. Server-U的批量用户创建
  4. 基于SLP协议的BCH黑客马拉松即将开展
  5. Coinbase调查发现,BCH上市前没有发生不当交易
  6. 比特币黄金(BTG)遭受51%双花攻击?——不亏
  7. AngularJS 1.x系列:Node.js安装及npm常用命令(1)
  8. 使用js实现微信小页面翻页的原理介绍
  9. PHP无法编译undefined reference to `libiconv_open
  10. 从零开始山寨Caffe·拾:IO系统(三)