色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在ROS下面的一個組件實現Octomap顯示

工程師鄧生 ? 來源:CSDN ? 作者:熊貓飛天 ? 2022-09-05 10:29 ? 次閱讀

常在別人論文的demo演示視頻中看到能夠實時顯示Octomap, 在經過幾番查找以后發現這個功能可以通過rviz(ROS下面的一個組件)實現。

實現的思路是將點云數據通過ROS發布到某個topic上面比如"/outputCloud",再啟動 octomap 節點將數據讀入該topic并發布到另一個新的topic 上面去。最后在rviz 里面接收這個新topic 達到實時顯示的目的.

注:使用平臺是 ubuntu14.04 ROS Indigo 版本

1.安裝octomap

這個功能需要借助ros,因此我們打開一個終端.(ctrl+alt+T)輸入下面指令安裝octomap (可以直接使用sudo apt-get install ros-indigo-octomap* ,如果你是Ubuntu16 的把 “indigo” 替換 “kinetic” 即可)

sudo apt-get install ros-indigo-octomap-ros #安裝octomap

sudo apt-get install ros-indigo-octomap-msgs

sudo apt-get install ros-indigo-octomap-server

安裝octomap 在 rviz 中的插件

sudo apt-get install ros-indigo-octomap-rviz-plugins
安裝上這個插件以后你可以啟動 rviz ,這時候這個模塊會多一個octo打頭的模組.如下圖所示:


79e74c9e-2ca7-11ed-ba43-dac502259ad0.png ? ?

2.發布點云數據

這里我先使用一個我自己在實驗室跑ORB生成的稠密點云文件,把這個點云文件加載然后通過一個topic發布出去。 如果你手頭沒有現成的點云文件可以在這個地方下載點云文件作為測試使用(test.pcd),完整的代碼和數據我已經打包放在了github上,源文件代碼如下:

/**
*
* 函數功能:讀取pcl點云文件并發布到topic上去
* maker: crp
* data: 2016-6-8
*/

#include
#include
#include
#include
#include
#include

#include
#include
#include
#include
#include

using namespace std;

