创建ROS消息发布器(publisher)、订阅器(subscriber)
2016-01-13 20:19
253 查看
发布器和订阅器都是可执行文件。对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);
推荐博文:
二叉树相关练习题(C++)
与字符串有关的一些典型问题的C++解法
一些可以用动态规划(DP)算法解决的问题(C++)
排列组合相关笔试面试题(C++)
与概率相关的算法题C++解法(附证明过程)
二分查找的巧妙运用(C++)
位运算在算法题中的使用(C++)
链表相关练习题(C++)
用实例讲解栈和队列(C++)
一些智力题的C++解法
一、发布器:
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);
推荐博文:
二叉树相关练习题(C++)
经典排序算法的C++实现
与字符串有关的一些典型问题的C++解法
一些可以用动态规划(DP)算法解决的问题(C++)
排列组合相关笔试面试题(C++)
与概率相关的算法题C++解法(附证明过程)
二分查找的巧妙运用(C++)
位运算在算法题中的使用(C++)
链表相关练习题(C++)
用实例讲解栈和队列(C++)
一些智力题的C++解法
相关文章推荐
- java工程师面试题积累中...
- 给你90天,成为不一样的自己(转)
- android面试所涉及的范围及学习方向
- HotSpot GC机制初步理解
- 005_Eclipse配置Tomcat
- Erlang 学习(二) 文件夹拷贝
- 如何在Chrome下使用Postman进行rest请求测试
- 《一课经济学》书摘笔记IV
- OpenCV记录鼠标左键点击位置
- VB调用API函数
- CSS设置img属性让图片水平居中/居左/居右的写法
- 4W家庭理财 V2.8已经发布
- UNIX进程
- [jquery] 遮罩弹窗,点击遮罩弹窗自动隐藏
- 单源最短路径--Dijkstra算法
- IOS矩阵之后的数学知识
- c++11学习笔记2——稳定性和兼容性
- 分布式系统之----CAP理论
- ugui scrollrect 多点触摸实现缩放
- Android WebView与混合应用