ROS发布&订阅字符串

Ros版本   :Kinetic

Linux版本:Ubuntu16.04

Step1:创建工作分区   

mkdir -p workSpace/src
cd ~/workSpace/src
catkin_init_workspace

Step2:创建工程包

 

(1)进入工作空间

 

cd ~/workSpace/src

(2)使用 catkin_create_pkg 命令创建,格式为:catkin_create_pkg+包名+std_msgs rospy roscpp(std_msgs rospy roscpp为包依赖)

 

 

catkin_create_pkg first std_msgs rospy roscpp

(3)编译工程包

 

 

cd ~/workSpace
catkin_make

Step3:书写发布节点

 

(1)切换到刚才创建的first工程包

 

cd ~/workSpace/src/first

(2)进入到src文件中

 

 

cd ./src

(3)创建publish.cpp文件

 

 

touch publish.cpp

(4)打开publish.cpp文件并书写下面代码

 

 

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>

int main(int argc,char **argv)
{
	ros::init(argc,argv,"publish");
	ros::NodeHandle ch;
	ros::Publisher chatterPublish = ch.advertise<std_msgs::String>("chatter",1000);
	ros::Rate loop_rate(25);
	int count = 0;
	while(ros::ok())
	{
		std_msgs::String msg;
		std::stringstream stringStr;
		stringStr << count;
		msg.data = stringStr.str();
		ROS_INFO("%s",msg.data.c_str());
		chatterPublish.publish(msg);
		ros::spinOnce();
		loop_rate.sleep();
		++count;
	}
	return 0;
}

Step4:书写接收节点
(1)创建subscribe.cpp文件

 

 

touch subscribe.cpp

(2)打开subscribe.cpp文件并书写下面代码

 

 

#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::init(argc,argv,"subscribe");	

	ros::NodeHandle ch;
	ros::Subscriber chatterSubscribe = ch.subscribe("chatter",1000,chatterCallback);
	ros::spin();
	return 0;

}

Step5:编辑CMakeLists.txt文件

 

(1)切换到first工程包下

 

cd ..

 

(2)打开first工程包下CMakeLists.txt文件

 

gedit CMakeLists.txt

(3)在CMakeLists.txt文件后添加如下语句

 

 

include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(publish src/publish.cpp)
target_link_libraries(publish ${catkin_LIBRARIES})


add_executable(subscribe src/subscribe.cpp)
target_link_libraries(subscribe ${catkin_LIBRARIES})

 

 

 

Step5:程序测试

(1)切换到workSpace 文件下

 

cd ~/workSpace

(2)编译工程包

 

 

catkin_make

(3)在运行ROS前,需要先打开核心程序

 

 

roscore

(4) 进行程序注册

 

cd ~/workSpace
source ./devel/setup.bash

(5)运行publish节点

 

source ./devel/setup.bash
rosrun first publish

(6)publish效果如下

[ INFO] [1503411559.389559783]: 728
[ INFO] [1503411559.429590639]: 729
[ INFO] [1503411559.469584022]: 730
[ INFO] [1503411559.509559116]: 731
[ INFO] [1503411559.549610605]: 732
[ INFO] [1503411559.589573180]: 733
[ INFO] [1503411559.629562030]: 734
[ INFO] [1503411559.669586479]: 735
[ INFO] [1503411559.709607218]: 736
[ INFO] [1503411559.749559386]: 737
[ INFO] [1503411559.789595977]: 738
[ INFO] [1503411559.829607695]: 739
[ INFO] [1503411559.869589854]: 740
[ INFO] [1503411559.909561388]: 741

(7)运行subscribe节点

source ./devel/setup.bash
rosrun first subscribe

(8)subscribe效果如下

 

 

[ INFO] [1503411559.389923540]: I heard : [728]
[ INFO] [1503411559.430051186]: I heard : [729]
[ INFO] [1503411559.470006422]: I heard : [730]
[ INFO] [1503411559.510059517]: I heard : [731]
[ INFO] [1503411559.550007881]: I heard : [732]
[ INFO] [1503411559.590005653]: I heard : [733]
[ INFO] [1503411559.630056561]: I heard : [734]
[ INFO] [1503411559.670017638]: I heard : [735]
[ INFO] [1503411559.710036361]: I heard : [736]
[ INFO] [1503411559.750000053]: I heard : [737]
[ INFO] [1503411559.789929008]: I heard : [738]
[ INFO] [1503411559.830030398]: I heard : [739]
[ INFO] [1503411559.869964462]: I heard : [740]
[ INFO] [1503411559.909935796]: I heard : [741]


注:由于时间原因,很多内容未详细展开,如有问题,请在下方留言

更多《计算机视觉与图形学》知识,可关注下方公众号:
在这里插入图片描述

 

注:由于时间原因,里面很多内容未能展开,如有大家有什么疑问,请在下方留言
 

 

 

 

 

 

 

 

 

好的,我知道你想了解ROS中的发布订阅话题。在ROS中,节点之间通过话题(Topic)来进行通信,话题是一种发布者-订阅者(Publisher-Subscriber)模式的通信机制。 节点可以发布一个话题,其他节点可以订阅该话题以接收发布发布的消息。消息可以是任何类型的数据,比如图像、激光数据、传感器数据等。 下面是ROS发布订阅话题的基本步骤: 1. 创建一个发布者或订阅者对象,指定话题名称和消息类型。 2. 启动节点,开始发布订阅该话题。 3. 发布者将消息发布到话题中,订阅者从话题中接收消息。 例如,在Python中创建一个发布者对象的代码如下: ```python import rospy from std_msgs.msg import String rospy.init_node('publisher_node') pub = rospy.Publisher('my_topic', String, queue_size=10) ``` 这个例子创建了一个名为"publisher_node"的节点,创建了一个名为"my_topic"的话题,并指定了消息类型为String。queue_size指定了发布者的消息缓冲队列大小。 然后,我们可以在节点中调用发布者的publish()方法来发布消息,例如: ```python msg = String() msg.data = "Hello, ROS!" pub.publish(msg) ``` 这个例子发布了一个值为"Hello, ROS!"的字符串消息到"my_topic"话题中。 同样地,我们可以在Python中创建一个订阅者对象的代码如下: ```python import rospy from std_msgs.msg import String def callback(msg): rospy.loginfo("Received message: %s", msg.data) rospy.init_node('subscriber_node') sub = rospy.Subscriber('my_topic', String, callback) rospy.spin() ``` 这个例子创建了一个名为"subscriber_node"的节点,创建了一个名为"my_topic"的话题,并指定了消息类型为String。callback函数是接收到消息后的回调函数,rospy.spin()用于让节点保持运行状态。 当订阅者接收到消息时,callback函数将被调用。例如,当我们运行上面的发布者代码时,将会在终端中看到类似如下的输出: ``` [INFO] [1630675978.253078]: Received message: Hello, ROS! ``` 希望这个例子能够帮助你理解ROS发布订阅话题的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值