目標檢測與位姿估計(十九) ROS通訊

2021-10-25 18:29:28 字數 3641 閱讀 2004

參考《ros機械人程式設計》(原書第2版):但是發現其中的一些命令並不能實現正確的結果,且由於版本的問題,一些配置資訊不能滿足當前的需要。

my system : 在virtualbox下匯入的rosindigo32bits整合環境,核心為ubuntu 14.04 lts

在這個系統預設的只安裝了vi,使用之前需要先安裝vim,不然後期將無法使用vim開啟cmakelists.txt檔案。當然也可以安裝其他編譯器。

首先建立工作空間:

$mkdir -p ~/dev/catkin_ws/src //建立資料夾,-p的目的是建立所述路徑中所有的檔案路徑

$cd ~/dev/catkin_ws/src

$catkin_init_workspace //定義當前路徑為工作空間

當我們建立工作空間之後,裡面並沒有功能包,只有cmakelists.txt檔案。現在進行工作空間的編譯:

$cd ~/dev/catkin_ws

$catkin_make

此時,開啟當前檔案目錄,將會看到新增加了兩個資料夾build和devel,註冊程式和新增路徑:

$source devel/setup.bash
$echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
建立ros功能包和綜合功能包:

$cd ~/dev/catkin_ws/src

$catkin_create_pkg chapter2_tutorials std_msgs roscpp //此處建立的是使用c++實現的程式資料夾

在功能包下建立兩個檔案example1_a.cpp和example1_b.cpp,example1_a.cpp將會傳送帶有節點名稱的資料,example1_b.cpp將會把這些命令顯示在視窗中。建立檔案.cpp可以通過兩種形式,1、通過命令$vim example1_a開啟。2、直接像在window下建立檔案一樣建立檔案。

在example1_a.cpp中寫入程式如下:

#include"ros/ros.h"

#include"std_msgs/string.h"

#include"sstream"

int main(int argc,char **ar**)

return 0;

}

在example1_b.cpp中寫入程式如下:

#include"ros/ros.h"

#include"std_msgs/string.h"

void chattercallback(const std_msgs::string::constptr& msg)

int main(int argc, char **ar**)

接下來就是編譯節點,但是在編譯節點之前需要自行編譯cmakelists.txt檔案。

(說明:1、cmakelists.txt是chapter2_tutorials專案下的檔案。2、如果沒有安裝vim將無法開啟cmakelists.txt檔案。)

$rosed chapter2_tutorials cmakelists.txt
將下面的命令寫入到檔案的末尾(注意:一直往下拉,知道右下角顯示100%,注釋後面還是有程式的。)

include_directories(include $)

add_executable(chap2_example1_a src/example1_a.cpp)

add_executable(chap2_example1_b src/example1_b.cpp)

add_dependencies(chap2_example1_a chapter2_tutorials_generate_messages_cpp)

add_dependencies(chap2_example1_b chapter2_tutorials_generate_messages_cpp)

target_link_libraries(chap2_example1_a $)

target_link_libraries(chap2_example1_b $)

現在使用catkin_make工具來編譯全部的功能包和節點:

$cd ~/dev/catkin_ws/

$catkin_make

如果編譯成功則會出現下面的截圖:

至此,乙個完整的節點程式就完成了,最後,檢查正確性:

首先啟動ros(如果之前沒有啟動的話):

$roscore
開啟新的終端找到功能包路徑和註冊程式

$cd ~/dev/catkin_ws

$source devel/setup.bash

$catkin_make

(說明:一定要執行以上命令 否則將找不到功能包)

執行 : 

$ rosrun chapter2_tutorials chap2_example1_a
注意:我們之前在cmakelists.txt檔案裡面新增的命令為:

add_executable(chap2_example1_a src/example1_a.cpp)

add_executable(chap2_example1_b src/example1_b.cpp)

因此當你執行命令

$ rosrun chapter2_tutorials example1_a
會報錯,如下截圖:

再次開啟乙個新的終端:同樣的操作執行example1_b檔案,觀察example1_b執行視窗,你將會看到以下資訊:

至此,簡單的節點之間的通訊完成了。

一點小插曲:

1、在開啟cmakelists.txt檔案的時候由於沒有安裝vim,導致錯誤,提示讓我安裝vim,可是當執行安裝命令

的時候卻又不能安裝,各種奇葩的錯誤都有,根據網上提供的一些資料,嘗試了更新庫甚至替換庫,但是沒有解決,最後在超級使用者模式下解決了。

2、之前由於example1_a.cpp和example1_b.cpp程式輸錯了,導致catkin_make的時候報錯,還糾結了許久,才發現報錯原因就是程式本身的問題,截圖如下:

希望有遇到類似問題的夥伴注意看錯誤原因分析,一般從第乙個錯誤處開始分析,從第乙個錯誤或者警告開始一行行的改。

如何理解物體的6D位姿估計任務?

如何 感性 地理解物體的6d姿態估計任務?答 三維世界中,比如我們開車行駛在道路上,我們不僅需要關注前方是否有車輛,而且更在意前方車輛的狀態,或者說姿態,是正在轉彎,還是正在駛向自己,或是遠離自己。其實這就是乙個物體的6d姿態估計任務。物體就是前方車輛,其在當前時刻,並在我方視角下,它的三維空間位置...

6DoF位姿估計之SSD 6D

4 評價 ssd 6d網路模型的演算法流程為 輸入一張299 times 299的彩色影象到backbone網路 inceptionv4 中,得到6個不同尺度的特徵圖 接著對於每乙個特徵圖,通過3 times 3的滑動視窗得到特徵圖上每個畫素點的分類和回歸結果,分類結果包括c cc種物體類別 取樣得...

目標檢測與目標識別

目標識別 objec recognition 是指明一幅輸入影象中包含哪類目標。其輸入為一幅影象,輸出是該影象中的目標屬於哪個類別 class probability 目標檢測 object detection 除了要告訴輸入影象中包含哪類目標外,還要框出該目標的具體位置 bounding boxe...