int main (int argc, char **argv)
{
std::string topic,path,frame_id;
int hz=5;

ros::init (argc, argv, "publish_pointcloud");
ros::NodeHandle nh;

nh.param("path", path, "/home/crp/catkin_ws/test.pcd");
nh.param("frame_id", frame_id, "camera");
nh.param("topic", topic, "/pointcloud/output");
nh.param("hz", hz, 5);

ros::Publisher pcl_pub = nh.advertise (topic, 10);

pcl::PointCloud cloud;
sensor_msgs::PointCloud2 output;
pcl::io::loadPCDFile (path, cloud);
pcl::toROSMsg(cloud,output);// 轉換成ROS下的數據類型 最終通過topic發布

output.header.stamp=ros::Time::now();
output.header.frame_id =frame_id;

cout<<"path = "<

我們通過如下代碼單獨啟動點云發布節點

rosrun publish_pointcloud publish_pointcloud
注意: 這里你需要把path修改為你電腦上存放test.pcd文件的路徑,同時注意我們使用的坐標系是“camera” (這里需要和后面和octomaptransform.launch 文件中的 frame_id 參數一致,否則你會出現Octomap沒有發布數據的情況)

啟動這個代碼就可以看到發布的點云數據的topic.你可以使用rostopic echo 來檢查是否有數據輸出。我發布的點云數據的topic是“/pointcloud/output”

79fa8a98-2ca7-11ed-ba43-dac502259ad0.png

因此我用的命令為:(如果有數據輸出表示你正確的讀取并發布了點云數據)

rostopic echo /pointcloud/output

然后再打開新的終端運行RVIZ:
rosrun rviz rviz

點擊add 按鈕添加 "PointCloud2模塊"

設置topic為 "/pointcloud/output"

設置FixedFram為"camera"

設置完成以后你可以看到界面中會顯示出topic 發布的點云數據,如下圖一樣:

(一定要確保topic上面有數據,后面需要讀取這個topic 轉換成octomap,原來版本中使用的坐標系為“camera_rgb_frame”,修訂后的坐標系為"camera")

7a086226-2ca7-11ed-ba43-dac502259ad0.png ? ?

3.Octomap 實時顯示

接下來的工作就簡單了,我們自己寫一個launch文件去啟動 octomap_server ,創建 octomaptransform.launch 文件,填入下面代碼:

poYBAGMVYWuAAkoEAAFGIQCPdp0979.jpg

注意,這個文件里面有的frame_id 和 remap topic 的值必須和發布節點中的frame_id以及數據發布的topic一致。

接下來首先啟動點云發布節點

rosrun publish_pointcloud publish_pointcloud

其次啟動了這個節點以后,我們再去啟動Octomap服務節點, 正確啟動以后會有幾個 octomap 相關的 topic 發布: (如下圖)
roslaunch publish_pointcloud octomaptransform.launch

7a18c0f8-2ca7-11ed-ba43-dac502259ad0.png

最后在rviz 中添加一個 “OccupancyGrid” 模塊(三維格點). 設置 topic 為"/octomap_full",即可以得到如下結果:

7a38a06c-2ca7-11ed-ba43-dac502259ad0.png


如果你直接下載的我的代碼【3】和數據應該的得到的是如下的效果圖:

7a62c004-2ca7-11ed-ba43-dac502259ad0.png


最后我們將所有的啟動命令寫入到一個launch文件中,我們在publish_pointcloud 包中的 launch 文件夾下面編輯一個名為demo.launch的文件,填入下面代碼:

pYYBAGMVYQmAM8HAAAEuEEZVY0M644.jpg

就可以通過上面的launch文件一鍵啟動節點以及RVIZ了。啟動命令為:

roslaunch publish_pointcloud demo.launch
到這里你已經可以將點云數據發布到一個指定的 topic 上,然后調用 Octomap 在ROS下的srv組件進行實時轉換,并發布到另外一個 Octomap topic 上去.最后通過可視化工具 rviz 進行顯示Octomap。

如果你在其他節點發布點云的數據,然后使用cotomap服務節點進行轉換是,最重要的是要注意octomap的輸入話題(topic)和數據的坐標系(frame_id)兩個參數的設置,通常octomap 沒有數據輸出都是由于這兩個參數設置錯誤導致的。 注意,對于實現增量式的Octomap構建(也就是像SLAM構建點云一樣,一邊走一邊生成全局的octomap),有兩種方法實現。

第一種方法是你把每次SLAM計算得到的當前時刻位姿和點云數據(當前彩色幀和深度幀)進行處理,利用這個位姿把當前時刻的點云旋轉到世界坐標系下發布給Octomap 節點。

由于Octomap 本身具有維護地圖的功能,它自己會去拼接八叉樹地圖,這可以省去很多事情。

另外一種思路就是你使用點云庫自帶的地圖維護工具,把Octomap只當做一個轉換工具,每次都發布全局的點云地圖給octomap節點(隨著點云數據的增大會出現程序崩潰的現象)。

第二種方法下你可以將ORB的關鍵幀生成點云然后一直發布更新后的點云,這個代碼高博以及寫過了,可在github找到. 你將這個包編譯到ROS上以后,再將這個算法生成的全局點云地圖發布到octomap節點上,也就可以實現實時的Octomap 啦,再做導航什么的就方便了。

以上兩種思路都可以實現環境Octomap的構建,。



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SLAM
    +關注

    關注

    23

    文章

    426

    瀏覽量

    31886
  • ROS
    ROS
    +關注

    關注

    1

    文章

    279

    瀏覽量

    17042
  • orb
    orb
    +關注

    關注

    0

    文章

    21

    瀏覽量

    9904

原文標題:Octomap 在ROS環境下實時顯示

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    求分享TAS5766Mlinux下面的驅動參考代碼

    您好,我們是用TAS5766M基于mstar芯片做tv板,能否提供TAS5766Mlinux下面的驅動?謝謝!
    發表于 10-28 06:11

    ROS讓機器人開發更便捷,基于RK3568J+Debian系統發布!

    本帖最后由 Tronlong創龍科技 于 2024-7-19 17:18 編輯 ROS系統是什么 ROS(Robot Operating System)是適用于機器人的開源的
    發表于 07-09 11:38

    如何在ROS中調用.so文件

    設備 筆者有需求,需要結合ROS做模擬量采集。有種解決方法是ADC芯片+STM32主控,通過串口的方式與上位機通信,但串口通信速度很慢,達不到要求遂放棄。也考慮過使用NI的數據采
    發表于 07-02 14:44

    esp32關于component組件怎么使用遇到的問題求解

    請教各位,我最近剛剛學習esp32,關于component組件怎么使用遇到問題,我創建了project, 里面的main直接拷貝的idf里面的
    發表于 06-26 07:08

    ESP-IDF創建組件調用time.h中的函數和組件,但是編譯直報錯怎么解決?

    ;timeinfo); 我想知道main.c 是怎么關聯的 放在main.c 中就沒問題,我的組件里就有問題. 我想實現面的代碼
    發表于 06-11 07:03

    stm32讀取u盤里面的圖片數據顯示,有時會沒有反應,為什么?

    數據,如bmp, jpg等,然后lcd屏顯示,剛開始還可以,連續讀取顯示會后,程序就假死了,次數按下按鍵有反應,但是圖片顯示不會刷新,仿
    發表于 05-11 07:39

    HarmonyOS開發案例:【使用List組件實現設置項】

    使用List組件、Toggle組件以及Router接口,實現簡單的設置頁,點擊將跳轉到對應的詳細設置頁面。
    的頭像 發表于 05-10 17:01 ?973次閱讀
    HarmonyOS開發案例:【使用List<b class='flag-5'>組件</b><b class='flag-5'>實現</b>設置項】

    HarmonyOS實戰開發-深度探索與打造個性化自定義組件

    今天分享下 什么是自定義組件?及其自定義組件的實戰。 做過前端或者android開發的都知道自定義組件,鴻蒙中顯示
    發表于 05-08 16:30

    用悟空派全志H3開發板做一個基于ROS系統的全向輪小車

    這個強大的開發板的些關鍵特性以及我是如何利用它來打造全向輪的小車的。 2、產品設計介紹 本次設計的全向輪小車是
    發表于 05-06 11:15

    鴻蒙ArkUI開發實戰:制作【簡單計數器】

    `@Entry`?修飾符表示面的入口,它需要在?`main_pages.json`?配置才可以設備上正常顯示,?`@Componen
    的頭像 發表于 04-08 18:05 ?661次閱讀
    鴻蒙ArkUI開發實戰:制作<b class='flag-5'>一</b><b class='flag-5'>個</b>【簡單計數器】

    EtherCAT運動控制器ROS上的應用(下)

    正運動技術動態鏈接庫環境配置以及EtherCAT運動控制器ROS下的單軸運動。
    的頭像 發表于 03-13 14:54 ?647次閱讀
    EtherCAT運動控制器<b class='flag-5'>在</b><b class='flag-5'>ROS</b>上的應用(下)

    EtherCAT運動控制器ROS上的應用(上)

    本文以正運動技術EtherCAT運動控制器ZMC432和ZMC408CE為例,介紹正運動技術運動控制器ROS上的應用開發。
    的頭像 發表于 03-06 11:47 ?1255次閱讀
    EtherCAT運動控制器<b class='flag-5'>在</b><b class='flag-5'>ROS</b>上的應用(上)

    系統鏡像Ubuntu_ROS2中ROS2是什么意思,帶有ROS2開發環境嗎?

    請問下,百度文庫資料里面,下圖所示的系統鏡像Ubuntu_ROS2中ROS2是什么意思,帶有ROS2開發環境嗎?與前面4GB版本的鏡像有什么區別?
    發表于 03-01 23:06

    【youyeetoo X1 windows 開發板體驗】基于ROS開發的LIO系統——項目計劃+前言開箱

    ,來實現SLAM系統設計; 現如今window,也不斷完善自身生態,也2018年將機器人領域著名的ROS系統,從window10開始兼容使用; 而本次的項目也是屬于
    發表于 01-26 17:58

    數字基帶濾波器是解調前面的還是后面的

    仿真的時候,數據從ADC出來后,ADS的些example中,是用下面的方式進行評估的。
    的頭像 發表于 01-24 14:52 ?860次閱讀
    數字基帶濾波器是<b class='flag-5'>在</b>解調前<b class='flag-5'>面的</b>還是后<b class='flag-5'>面的</b>?
    主站蜘蛛池模板: 亚洲精品有码在线观看| 亚洲久久少妇中文字幕| 一本道无码字幕在线看| 國產日韓亞洲精品AV| 亚洲第一成年网站视频| 国产精品久久人妻拍拍水牛影视| 日本三级黄色大片| 果冻传媒9CM在线观看| 色小姐.com| 亚洲色欲色欲综合网站| 国产乱子影视频上线免费观看| 午夜爱情动作片P| 国产午夜免费视频片夜色| 性绞姿始动作动态图| 含羞草完整视频在线播放免费| 亚洲欧美成人在线| 久久亚洲伊人| 99久久精品免费国产一区二区三区| 欧美成a人片免费看久久| 成人18视频在线观看| 视频一区国产在线二区| 国产色婷亚洲99精品AV在| 亚洲一区自拍高清亚洲精品| 露露的性战k8经典| 百度影音第四色| 性绞姿始动作动态图| 久久www免费人成_看片高清| 2019久久这里只精品热在线观看| 国产女人喷潮视频免费| 亚洲国产精品热久久| 久久99re2在线视频精品| 607080老太太AW| 日韩精品亚洲专区在线影院| 国产强奷糟蹋漂亮邻居在线观看| 亚洲一卡久久4卡5卡6卡7卡| 免费看的一级毛片| 亚洲野狼综合网站| 美女也烦恼主题曲| 国产成+人欧美+综合在线观看| 亚洲区 bt下载| 欧美另类与牲交ZOZOZO|