1. 程式人生 > >ROS下工作空間、功能包的建立,以及建立節點,實現節點之間的通訊

ROS下工作空間、功能包的建立,以及建立節點,實現節點之間的通訊

我是ROS初學者,完全根據《ROS機器人高效程式設計》第三版這本書學習的,學習第2.4節時,經常會出現一些莫名其妙的問題,所以通過各種上網查資料,最後終於完成了書上的程式設計!以下是我對ROS工作空間的建立、建立節點、實現通訊進行總結

   第一步:建立ROS工作空間

   我們通過mkdir -p直接建立多層目錄。

   $ mkdir -p  ~/dev/catkin_ws/src             //catkin_ws是工作空間目錄,src工作空間下的原檔案目錄

   $ cd  ~/dev/catkin_ws/src

   $ catkin_init_workspace                       //在工作空間中建立CMakeList.txt檔案,這個檔案是建立在~/dev/catkin_ws/src目錄下的

   $ cd  ~/dev/catkin_ws                          //移動到工作空間目錄是為了編譯工作空間

   $ catkin_make                                     //編譯工作空間,只能在工作空間目錄進行

   此時,如果輸入ll命令,就可以看見工作空間目錄下自動建立了新檔案,分別是build和devel資料夾

   $ source devel/setup.bash                  //重新載入setup.bash檔案,你也可以通過關閉終端重新開啟來重新載入

   最後還要在~/.bashrc檔案的末尾新增命令列,來配置我們的環境 $ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc  如果在安裝ros時已經配置了,那就不需要配置了,我們使用的ROS版本是ROS kinetic,如果要使用其他版本的,請自行更改該配置語句!

   第二步:建立ROS功能包和元功能包

   $ cd ~/dev/catkin_ws/src

   $ catkin_create_pkg chapter2_tutorials std_msgs roscpp     //chapter2_tutorials是功能包名字,std_msgs和roscpp是依賴項,std_msgs包含了常見道訊息型別,表示基本資料型別和其他基本道訊息構造,如多維陣列。roscpp 使用C++ 實現ROS的各種功能。如果你還要使用Python庫,還需要在最後邊新增 rospy

   第三步:編譯ROS功能包

    $ cd  ~/dev/catkin_ws

    $ catkin_make                         //編譯工作空間下的所有包,依然是要到工作空間下編譯

   第四步:建立節點

    $ roscd chapter2_tutorials/src              //節點是要建立到功能包下邊的原始檔下邊,所以要先移動到該目錄,如果該語句執行失敗,可以用 $ cd ~/dev/catkin_ws/src/chapter2_tutorials/src替代。

   然後建立兩個檔案,分別命名為example1_a.cpp和example1_b.cpp,第一個檔案會發送帶有節點名稱的資料,第二個檔案接受這些資料並把他顯示在命令列中。

    $ vim example1_a.cpp        //建立並開啟example1_a.cpp檔案

    把以下內容複製到該檔案中:

 #include "ros/ros.h"
#include "std_msgs/String.h"//  
#include <sstream>///////////包含要使用的檔案型別

int main(int argc, char **argv)
{
  ros::init(argc, argv, "example1_a");//啟動該節點並設定其名稱,名稱必須唯一  
  ros::NodeHandle n;//設定節點程序的控制代碼  
  ros::Publisher pub = n.advertise<std_msgs::String>("message", 1000);//將節點設定成釋出者,並將所釋出>主題道型別和名稱告知節點管理器。第一個引數是訊息的名稱:message,第二個是緩衝區道大小。如果主題釋出資料速度較快
,那麼將緩衝區設定為1000個訊息。  
  ros::Rate loop_rate(10);//設定傳送資料道頻率為10Hz  
  while (ros::ok())//當收到Ctrl+C的按鍵訊息或ROS停止當前節點執行時,ros::ok()庫會執行停止節點執行道命令  
  {
//////建立一個訊息變數,變數型別必須符合傳送資料的要求  
    std_msgs::String msg;
    std::stringstream ss;
    ss << " I am the example1_a node ";
    msg.data = ss.str();
    //ROS_INFO("%s", msg.data.c_str());  
    pub.publish(msg);//訊息被髮布  
    ros::spinOnce();//如果一個訂閱者出現,ROS就會更新和讀取所有主題  
    loop_rate.sleep();//按照10Hz的頻率將程式掛起  
  }
  return 0;
}
     儲存之後建立開啟第二個檔案

     $ vim example1_b.cpp

     複製以下內容:

#include "ros/ros.h"
#include "std_msgs/String.h"

void messageCallback(const std_msgs::String::ConstPtr& msg)//每次該節點收到一條訊息時都呼叫此函式,就可以使用或
處理資料。本例中,將收到道資料在命令視窗中輸出來  
{
  ROS_INFO("I heard: [%s]", msg->data.c_str());//用於在命令列中輸出資料  
}

