ROS话题通信案例(三)——自定义消息msg(c++和python)

更新时间:2023-06-05 18:01:19 阅读: 评论:0

ROS话题通信案例(三)——⾃定义消息msg(c++和python)参考视频:
需求:
  创建⾃定义消息,该消息包含⼈的信息:姓名、⾝⾼、年龄等。
流程:
1. 按照固定格式创建 msg ⽂件
2. 编辑配置⽂件
3. 编译⽣成可以被 Python 或 C++ 调⽤的中间⽂件
1.定义msg⽂件
功能包下新建 msg ⽬录,添加⽂件 Person.msg
string name
uint16 age
float64 height
2.编辑配置⽂件
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
<!--
exce_depend 以前对应的是 run_depend 现在⾮法
-->
<编辑 msg 相关配置
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
# 需要加⼊ message_generation,必须有 std_msgs
## 配置 msg 源⽂件
add_message_files(
FILES
Person.msg
)
# ⽣成消息时依赖于 std_msgs
generate_messages(
DEPENDENCIES
std_msgs
)
#执⾏时依赖
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES demo02_talker_listener
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)
3.编译
编译后的中间⽂件查看:
C++ 需要调⽤的中间⽂件(.../⼯作空间/devel/include/包名/xxx.h)
Python 需要调⽤的中间⽂件(.../⼯作空间/devel/lib/python3/dist-packages/包名/msg)
C++实现
需求:
编写发布订阅实现,要求发布⽅以10HZ(每秒10次)的频率发布⾃定义消息,订阅⽅订阅⾃定义消息并将消息内容打印输出。
分析:
在模型实现中,ROS master 不需要实现,⽽连接的建⽴也已经被封装了,需要关注的关键点有三个:
1. 发布⽅
2. 接收⽅
3. 数据(此处为⾃定义消息)
流程:
shaanxi1. 编写发布⽅实现;
2. 编写订阅⽅实现;
3. 编辑配置⽂件;
4. 编译并执⾏
0.vscode 配置
为了⽅便代码提⽰以及避免误抛异常,需要先配置 vscode,将前⾯⽣成的 head ⽂件路径配置进 c_cpp_properties.json 的 includepath属性"/xxx/yyy⼯作空间/devel/include/**"//配置 head ⽂件的路径
1.发布⽅
#include "ros/ros.h"
#include "plumbing_pub_sub/Person.h"
/*
发布者:发布⼈的消息
代步工具英文
1.包含头⽂件;
2.初始化ROS节点
3.创建节点句柄
4.创建发布者对象
5.编写发布者逻辑,发布数据。
*/
int main(int argc, char *argv[])
{
tlocale(LC_ALL,"");
ROS_INFO("这是消息发布⽅");
// 2.初始化ROS节点
ros::init(argc,argv,"banZhuanRen");
// 3.创建节点句柄
ros::NodeHandle nh;
// 4.创建发布者对象
ros::Publisher pub = nh.adverti<plumbing_pub_sub::Person>("Chat",10);
// 5.编写发布者逻辑,发布数据。
//5.1.被发布的数据
plumbing_pub_sub::Person person;
person.name = "张三";
person.age = 1;
person.height = 1.73;
//5.2.设置发布的频率
outputstreamros::Rate rate(1);
/
/5.3.循环发布数据
while (ros::ok())
{
//修改数据darby
person.age += 1;
//核⼼:数据发布
pub.publish(person);
ROS_INFO("发布的消息:%s,%d,%.2f",person.name.c_str(),person.age,person.height);
//休眠
rate.sleep();
//建议
ros::spinOnce();
}
return0;
}
配置
执⾏
2.订阅⽅
#include "ros/ros.h"
#include "plumbing_pub_sub/Person.h"
/*
订阅⽅:订阅消息
1.包含头⽂件;
#include "plumbing_pub_sub/Person.h"
2.初始化ROS节点
3.创建节点句柄
4.创建订阅者对象
virtue5.处理订阅的数据
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[])
{
tlocale(LC_ALL,"");
ROS_INFO("订阅⽅实现");
远大前程// 2.初始化ROS节点
ros::init(argc,argv,"jiaZhang");
// 3.创建节点句柄
ros::NodeHandle nh;
// 4.创建订阅者对象
ros::Subscriber sub = nh.subscribe("Chat",10,doPerson);
// 5.处理订阅的数据
// 6.调⽤spin()函数
ros::spin();
return0;
}
配置
执⾏
python 实现
0.vscode配置
将⾃定义 msg 所在的⽂件夹配置进 ttings.json
1.发布⽅
在 scripts 下新建 demo03_pub_person_p.py
#! /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()
2.权限设置
给 py ⽂件增加可执⾏权限
cys@ubuntu:~/demo03_ws/src/plumbing_pub_sub/scripts$ chmod +x *.py
3.配置
更改 中的配置
4.命令⾏测试
cys@ubuntu:~/demo03_ws$ source ./devel/tup.bash
cys@ubuntu:~/demo03_ws$ rosrun plumbing_pub_sub demo03_pub_person_p.py
cys@ubuntu:~/demo03_ws$ source ./devel/tup.bash
medicine是什么意思
cys@ubuntu:~/demo03_ws$ rostopic echo jiaoSheTou
5.订阅⽅
在 scripts 下新建 demo04_sub_person_p.py
#! /usr/bin/env python
import rospy
from plumbing_pub_sub.msg import Person
'''
订阅⽅:订阅⼈的消息
1.导包;
i will be missing you
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.处理订阅的数据;
lxl
# 5.spin()。
rospy.spin()
修改权限和配置
6.运⾏
启动发布⽅
启动订阅⽅
cys@ubuntu:~/demo03_ws$ source ./devel/tup.bash

本文发布于:2023-06-05 18:01:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/874911.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:发布   订阅   消息
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图