之前学习点云库做一些简单的应用都是直接复制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()<

2.模拟生成旋转矩阵

2.模拟生成旋转矩阵

```c++

//模拟一个旋转矩阵,为了简单,这里只是用一个,每次迭代都使用这个矩阵,效果是x方向一次增加1个单位长度

//我们知道旋转矩阵形式如下[ R t

0 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 <

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<

cout<

吐槽:不知道为啥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<:pointxyz> (cloud1->points[0], cloud2->points[0], str);

*cloud1 = *cloud2;//将上一步的点云给另外一个

pcl::transformPointCloud (*cloud1, *cloud2, transform_1);

//cout语句用于测试

cout << "cloud1 points "<< cloud1->points[0].x<points[0].y <points[0].z<

cout << "cloud1 points "<< cloud2->points[0].x<points[0].y <points[0].z<

cout<

}

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

#include

#include

#include #include //这两个std文件没有作用,因为一开始想用到itoa(),将整形转化为字符的函数,后来发现这

#include //这个函数只有在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->wasStopped()){

// viewer->spinOnce (100); }

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画圆球_PCL之轨迹绘制(二)相关推荐

  1. pcl画圆球_PCL 可视化-阿里云开发者社区

    可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术, pcl_visualization库建立了能够快速建立原型的 ...

  2. python画轨迹曲线-python 自动轨迹绘制的实例代码

    用到的思维: 自动化思维,数据和功能分开处理,用数据驱动程序自动运行 接口化设计,数据与程序的对接方式要清晰明了 二维数据应用,应用维度组织数据,二维数据最常用 代码 # AutoTrace.py i ...

  3. 用pcl读ply文件_PCL之轨迹绘制(二)

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

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

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

  5. python二维数组换行输出_关于用python绘制二维数组的问题

    我有一个关于用matplotlib绘制二维数组的问题.在我的代码中,我有一个2D数组,名为len(z)=20,z的值为: [[ 642.3774486 662.59980588 706.8014217 ...

  6. python画二维散点图-python3实现绘制二维点图

    如下所示: import matplotlib.pyplot as plt plt.plot([1,2,3],[4,5,6],'ro') plt.show()#这个智障的编辑器,,,看来高版本的确修复 ...

  7. python画二维图_python3实现绘制二维点图

    如下所示: import matplotlib.pyplot as plt plt.plot([1,2,3],[4,5,6],'ro') plt.show()#这个智障的编辑器,,,看来高版本的确修复 ...

  8. opencv 图像上画出目标运动的轨迹_OpenCV视频分析-Meanshift、Camshift运动轨迹绘制...

    基于均值迁移的对象移动分析(Meanshift) ✏️ ⛳️ 概述 本质: ✔️ Mean Shift均值漂移算法是无参密度估计理论的一种,无参密度估计不需要事先知道对象的任何先验知识,完全依靠训练数 ...

  9. matlab画轨迹的代码,自动轨迹绘制(示例代码)

    一.自动轨迹绘制问题分析 1.1 问题分析 自动轨迹绘制 需求:根据脚本来绘制图形 不是代码实现而是读取文件中数据绘制轨迹 数据脚本是自动化最终要的第一步 1.2 自动轨迹绘制 300,0,144,1 ...

最新文章

  1. Docker持续部署图文详解
  2. 程序员求职成功路(2) - 第3章 数据结构与算法
  3. jdbc mysql - Column count doesn't match value count at row 1.
  4. C++反汇编第五讲,认识C++中的Try catch语法,以及在反汇编中还原
  5. 关于Win7 内存变小处理方法
  6. 7z解压crc错误_winrar压缩包提示crc校验和错误,文件被破坏的解决办法
  7. 5g存储服务器是什么项目,5G时代对服务器有什么要求?
  8. Office快捷键大全之三(Access快捷键下篇)
  9. linux 读分区表文件,Linux 磁盘分区表、文件系统查看和操作
  10. java swing 实现下拉列表点击事件
  11. linux只能用一半的内存,linux可用内存足够为什么还用swap
  12. 黑盒测试方法|测试用例的设计方法--等价类划分方法
  13. 计算机学报latex模板\renewcommand\figurename失效
  14. 阿里星计算机专业好就业吗,不懂就问,本科北邮计算机,硕士北大计算机,现在杭州阿里,能有几个街薪?...
  15. 苏宁易购首页仿写代码-仅供参考# 话不多说,直接上代码,苏宁易购手机app网站首页,仅供参考
  16. 开发U3V时遇到bus hound报babble detect错误
  17. 02 视频或语音转文本
  18. YOLO自带的图像数据增强方法
  19. 面向对象程序设计(JAVA)复习笔记(下)
  20. 调焦后焦实现不同距离成像_眼的明视与光学调焦

热门文章

  1. html和css哪个优先,CSS3 | 样式和优先级
  2. python3导入_Python3导入相对还是绝对的正确方法?
  3. 学计算机随随便便上万,大学“最烧钱”专业排行榜,“家境一般”慎入,“土豪”请随意...
  4. 三万字速通SSM框架入门知识点,快速上手CRUD
  5. Shell脚本——函数
  6. 使用valueOf前必须进行校验
  7. 返回表达式列表中最小值least(exp1,exp2,exp3,……,expn)
  8. 接口测试从零开始系列_mock技术使用
  9. 使用Eclipse-Maven-git做Java开发(13)--导入git仓库的代码到eclipse
  10. 虚拟化之vmware-vsphere (web) client