1. 程式人生 > 其它 >Ros的通訊第第一課

Ros的通訊第第一課

//////////////////////////Ros建立釋出者talker/////////////////////////////////////////////////////////////
#include "ros/ros.h" //
#include "std_msgs/String.h" // 引用std_msgs類下面的String標頭檔案
int main(int argc, char **argv){

ros::init(argc,argv,"talker"); // 初始化節點,注意這裡的talker就是節點的名稱,也是可執行檔案的名稱,所以在進行執行生成可執行檔案的時候不能隨便的更改
ros::NodeHandle n; // 建立一個節點

// 建立一個釋出者類的物件,使用的是節點的屬性進行初始化,這裡的話題型別是:std_msgs::String型別,建立話題通道chatter,注意就收放的話題的通道應該與其相同
ros::Publisher Publisher_n = n.advertise<std_msgs::String>("chatter",1000);
// 例項化一個延時的物件,這裡的對相是loop_rate
ros::Rate loop_rate(10);
int count=0; // 定義普通變數用於計數
while(ros::ok()){

std_msgs::String msg; // 建立一個需要釋出的資料的物件
msg.data="hello world"; // 初始化物件的成員變數
ROS_INFO("%s",msg.data.c_str()); //列印相關的內容,判斷初始化是否成功
Publisher_n.publish(msg); // 使用例項化的釋出者物件進行訊息的釋出

ros::spinOnce(); // 迴圈一次
loop_rate.sleep(); // 呼叫延時物件的成員函式進行延時
++count;

}
return 0;
}
~ ////////////////////////////////////定義監聽者listener///////////////////////////////////////
~
#include <ros/ros.h>
#include "std_msgs/String.h"

//回撥函式,裡面的引數是固定的
void backhandler(const std_msgs::String::ConstPtr& msg){

ROS_INFO("I hear: %s",msg->data.c_str());// 上面出入的是一個指標,所以訪問的方式使用的是->進行訪問
}
int main(int argc , char **argv){
ros::init(argc,argv,"listener"); // 初始化節點,節點的名稱是listener
ros::NodeHandle n; // 建立節點物件
// 定義一個訂閱者的物件 使用節點的引數進行初始化,通道是和釋出者一樣chatter,有1000個可以等待,回到函式是backhandler
ros::Subscriber subscriber_n = n.subscribe("chatter",1000,backhandler);

ros::spin(); // 不斷的迴圈

return 0;

}