pcl畫圓球_PCL之軌跡繪制(二)

之前學習點云庫做一些簡單的應用都是直接復制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好。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542983.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

note2 android4.3,玩家們動手吧 Note2安卓4.3固件已泄漏

【PConline 資訊】最近各個牌子的安卓機迎來了升級安卓4.3的大潮&#xff0c;現在三星Galaxy Note2的安卓4.3固件已經泄漏出來了。實際上&#xff0c;此前三星官方已經確認&#xff0c;Galaxy Note3可以獲得官方的安卓4.3固件升級&#xff0c;但具體日期沒有確定&#xff0c;只…

SDP學習筆記

一、SDP規范了回話描述的格式&#xff0c;一般結合會話協議共同工作。 常見的會話傳送協議包括:SAP(Session Announcement Protocol 會話公告協議),SIP,RTSP,HTTP,和使用MIME的E-Mail。 &#xff08;PS&#xff1a;對SAP只能包含一個會話描述,其它會話協議的SDP可包含多個會話描…

sinh_帶有Python示例的math.sinh()方法

sinhPython math.sinh()方法 (Python math.sinh() method) math.sinh() method is a library method of math module, it is used to get the hyperbolic sine of given number in radians, it accepts a number and returns hyperbolic sine. math.sinh()方法是數學模塊的庫方…

android serviceconnection unbind流程,Android unbindService 流程分析

基于Android 6.0的源碼剖析&#xff0c; 分析bind service的啟動流程。/frameworks/base/core/java/android/app/ContextImpl.java/frameworks/base/core/java/android/app/LoadedApk.java/frameworks/base/core/java/android/app/IServiceConnection.aidl(自動生成Binder兩端)…

【JUnit 報錯】 method initializationerror not found:JUnit4單元測試報錯問題

今天是用JUnit測試一段代碼&#xff0c;報錯method initializationerror not found:&#xff1a;出現如下問題&#xff1a; 雙擊這個就顯示出現如下的錯誤&#xff1a; 查詢網上&#xff0c;說是junit版本的問題&#xff1a; 那我就不使用JUnit這個Libernary了&#xff0c;下載…

flash 不顯示 旋轉 補間動畫_【圖片】Flash入門5:詳解制作補間動畫(非傳統補間)【flash軟件吧】_百度貼吧...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓●●關于補間動畫●●●1、準備事項注意&#xff1a;像 Flash 中的大多數內容一樣&#xff0c;動畫不需要任何 ActionScript。然而&#xff0c;如果您愿意&#xff0c;您可以使用 ActionScript 創建動畫。在創建補間之前&#xff0…

math.ceil帶小數點_Python中帶有示例的math.ceil()方法

math.ceil帶小數點Python math.ceil()方法 (Python math.ceil() method) math.ceil() method is a library method of math module, it is used to get the ceil value of a given number, it accepts a number/numeric expression and returns the smallest integral value wh…

將byte數組以html形式輸出到頁面,java 數組顯示到html

java 數組顯示到html[2021-02-05 01:08:54] 簡介:php去除nbsp的方法&#xff1a;首先創建一個PHP代碼示例文件&#xff1b;然后通過“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推薦&#xff1a;…

JDK各版本新增的主要特性

JDK1.5新特性&#xff1a; 1.自動裝箱與拆箱&#xff1a; 2.枚舉 3.靜態導入&#xff0c;如&#xff1a;import staticjava.lang.System.out 4.可變參數&#xff08;Varargs&#xff09; 5.內省&#xff08;Introspector&#xff09;&#xff0c;主要用于操作JavaBean中的屬性&…

oracle 導入sql文件 漢字亂碼_將現有的sql腳本導入 Oracle 數據庫,中文亂碼問題...

將現有的sql 腳本導入 Oracle數據庫比如 在windows 系統下&#xff0c;可以寫一個 bat 來實現直接導入如&#xff1a;bat 中的內容如下&#xff0c;logs.log 將會記錄執行日志sqlplus user/passworddbname create.sql > logs.logcreate.sql 中的內容可以是需要執行的sql 語句…