int main(int argc, char **argv)
{
   ros::init(argc, argv, "example1_b");
   ros::NodeHandle n;
    /////建立一個訂閱者,並從主題獲取以message為名稱的訊息資料。設定緩衝區為1000個訊息,處理訊息控制代碼的回撥函式>為messageCallback  
   ros::Subscriber sub = n.subscribe("message", 1000, messageCallback);
     //// ros::spin()庫是節點讀取資料道訊息響應迴圈,當訊息到達的時候,回撥函式就會被呼叫。當按下Ctrl+C時,節點
會退出訊息迴圈,於是迴圈結束。  
   ros::spin();
   return 0;

    第五步:編譯節點,其實前邊的步,基本不會出現問題,後邊可能就會有問題出現了

    接下來需要自行編輯CMakeList.txt檔案,使用如下語句編輯他

    $ rosed chapter2_tutorials CMakeList.txt                 //如果你這步沒有出現錯誤,恭喜你,但是我在執行這步時出現問題:不能找見chapter2_tutorials這個包,我找了好久才發現在編譯之前,需要修改CMakeLists.txt檔案和manifest.xml檔案,需要通過rosmake編譯一下功能包

    $ rosmake chapter2_tutorials                      //編譯完這步後,應該就不會出現上述問題了,接下來再執行上一步,就能成功開啟CMakeList.txt檔案了

    開啟CMakeList.txt檔案後,把以下內容新增到最後邊:

include_directories(
include
  ${catkin_INCLUDE_DIRS}
)

add_executable(example1_a src/example1_a.cpp)
add_executable(example1_b src/example1_b.cpp)

add_dependencies(example1_a
chapter2_tutorials_generate_messages_cpp)
add_dependencies(example1_b
chapter2_tutorials_generate_messages_cpp)

target_link_libraries(example1_a ${catkin_LIBRARIES})
target_link_libraries(example1_b ${catkin_LIBRARIES})

   這部分內容一定不能寫錯,我第一次也是把最後一行中的LIBRARIES的最後一個s寫成了小寫,導致第二個檔案一直不能接收資訊,找了好久才找見!

   接下來就是編譯CMakeList.txt檔案,還是要先到工作空間才能進行編譯

   $ cd ~/dev/catkin_ws

   $ catkin_make --pkg chapter2_tutorials

   接下來在電腦中啟動ROS,需要首先呼叫:

   $ roscore

   啟動ros後,需要再開啟一個終端,我們稱為終端2;

   第六步:執行節點

   首先要檢查ROS是否在執行,在終端2中使用rosnode list命令查詢

   $ rosnode list

   接下來在終端2中執行第一個節點:

   $ rosrun chapter2_tutorials example1_a        //在這裡可能會出現問題依然是:不能發現chapter2_tutorials包,需要在該終端中繼續編輯chapter2_tutorials包,載入setup.bash檔案,執行以下兩步

   $ catkin_make --pkg chapter2_tutorials    

   $ source devel/setup.bash

   然後在重新執行上邊哪一步,即 $ rosrun chapter2_tutorials example1_a ,執行成功後出現空白行,處於等待狀態,

   接著繼續開啟另一個終端,即終端3,在該終端中執行第二個節點:

   $ rosrun chapter2_tutorials example1_b      //如果出現找不到chapter2_tutorials包的問題,請參考上一步。

   如果執行成功,你會發現命令列會不斷重複 [ INFO] [*********.**********]: I heard : [I am the example1_a node]

   則建立連結成功!

相關推薦

ROS工作空間功能建立以及建立節點實現節點之間通訊

我是ROS初學者,完全根據《ROS機器人高效程式設計》第三版這本書學習的,學習第2.4節時,經常會出現一些莫名其妙的問題,所以通過各種上網查資料,最後終於完成了書上的程式設計!以下是我對ROS工作空間的建立、建立節點、實現通訊進行總結   第一步:建立ROS工作空間   我們

ROS學習筆記(一):建立工作空間功能

所有的ROS程式,包括我們自己開發的程式,都被組織成功能包,而ROS的功能包被存放在稱之為工作空間的目錄下。因此,在我們寫程式之前,第一步是建立一個工作空間以容納我們的功能包。其實ROS工作空間就是linux下的一個目錄,建立ROS工作空間就是建立一個linux目錄(我們建立名為catkin_ws的

ROS建立工作空間和程式

要使用ROS系統進行開發,首先需要在ROS下建立工作空間(workspace)和程式包(package)。 建立工作空間: $ mkdir -p ~/catkin_ws/src 執行上述命令即在使用者主目錄下建立了catkin_ws資料夾及其子資料夾src(-p表示建立目標路徑上的所

ROS知識(16)----如何編譯時自動鏈接同一個工作空間的其他的頭文件(包含messagesrvaction自動生成的頭文件)

logs package fin 空間 依賴庫 osc div build 知識 catkin_make編譯時,往往需要自動鏈接同一個工作空間的其他包的頭文件。否則會出現類似如下的錯誤: /home/xx/xx_ws/srcA_package/src/db.hpp:13:

ubuntu16.04ROS作業系統學習(四 / 一)ROS基礎-工作空間

主要知識點: 1.src、build、devel、install各資料夾的功能介紹。 2.建立工作空間(建立資料夾,初始化工作空間)、編譯工作空間、設定環境變數,檢查環境變數 (echo $ROS_PACKAGE_PATH) 3.建立功能包:catkin_create_pkg <

2ROS使用工作空間

一、引言 本篇中,我們首先會展示catkin_make如何構建package,然後演示在不使用catkin_make的情況下手動構建,從而加深對catkin_make工作流程的理解。 二、使用catkin_make 1、使用catkin_make的

ROS基礎學習筆記——工作空間CMakeListpackage.xml

ROS學習筆記(一) 東南大學   zscseu 一、如何建立一個catkin工作空間   如下步驟: source/opt/ros/indigo/setup.bash mkdir-p

編譯ROS工作空間某一個的命令

首先切換到自己的ROS工作空間: $ cd ~/catkin_ws如果你想編譯整個工作空間裡面的包:$ catkin_make如果你只想編譯工作空間某一個包:$ catkin_make -DCATK

Centos系統解除安裝安裝MySQL及使用者的建立授權和使用(詳細。。。。)

由於經常使用linux系統,並且大資料環境搭建中經常會使用到mysql,不像windows系統下的安裝,今天有點空寫一篇,下面我給大家演示一遍。 主要有三部分內容: 1、MySQL的解除安裝 2、MySQL的安裝 3、MySQL使用者的授權和使用者建立、刪除 一、MySQL的解除安裝(如果是僅僅安裝

Windows工作開始選單圖示資料夾位置

工作列: C:\Users\使用者名稱\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar 開始選單: C:\Users\使用者名稱\AppData\Roaming\Microsoft\

ROS roscd找不到功能 環境變數缺少/opt/ros/ingido/stacks

我按裝ROS後 建立工作空間和功能包 但是在使用roscd 進入功能包時卻顯示找不到這個包,然後使用rosed 編輯這個包裡的訊息檔案,也顯示找不到這個包 然後我echo $ROS_PACKAGE_PATH

Android Studio新增libraryjarso

新增jar包 複製jar檔案,貼上到 Project標籤下app/libs資料夾下。 然後新增到依賴庫:可以右鍵jar包選擇“Add As Library”。或者:ctrl+shift+alt+s進

[轉]IE9.0或者360js(JavaScriptjQuery)不能正確執行(加載)按F12後執行正常;Firefoxajax的success返回數據data(jsonstring)無法獲取

cli onf string 不同 logs script blog 綁定 導入 兼容問題1: 頁面的分享等插件加載不全,並無法點擊。 兼容問題2: IE下頁面選擇器(#id、.class.etc.)綁定click事件無法訪問到,後臺springmvc方法,也無法獲取

Oracle創建表空間創建用戶以及授權

指定表 count conf fault 除了 max limited 初學 ati Oracle安裝完後,其中有一個缺省的數據庫,除了這個缺省的數據庫外,我們還可以創建自己的數據庫。 對於初學者來說,為了避免麻煩,可以用‘Database Configuratio

Git 工作版本庫中的暫存區和版本庫之間的關系

再次 出現 它的 git rm div 理解 方式 ast 版本 下圖展示了 工作區、版本庫中的暫存區和版本庫之間的關系:   1. 理解 Git 暫存區 (stage)   在版本庫 .git 目錄下有一個 index 文件,下面針對這個文件做一個有趣的試驗。要說明

DB2中storage group的概念以及建立各種型別的表空間

DB2的表空間根據是否是自動儲存型別的,可以分為兩種,Automatic Storage(AS)和非Automatic Storage,如果是Automatic Storage型別的,建立時不能指定容器的路徑,那麼DB2是怎麼知道它存放的位置的呢?這裡要引申出一個概念:St

MAC最好用的抓工具charles簡單操作教程charles mac入門

ado 端口號 proc 通過 代理 關於 基本操作 sha 今天 Charles for Ma是 mac 平臺上一款非常強大的抓包神器,可以讓開發者監視查看所有連接互聯網的 HTTP 通信,包括請求,響應和 HTTP 頭信息等等,charles mac讓您的 Intern

二叉樹的建立以及前序中序後序遍歷

#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef struct BIT_Node{// ch

Python中建立程序的方法以及併發並行殭屍程序孤兒程序的相關概念

一、併發與並行 並行:多個計算機核心在同時處理多個任務,這時多個任務間是並行關係 併發:同時處理多個任務,但是核心在多個任務間不斷地切換,達到好像都在處理執行的效果,但實際一個時間點核心只能處理其中一個任務。 二、程序 程序與執行緒是實現多工程式設計的實施方案 程序與執

HTML+CSS的兩欄三欄布局以及垂直居中的實現方式

外邊距 add round relative pla tran 樣式 lex 代碼 1.兩欄布局(左固定,右適應) 先寫出初始樣式和結構。 <div class="container"> <div class="left">Lorem ip