ROS学习--第5篇:ROS基础---话题(topic)编程
2019-05-17 22:27
211 查看
版权声明:原创不易,转载请注明出处。 https://blog.csdn.net/weixin_42237429/article/details/90300846
本次创建两个节点,一个收,一个发。
先在 catkin_ws/src/learning_communication/src 功能包下建两个 .cpp 文件,分别命名talker.cpp 、listener.cpp
(1)编写发布器节点
打开talker.cpp文件,复制如下内容
[code]/** * 该例程将发布chatter话题,消息类型String */ #include <sstream> #include "ros/ros.h" #include "std_msgs/String.h" int main(int argc, char **argv) { // ROS节点初始化 ros::init(argc, argv, "talker"); // 创建节点句柄 ros::NodeHandle n; // 创建一个Publisher,发布名为chatter的topic,消息类型为std_msgs::String ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); // 设置循环的频率 ros::Rate loop_rate(10); int count = 0; while (ros::ok()) { // 初始化std_msgs::String类型的消息 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; }
(2)编写订阅器节点
打开listener.cpp文件,复制如下内容
[code]/** * 该例程将订阅chatter话题,消息类型String */ #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节点 ros::init(argc, argv, "listener"); // 创建节点句柄 ros::NodeHandle n; // 创建一个Subscriber,订阅名为chatter的topic,注册回调函数chatterCallback ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); // 循环等待回调函数 ros::spin(); return 0; }
(3)编译节点
在 learning_communication 文件夹里面的 CMakeLists.txt 文件末尾加入几条语句:
[code]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})
这会生成两个可执行文件, talker 和 listener,具体在:~/catkin_ws/devel/lib/learning_communication 中
编译节点:
[code]cd ~/catkin_ws/
[code]catkin_make
编译成功如下:
(4)运行节点
启动ROS
[code]roscore
在不同终端中输入:
[code] rosrun learning_communication talker
[code] rosrun learning_communication listener
可以看到两个终端显示如下,表示一个发,一个收:
相关文章推荐
- ROS学习--第6篇:ROS基础---服务(service)编程
- ROS学习笔记------ROS基础-----基础编程 day 5 2019/3/1 帅某(QT工具箱,rviz可视化平台,gazebo本地模型保存)
- ROS学习笔记------ROS机器人系统设计-----基础编程 day 8 2019/3/7 帅某(Kinect的安装,xarco模型,xarco---urdf模型,gazebo物理仿真环境的搭建)
- ubuntu16.04下ROS操作系统学习笔记(三 / 二)ROS基础-ROS通信编程
- ROS学习笔记------ROS基础-----基础编程 day 6 2019/3/2 帅某(gazebo的安装,使用与其中遇到的错误)
- Robot Ignite2: ROS基础--话题(topic)
- ROS学习笔记------ROS机器人系统设计-----基础编程 day 9 2019/3/14 帅某(slam更多概念了解)
- ROS学习笔记------ROS基础-----基础编程 day 4 2019/3/1 帅某(分布式通信,launch文件,TF坐标变换)
- ROS学习笔记------ROS机器人系统设计-----基础编程 day 7 2019/3/2 帅某(URDF机器人建模,urdf功能包的建立,urdf相关模型建立代码已经上传)
- 黑马程序员之WinForm编程基础学习笔记:日月选择器,假设2月份总是28天。1,3,4,7,8,10,12月份是31天,其他是30天。
- Java学习之路全攻略——编程本质论-Java基础-Java-编程开发
- python基础教程_学习笔记26:好玩的编程
- 现代3D图形编程学习-基础简介(3)-什么是opengl (译)
- ros基础学习(二)
- 黑马程序员-java基础学习网络编程2
- [C#学习]多线程编程——多线程基础
- win32学习01.编程基础
- Go语言基础学习九-过程式编程一
- Java基础班学习笔记(15)GUI图形界面编程
- 东翌编程推出手把手0基础学习微信小程序开发