编写发布器节点 talker
#include "ros/ros.h" //包含了ros的头文件
#include "std_msgs/String.h" //引用了std_msgs/String类型的消息,存放在std_msgs package里,由String.msg文件自动生成的头文件 #include <sstream> int main(int argc, char **argv) { ros::init(argc, argv, "talker"); //初始化ros,节点名为talker ros::NodeHandle n; //为这个进程的节点创建一个句柄。第一个创建的 NodeHandle 会为节点进行初始化,最后一个销毁的 NodeHandle 则会释放该节点所占用的所有资源。
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); //告诉master将在topic(chatter)上发布消息,n.advertise()返回一个ros::publish对象,它有一个publish()成员函数可以让你在topic上发布消息。
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); //向所有订阅了chatter的节点发布消息
ros::spinOnce(); //回调函数有用,总是加上即可
loop_rate.sleep();
++count;
}
return 0;
}
编写订阅器节点
#include "ros/ros.h" #include "std_msgs/String.h" void chatterCallback(const std_msgs::String::ConstPtr& msg) //这是一个回调函数,当接受到了chatter话题时会被调用,消息以指针形式传输 { 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); //告诉master我们要订阅主题chatter,消息发布到话题后,ros调用chatterCallback()函数,n.subscribe返回ros::subscribe()对象 ros:spin(); return 0; }
编译节点
CmakeLists.txt中
1 cmake_minimum_required(VERSION 2.8.3)
2 project(beginner_tutorials)
3
4 ## Find catkin and any catkin packages
5 find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)
6
7 ## Declare ROS messages and services
8 add_message_files(FILES Num.msg)
9 add_service_files(FILES AddTwoInts.srv)
10
11 ## Generate added messages and services
12 generate_messages(DEPENDENCIES std_msgs)
13
14 ## Declare a catkin package
15 catkin_package()
16
17 ## Build talker and listener
18 include_directories(include ${catkin_INCLUDE_DIRS})
19
20 add_executable(talker src/talker.cpp)
21 target_link_libraries(talker ${catkin_LIBRARIES})
22 add_dependencies(talker beginner_tutorials_generate_messages_cpp)
23
24 add_executable(listener src/listener.cpp)
25 target_link_libraries(listener ${catkin_LIBRARIES})
26 add_dependencies(listener beginner_tutorials_generate_messages_cpp)