发布器和订阅器都是可执行文件。对C++语言,我们在.cpp文件中创建,并编译生成可执行文件,
一、发布器:
1、cd到包目录下,然后在src文件夹下创建.cpp文件;
2、.cpp文件包括以下部分:
①包含(include)依赖库,如ros/ros.h、std_msgs/String.h、sstream等
②主函数部分: ros::init(argc,argv,"talker"); // 向ROS系统注册当前节点
ros::NodeHandle n; // 为当前节点定义一个节点句柄
// 向ROS节点网络广播:当前节点要向chatter话题发布消息std_msgs/String,
// 消息缓冲区大小为1000,需要这个消息的可以来和当前节点连接
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);
ros::Rate loop_rate(10); // 定义消息发布频率
while(ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "Hello word" ;
msg.data = ss.str();
chatter_pub.publish(msg); //发布消息
ros::spinOnce();
loop_rate.sleep(); //休眠响应时间
}
二、订阅器:
1、cd到包目录下,然后在src文件夹下创建.cpp文件;
2、.cpp文件包括以下部分:
①包含(include)依赖库,如ros/ros.h、std_msgs/String.h等
②回调函数部分:void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
消息以指针传递,在此函数体内完成对消息的处理
}
③主函数部分: ros::init(argc,argv,"listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter",1000,chatterCallback);
ros::spin();
三、CMakeLists.txt文件的设置:
1、添加可执行文件,即add_executable(talker src/talker.cpp);
add_executable(listener src/talker.cpp);
2、添加目标连接库,即target_link_libraries(talker ${catkin_LIBRARIES});
target_link_libraries(listener ${catkin_LIBRARIES});
3、添加对生成的消息文件的依赖项,即add_dependencies(talker beginner_tutorials_generate_messages_cpp);
add_dependencies(listener beginner_tutorials_generate_messages_cpp);