html圖片多邊形怎么寫,使用CSS3構建的圖像多邊形裁剪動畫特效

CSS語言&#xff1a;CSSSCSS確定html {background: #333;}.polygon {-webkit-clip-path: polygon(50% 0%, 79.38926% 9.54915%, 97.55283% 34.54915%, 97.55283% 65.45085%, 79.38926% 90.45085%, 50% 100%, 20.61074% 90.45085%, 2.44717% 65.45085%, 2.44717% 34.54915%, 20.…

python函數示例_帶Python示例的complex()函數

python函數示例Python complex()函數 (Python complex() function) complex() function is a library function in Python, it is used to get the complex number from given a real number or/and an imaginary number (which is an optional part), it accepts either a rea…

windows 下 git 禁用 CRLF 轉換 LF

2019獨角獸企業重金招聘Python工程師標準>>> windows中的換行符為 CRLF&#xff0c; 而在linux下的換行符為LF&#xff0c;所以在執行add . 時出現提示&#xff0c;解決辦法&#xff1a; 刪除根目錄 .git 文件夾禁用自動轉換 > git config --global core.autocrl…

cmd執行sql文件路徑 oracle_oracle 基礎 執行sql文件

Oracle執行外部文件&#xff1a;sql>new.sql執行多個sql文件:1.把所有的文件都放在同一個目錄下&#xff0c;然后在命令行里執行命令&#xff1a;c:>dir/b > d:/1.sql會把所有的sql文件名都輸出到一個sql文件中。2.用UltraEdit打開生成的sql文件&#xff0c;altC切換到…

獲取天氣html,使用htmlparser獲取sohu的天氣預報

首先&#xff0c;我們新建一個類&#xff0c;存放天氣信息/** Created on 2005-3-8** To change the template for this generated file go to* Window>Preferences>Java>Code Generation>Code and Comments*/packageorg.exoplatform.portlets.chinaweather.compon…

使用gulp構建前端(三)

為什么80%的碼農都做不了架構師&#xff1f;>>> 使用gulp構建前端&#xff08;三&#xff09; 緊接著上述文章內容&#xff0c;開始新的插件的使用 插件三 gulp-clean-css&#xff0c;作用減小文件大小&#xff0c;并給引用url添加版本號避免緩存&#xff0c;一個需…

c++中atan2函數_atan2()函數以及C ++中的示例

c中atan2函數C atan2()函數 (C atan2() function) atan2() function is a library function of cmath header, it is used to find the principal value of the arc tangent of y/x, where y is the proportion of the y-coordinate and x is the proportion of the x-coordin…

python不合法的布爾表達式_python測試題

一、填空題 1.Python使用符號標示注釋;以劃分語句塊。 2、Python序列類型包括 、、三種; 是Python中唯一的映射類型。 3、Python中的可變數據類型有,不可變數據類 型有。 4、Python的數字類型分為、、等子類型。 5、設s=‘abcdefg’,則s[3]值是 ,s[3:5]值是 , s[:5]值是…

網站html標簽如何優化,網站HTML標簽優化教程

真正需要SEOer掌握并經常使用的HTML標簽也就那么幾個&#xff0c;本小節丈哥seo帶來的是頁面HTML標簽優化。title標簽 – 標題標簽1)title標簽用法網站SEOHTML標簽優化教程 – 丈哥seo2)標題標簽的作用關于網站標題寫法與操作技巧有許多&#xff0c;需要怎么優化標題的朋友可以…

hypot函數_hypot()函數與C ++中的示例

hypot函數C hypot()函數 (C hypot() function) hypot() function is a library function of cmath header, it is used to find the hypotenuse of the given numbers, it accepts two numbers and returns the calculated result of hypotenuse i.e. sqrt(x*x y*y). hypot()…