您的位置:首页 > 其它

ROS:编写简单的发布、订阅

2017-08-26 17:50 411 查看
编写简单的发布和订阅

Talker.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle n; //新建一个节点
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); //新建一个发布者,发布的话题为chatter,消息的数据类型为std_msgs::String

ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();

ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg); //发布消息
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
Listener.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(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, "listener");
ros::NodeHandle n; //新建一个节点
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); //新建一个订阅者,订阅的话题为chatter,收到消息后执行的回调函数
ros::spin();
return 0;
}


在 CMakeLists.txt
文件末尾加入几条语句:

include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
重新编译

# In your catkin workspace

$ catkin_make  

 

运行

start a terminal and run   

$ roscore

start another terminal and run

$ cd ~/catkin_ws   $ source ./devel/setup.bash    $ rosrun beginner_tutorials talker  

start another terminal and run 

$ cd ~/catkin_ws   $ source ./devel/setup.bash    $ rosrun beginner_tutorials listener 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: