ROS回顾与整理《一》

我们在刚刚创建的learning_communication文件下编写文件listener.cpp talker.cpp;其中talker.cpp

 1 /**
 2  * 该例程将发布chatter话题,消息类型String
 3  */
 4  
 5 #include <sstream>
 6 #include "ros/ros.h"
 7 #include "std_msgs/String.h"
 8 
 9 int main(int argc, char **argv)
10 {
11   // ROS节点初始化
12   ros::init(argc, argv, "talker");
13   
14   // 创建节点句柄
15   ros::NodeHandle n;
16   
17   // 创建一个Publisher,发布名为chatter的topic,消息类型为std_msgs::String
18   ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
19 
20   // 设置循环的频率
21   ros::Rate loop_rate(10);
22 
23   int count = 0;
24   while (ros::ok())
25   {
26     // 初始化std_msgs::String类型的消息
27     std_msgs::String msg;
28     std::stringstream ss;
29     ss << "hello world " << count;
30     msg.data = ss.str();
31 
32     // 发布消息
33     ROS_INFO("%s", msg.data.c_str());
34     chatter_pub.publish(msg);
35 
36     // 循环等待回调函数
37     ros::spinOnce();
38     
39     // 按照循环频率延时
40     loop_rate.sleep();
41     ++count;
42   }
43 
44   return 0;
45 }

listener.cpp

 1 /**
 2  * 该例程将订阅chatter话题,消息类型String
 3  */
 4  
 5 #include "ros/ros.h"
 6 #include "std_msgs/String.h"
 7 
 8 // 接收到订阅的消息后,会进入消息回调函数
 9 void chatterCallback(const std_msgs::String::ConstPtr& msg)
10 {
11   // 将接收到的消息打印出来
12   ROS_INFO("I heard: [%s]", msg->data.c_str());
13 }
14 
15 int main(int argc, char **argv)
16 {
17   // 初始化ROS节点
18   ros::init(argc, argv, "listener");
19 
20   // 创建节点句柄
21   ros::NodeHandle n;
22 
23   // 创建一个Subscriber,订阅名为chatter的topic,注册回调函数chatterCallback
24   ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
25 
26   // 循环等待回调函数
27   ros::spin();
28 
29   return 0;
30 }
1 cd ~/catkin_ws
2 catkin_make

编译成功后。

我们打开三个终端:

 1 ## 第一个终端
 2 
 3 roscore
 4 
 5 ## 第二个终端
 6 
 7 source ~/catkin_ws/devel/setup.bash
 8 rosrun learning_communication talker
 9 
10 ## 第三个终端
11 
12 source ~/catkin_ws/devel/setup.bash 
13 rosrun learning_communication listener

请一定要记得,重新source!!!!!

 

如图,左边是talker,右边是listener。

猜你喜欢

转载自www.cnblogs.com/winslam/p/10089014.html