1. 程式人生 > >ROS下訂閱topic,顯示並儲存Kinect(Xtion pro live )深度點雲圖

ROS下訂閱topic,顯示並儲存Kinect(Xtion pro live )深度點雲圖

這裡訂閱了的是Kinect for Xbox One或是華碩的Xtion Pro Live的topic:/camera/depth_registered/points,初學者務必要了解什麼是depth_registered(配準)。這個topic是包含了利用相機內建的calibration引數來配準RGB圖和深度圖,也即它的畫素點包含了顏色和深度資訊。

1、編寫源程式

下面給出源程式,源程式來源:http://blog.csdn.net/yaked/article/details/52584231,親測可用,其他的都不太行!

    #include <iostream>  
    #include <ros/ros.h>  
    #include <pcl/point_cloud.h>  
    #include <pcl_conversions/pcl_conversions.h>  
    #include <pcl/io/pcd_io.h>  
      
    #include <pcl/visualization/cloud_viewer.h>  
      
    #include <sensor_msgs/PointCloud2.h>  
    using std::cout;  
    using std::endl;  
    using std::stringstream;  
    using std::string;  
      
    using namespace pcl;  
      
    unsigned int filesNum = 0;  
    bool saveCloud(false);  
      
    boost::shared_ptr<visualization::CloudViewer> viewer;  
      
    void cloudCB(const sensor_msgs::PointCloud2& input)  
    {  
        pcl::PointCloud<pcl::PointXYZRGBA> cloud; // With color  
      
        pcl::fromROSMsg(input, cloud); // sensor_msgs::PointCloud2 ----> pcl::PointCloud<T>  
      
        if(! viewer->wasStopped()) viewer->showCloud(cloud.makeShared());  
      
        if(saveCloud)  
        {  
            stringstream stream;  
            stream << "inputCloud"<< filesNum<< ".pcd";  
            string filename = stream.str();  
      
            if(io::savePCDFile(filename, cloud, true) == 0)  
            {  
                filesNum++;  
                cout << filename<<" Saved."<<endl;  
            }  
            else PCL_ERROR("Problem saving %s.\n", filename.c_str());  
      
            saveCloud = false;  
      
        }  
      
      
    }  
      
      
    void  
    keyboardEventOccured(const visualization::KeyboardEvent& event, void* nothing)  
    {  
        if(event.getKeySym() == "space"&& event.keyDown())  
            saveCloud = true;  
      
    }  
      
    // Creates, initializes and returns a new viewer.  
    boost::shared_ptr<visualization::CloudViewer> createViewer()  
    {  
        boost::shared_ptr<visualization::CloudViewer> v(new visualization::CloudViewer("OpenNI viewer"));  
        v->registerKeyboardCallback(keyboardEventOccured);  
      
        return(v);  
    }  
      
    int main (int argc, char** argv)  
    {  
        ros::init(argc, argv, "pcl_write");  
        ros::NodeHandle nh;  
        cout<< "Press space to record point cloud to a file."<<endl;  
      
        viewer = createViewer();  
      
        ros::Subscriber pcl_sub = nh.subscribe("/camera/depth_registered/points", 1, cloudCB);  
      
        ros::Rate rate(30.0);  
      
        while (ros::ok() && ! viewer->wasStopped())  
        {  
            ros::spinOnce();  
            rate.sleep();  
        }  
      
        return 0;  
    }  

2、在ubuntu終端啟動Xtion pro live 驅動

3、用qt編譯並執行節點

小便利:這裡強烈建議初學者在qt下執行ros節點,主要是因為qt5.5.0以上版本已經可以安裝ros外掛,使得建立工作空間(catkin_ws)、包(package)、和節點(node)都可以不再在終端下用命令列進行,非常有助於幫助我們進行後續的程式設計及管理。

4、執行節點後結果顯示

注意:按空格鍵會將當前的點雲儲存下來,儲存到你所建立的package資料夾下。名字為inputcloud0.pcd,inputcloud1.pcd,...依次類推。

至此,ROS下訂閱topic並儲存Xtion深度點雲圖實現結束!


相關推薦

ROS訂閱topic顯示儲存Kinect(Xtion pro live )深度雲圖

這裡訂閱了的是Kinect for Xbox One或是華碩的Xtion Pro Live的topic:/camera/depth_registered/points,初學者務必要了解什麼是depth_registered(配準)。這個topic是包含了利用相機內建的cal

影象的讀取顯示儲存(基於skimage模組)

一 skiamge模組 skimage包的全稱是scikit-image SciKit (toolkit for SciPy) ,它對scipy.ndimage進行了擴充套件,提供了更多的圖片處理功能。它是由python語言編寫的,由scipy 社群開發和維護。skimage包由許多的子

Python3原生爬蟲獲取熊貓直播某一分類的主播人氣儲存到Excel

import re import openpyxl from urllib import request # 斷點除錯 class Spider: url = 'https://www.panda.tv/cate/lol' root_pattern = '<di

影象的讀取顯示以及儲存

