一. C++
1.发布方:
#include "ros/ros.h"
#include "plumbing_pub_sub/Person.h"
/*
发布方:发布人的消息
1.包含头文件;
#include "plumbing_pub_sub/Person.h"
2.初始化ROS节点;
3.创建节点句柄;
4.创建发布者对象;
5.编写发布逻辑,发布数据。
*/
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
ROS_INFO("这是消息的发布方");
//2.初始化ROS节点;
ros::init(argc,argv,"banZhuRen");
//3.创建节点句柄;
ros::NodeHandle nh;
// 4.创建发布者对象;
ros::Publisher pub = nh.advertise<plumbing_pub_sub::Person>("liaoTian",10);
// 5.编写发布逻辑,发布数据。
//5-1.创建被发布的数据
plumbing_pub_sub::Person person;
person.name = "张三";
person.age = 1;
person.height = 1.73;
//5-2.设置发布频率
ros::Rate rate(1);
//5-3.循环发布数据
while (ros::ok)
{
//修改被发布的数据
person.age +=1;
//核心:发布数据
pub.publish(person);
ROS_INFO("发布的消息:%s,%d,%.2f",person.name.c_str(),person.age,person.height);
//休眠
rate.sleep();
//建议:调用回头函数
ros::spinOnce();
}
return 0;
}
具体配置信息见笔记
输出:
2. 订阅方
#include "ros/ros.h"
#include "plumbing_pub_sub/Person.h"
/*
发布方:发布人的消息
1.包含头文件;
#include "plumbing_pub_sub/Person.h"
2.初始化ROS节点;
3.创建节点句柄;
4.创建订阅者对象;
5.处理订阅的数据
6.调用spin()函数。
*/
void doPerson(const plumbing_pub_sub::Person::ConstPtr& person){
ROS_INFO("订阅人的信息:%s,%d,%.2f",person->name.c_str(),person->age,person->height);
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
ROS_INFO("订阅方实现");
// 2.初始化ROS节点;
ros::init(argc,argv,"jiaZhang");
// 3.创建节点句柄;
ros::NodeHandle nh;
// 4.创建订阅者对象;
ros::Subscriber sub = nh.subscribe("liaoTian",10,doPerson);
// 5.处理订阅的数据
// 6.调用spin()函数。
ros::spin();
return 0;
}
3. 输出
二.Python
1.发布方:
#! /usr/bin/env python
import rospy
from plumbing_pub_sub.msg import Person
"""
发布方:发布人的消息
1.导包
2.初始化ROS节点
3.创建发布者对象
4.组织发布逻辑并发布数据
"""
if __name__ == "__main__":
# 2.初始化ROS节点
rospy.init_node("daMa")
# 3.创建发布者对象
pub = rospy.Publisher("jiaoSheTou",Person,queue_size=10)
# 4.组织发布逻辑并发布数据
#4-1.创建Person数据
p = Person()
p.name = "奥特曼"
p.age = 8
p.height = 1.85
#4-2.创建Rate对象
rate = rospy.Rate(1)
#4-3.循环发布数据
while not rospy.is_shutdown():
pub.publish(p)
rospy.loginfo("发布的消息:%s,%d,%.2f",p.name,p.age,p.height)
rate.sleep()
输出:
注:CMakeLists.txt配置
2. 订阅方:
#! /usr/bin/env python
import rospy
from plumbing_pub_sub.msg import Person
"""
订阅方:订阅人的消息
1.导包
2.初始化ROS节点
3.创建订阅者对象
4.处理订阅的数据
5.spin()
"""
def doPerson(p):
rospy.loginfo("小伙子的数据:%s,%d,%.2f",p.name,p.age,p.height)
if __name__ == "__main__":
# 2.初始化ROS节点
rospy.init_node("daYe")
# 3.创建订阅者对象
sub = rospy.Subscriber("jiaoSheTou",Person,doPerson)
# 4.处理订阅的数据
# 5.spin()
rospy.spin()