Ros学习笔记(三)创建节点及节点之间通信

22 篇文章 3 订阅

本节创建两个节点,一个用于发布数据,另一个节点接收该数据。
定位到工作区的src目录下,创建两cpp文件。
example_1a.cpp

#include "ros/ros.h" //包含ros节点所需的全部文件
#include "std_msgs/String.h" //用于向ros计算网络发布消息的类型头文件
#include <sstream>
int main(int argc,char **argv){
	ros::init(argc,argv,"example1a"); //初始化节点并设置名称(名称需要是独一无二的)
	ros::NodeHandle n; //节点相关进程的处理程序,实现节点与环境的交互
	ros::Publisher pub = n.advertise<std_msgs::String>("message",100); //实例化发布程序,第二个参数指定了缓冲区的大小
	ros::Rate loop_rate(10); //设置数据发送频率,10Hz
	while(ros::ok()){ //当按下Ctrl+C组合键,ros::ok停止运行
		std_msgs::String msg; //创建消息变量
		std::stringstream ss; //创建消息流
		ss << "Hello World!"; 
		msg.data = ss.str(); //消息赋值
		pub.publish(msg); //发布消息
		ros::spinOnce(); //处理所有内部ROS事件和动作,例如对订阅的话题阅读
		loop_rate.sleep(); //休眠一段时间
	}
	return 0;
}

程序截图:
在这里插入图片描述

example_1b.cpp

#include "ros/ros.h"
#include "std_msgs/String.h"

void messageCallback(const std_msgs::String::ConstPtr& msg){ //定义回调函数
	ROS_INFO("Thanks: [%s]", msg->data.c_str()); 
}
int main(int argc, char **argv){
	ros::init(argc, argv, "example1b"); //初始化节点并设置名称(名称需要是独一无二的)
	ros::NodeHandle n; //节点相关进程的处理程序,实现节点与环境的交互
	ros::Subscriber sub = n.subscribe("message",1000,messageCallback); //创建订阅器,并开始监听名为message的话题,设置缓冲区大小,处理消息的函数
	ros::spin(); //主循环一直执行,按下Ctrl+C停止并结束
	return 0;
}

程序截图:
在这里插入图片描述

编辑CMakeList.txt文件,准备配置好编译所需的包
在文件的末尾添加以下几行代码:

include_directories(
include
${catkin_INCLUDE_DIRS} 
)

add_executable(example1a src/example_1a.cpp)
add_executable(example1b src/example_1b.cpp)

add_dependencies(example1a chapter2_turtleial_generate_messages_cpp)
add_dependencies(example1b chapter2_turtleial_generate_messages_cpp)

target_link_libraries(example1a ${catkin_LIBRARIES})
target_link_libraries(example1b ${catkin_LIBRARIES})

编译所有节点的包:

$ cd ~/catkin_ws/
$ catkin_make --pkg chapter2_turtleial

测试:
运行节点管理器:

$roscore

在其他终端中分别运行:

$ rosrun chapter2_turtleial example1a
$ rosrun chapter2_turtleial example1b

测试效果截图:

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sdhdwyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值