%讀取影象 image = imread(‘hunan.jpg’); %顯示影象 imshow(image) read_show_image 警告: 影象太大,無法在螢幕上顯示;將以 33% 顯示 In images

16位深度圖片顯示儲存

Opencv 16位深度圖片顯示並儲存 專案需要,要將cmos相機的資料讀出來,並顯示出圖片來。同事已經通過FPGA+USB的方式,把相機並行資料轉成序列,我需要做的就是上位機,找到frame valid和line valid有位,讀取一個frame的資料後,顯示出來。 設計思路: 三個th

VTK(2)—— 雙view顯示聯動操作

前言:接到一個新的需求 window單視窗程式,雙view,顯示並聯動操作,做了兩種方式進行實現,程式碼思路和原始碼如下: (一)程式碼思路 一、判定誰動了? 方法1:通過當前事件的視窗位置與視窗大小中心軸進行比對 方法2:通過移動後的相機位置與兩個view中相機的

android popupwindow從彈出顯示在某控制元件上方

popupwindow彈出時從下往上,隱藏時從上往下,並且顯示在指定控制元件上方View inflate = LayoutInflater.from(getContext()).inflate(R.layout.popupwindow_shop, null);

PowerShell獲取指定目錄檔案列表和大小儲存成txt文件

#列出filepath下所有子資料夾並統計子資料夾大小 function filesize ([string]$filepath) { if ($filepath -eq $null) { throw "路徑不能為空" } $

【Python】pandas遍歷讀取excel檔案修改儲存(一)

code ide and lib version: python            2.7(64) pycharm            2018.1.4 xlrd            1.1.0 pandas            0.23.1 play:

Opencv 16位深度圖片顯示儲存

專案需要,要將cmos相機的資料讀出來,並顯示出圖片來。同事已經通過FPGA+USB的方式,把相機並行資料轉成序列,我需要做的就是上位機,找到frame valid和line valid有位,讀取一個frame的資料後,顯示出來。 設計思路: 三個thread,第一個從us

vs2013+qt5.51+vtk 實現的 雙view顯示聯動操作

1.首先我們必須將QVTKWidget加入到Qt Designer,只需找到編譯好的vtk的release版本下的QVTKWidgetPlugin.dll,QVTKWidgetPlugin.exp,QVTKWidgetPlugin.lib放入到自己QT下的designer

基於opencv對視頻的灰度變換高斯濾波canny邊緣檢測處理同窗體顯示保存

rmi 其他 AS info ali 利用 測試結果 14. 中間 如題:使用opencv打開攝像頭或視頻文件,實時顯示原始視頻,將視頻每一幀依次做灰度轉換、高斯濾波、canny邊緣檢測處理(原始視頻和這3個中間步驟處理結果分別在一個窗口顯示),最後將邊緣檢測結果保存為一個

Windows/Ubuntu將所有檔名字列舉出來儲存到txt檔案中

Windows 使用如下的DOS命令來實現: dir /s /b > lists.txt 可以將當前路徑下的所有檔案的“檔案路徑+檔名”儲存在lists.txt中。 其中,/s表示的是“列

Linux建立進入目錄的許可權建立顯示普通檔案的許可權

許可權: 檔案許可權 1.檔案訪問者: 擁有者u——-user 所屬組g——-group 其他使用者o—–other 2.檔案訪問許可權的種類: 可讀(r) 可寫(w) 可執行(x) 建立一個目錄,並進入 目錄test

jQuery基礎(動畫篇 animate顯示隱藏淡入淡出拉切換)

app 必須 條件 工作 函數 我們 淡入淡出 延時 button 1.jQuery中隱藏元素的hide方法 讓頁面上的元素不可見,一般可以通過設置css的display為none屬性。但是通過css直接修改是靜態的布局,如果在代碼執行的時候,一般是通過js控制元素的

Pythonopencv使用筆記(一)(圖像簡單讀取、顯示儲存

操作 灰度圖 清晰 ren from tty ims 圖像 type 寫在之前 從去年開始關註python這個軟件,途中間間斷斷看與學過一些關於python的東西。感覺python確實是一個簡單優美、easy上手的腳本編程語言,眾多的第三方庫使得py

[實例]ROS使用OpenCV讀取圖像發布圖像消息在rviz中顯示

top 選項 == works rate pic echo 內容 color 思路: (1)使用opencv讀取本地圖像 (2)調用cv_bridge::CvImage().toImageMsg()將本地圖像發送給rviz顯示 一、使用opencv讀取本地圖像

2.8.2 的ArrayList以及源碼分析

blog util join() explicit ted cep ole 問題: port package 第二章.並發下的ArrayList;import java.util.ArrayList;import java.util.List;/** * Created b

docker安裝centos在其上搭建lnmp環境

方便 libxml bic spro yum 啟動 openss ont dock 一、安裝CentOs容器 1.進入docker下載CentOs,這裏我使用的CentOs6.8   docker pull centos:6.8 2.創建容器   sudo docker r