第四課4、ROS用戶端

來源:互聯網
上載者:User

標籤:include   標頭檔   技術分享   topic   while   style   cat   編寫   publish   

ROS用戶端提供一些列庫檔案用於使用者開發。

ROSCPP用戶端(c++用戶端)

首先建立一個包

然後catkin_make一下

在建立的包目錄下,建立一個訊息檔案msg

然後需要產生訊息foo.h以便以後我們可以調用,我們進入package.xml裡面去修改,

然後再回到CMakeLists.txt中

下面編譯一下,

下面來寫一下代碼:

我們以前已經寫過了make檔案,查看一下

有了這個檔案,我們就可以在eclipse中開啟這個工程,先執行一下這個檔案:

下面開啟eclipse

然後file->import,

下面要在src中寫一個源檔案,叫做move_publisher.cpp

再寫一個move_subscriber.cpp

首先要控制turtlesim,他的話題topic是/turtle1/cmd_vel訊息類型為geometry_msgs/Twist。

下面編寫發布程式

 

/*  * move_publisher.cpp  *

 *  Created on: Jan 16, 2017

 *      Author: gary  */

#include<ros/ros.h> //訊息的標頭檔

#include<geometry_msgs/Twist.h>

//一定要加命令列參數,argc指參數個數

//argv為具體的參數

int main(int argc,char **argv)

{  

//初始化,move_publisher為節點名稱

 ros::init(argc,argv,"move_publisher");  

//定義一個控制代碼  

ros::NodeHandle n;  

//定義一個發行者對象pub,指定需要的類型為geometry_msgs::Twist

 //發布的主題為turtle1/cmd_vel,緩衝區大小為1000  ros::Publisher pub=n.advertise<geometry_msgs::Twist>("turtle1/cmd_vel",1000);  

//執行個體化一個訊息對象  

geometry_msgs::Twist tw;  

//並對它進行賦值,分別是角速度賦值

 tw.angular.z=2;  

tw.angular.x=0;  

tw.angular.y=0;  

//線速度賦值  

tw.linear.x=2;

 tw.linear.y=0;  

tw.linear.z=0;

 //上面訊息結構已經定義了,下面發布這個訊息  

//指定發布頻率,允許迴圈頻率當前是10HZ,

 ros::Rate rate(10);  //ros::ok()如果按下ctrl+c則它會返回一個false值  

while(ros::ok())  

{   //指定要發布的訊息   

pub.publish(tw);   

//spin()是指在此處固定等待訊息,進入迴圈

  //spin_once()迴圈一次執行回呼函數  

 ros::spin(); //要改成ros::spinOnce()才能正確運行

 }

 rate.sleep();

}

下面修改一下CMakeLists.txt,

添加一行

add_executable(move_publisher src/move_publisher.cpp)

以及

target_link_libraries(move_publisher
   ${catkin_LIBRARIES}
 )

儲存一下,下面來編譯,

catkin_make,編譯正確後,運行一下

rosrun turtle_move move_publisher

 下面再寫一個訂閱者:

把剛剛的訊息加到訂閱者裡面來,也把發行者和接收者寫到一起,

然後修改CMakeLists.txt

加入以下:

add_executable(move_subscriber src/move_subscriber.cpp)

target_link_libraries(move_publisher
   ${catkin_LIBRARIES}
 )

再進行編譯

catkin_make,沒有問題,之後運行之,正確。

下面再寫一個計時器:

類似於建立一個主題訂閱

然後在CMakeLists.txt裡面再修改,

添加上

add_executable(timer src/timer.cpp)

target_link_libraries(timer
   ${catkin_LIBRARIES}
 )

然後編譯正確,然後運行,結果也是正確的。

 

第四課4、ROS用戶端

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.