ROS通信机制——python实现

2023-05-16

一、普通话题通信

1. 创建发布者

注意:不要在开头添加注释,下面代码第一行是指定编译器,第二行是防止因为代码中的中文注释而出现乱码

#! /usr/bin/env python  
#coding:utf-8

#导包
import rospy  
from std_msgs.msg import String

if __name__=="__main__":
    #初始化ROS节点
    rospy.init_node("talker")
    #创建发布者
    pub=rospy.Publisher("Matlab",String,queue_size=10)
    #创建消息类型
    msg=String()
    #设置发布排频率
    rate=rospy.Rate(1)
    count=0
    #休眠1秒,防止出现前面的数据没有接受到
    rospy.sleep(1)
    #循环发布数据,其中rospy.is_shutdown()的意思是只要节点关闭就返回true
    while not rospy.is_shutdown():
        count+=1
        #str(count)可以将count转变为字符串
        msg.data="hello"+str(count)
        pub.publish(msg)
        #rospy.loginfo()相当于C++版本里面的ROS_INFO()
        rospy.loginfo("I talk %s",msg.data)
        #休眠
        rate.sleep()

2. 创建订阅者

注意:不要在开头添加注释,下面代码第一行是指定编译器,第二行是防止因为代码中的中文注释而出现乱码

#! /usr/bin/env python  
#coding:utf-8

#导包
import rospy
from std_msgs.msg import String

def Callback(msg):
    rospy.loginfo("I hear %s",msg.data)

if __name__=="__main__":
    #初始化ROS节点
    rospy.init_node("listener")
    #创建订阅者
    sub=rospy.Subscriber("Matlab",String,Callback,queue_size=10)
    #回调函数
    #spin
    rospy.spin()

3.添加可执行权限

注意:一定要在scripts文件夹下打开终端

4. 编译配置

在Cmakelist中添加如下代码:

catkin_install_python(PROGRAMS
  scripts/talker.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

catkin_install_python(PROGRAMS
  scripts/listener.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

5. 执行

二、自定义话题通信

1. 准备工作

先写好自定义的消息,然后再编译,这时会生成相应的头文件。

打开lib下面的python2.7/dist-package....,鼠标放在这个文件上然后打开终端。

 在终端中输入pwd,然后赋值路径

将路径赋值到setting.json中的“python.autoComplete.extraPaths” 中,保存。

2. 编写发布者

#! /usr/bin/env python  
#coding:utf-8

#导包
import rospy
from learning_communication.msg import person

if __name__ == "__main__":
    #初始化节点
    rospy.init_node("talkermsg")
    #创建发布者
    pub=rospy.Publisher("Matlab",person,queue_size=10)
    #创建消息对象
    per=person()
    per.age=10
    per.name="zhangpeng"
    per.height=180
    #设置频率
    rate=rospy.Rate(1)
    while not rospy.is_shutdown():
        pub.publish(per)
        rospy.loginfo("I am talking %s %d %d",per.name,per.age,per.height)
        per.age+=1
        rate.sleep()

3. 编写接收者

#! /usr/bin/env python  
#coding:utf-8

import rospy
from learning_communication.msg import person

def Callback(per):
    rospy.loginfo("I hear %s %d %d",per.name,per.age,per.height)

if __name__ == "__main__":

    rospy.init_node("listenermsg")
    sub=rospy.Subscriber("Matlab",person,Callback,queue_size=10)
    rospy.spin()

4. 配置相关的文件

 在CmakeList中添加:

catkin_install_python(PROGRAMS
  scripts/talker.py
  scripts/listener.py
  scripts/talkermsg.py
  scripts/listenermsg.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

5. 添加可执行权限

注意:一定要在scripts文件夹下打开终端

6. 编译运行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS通信机制——python实现 的相关文章

随机推荐

  • Rviz上发布的点位信息机器人不执行(网络配置原因)已解决

    在调试机器人时发现Rviz上发布的点位信息机器人没有执行 xff0c 经检查是由于网络配置原因 xff0c 本文记录解决方法 使用ssh将笔记本与实物机器人连接 xff0c 机器人中控使用的工控机 xff0c 机器人作为显示器和键盘输入 p
  • gazebo小车自主路径规划导航仿真

    gazebo小车自主路径规划仿真 在之前的文章中完成了对地图的构建 xff0c 接下来使用 Ros navgition完成机器人自主导航 首先是Ros navigation的下载安装 ros功能包 xff1a Navigation ros
  • 关于结构体对齐

    首先我们先了解一下各数据类型所占的字节数 x64系统 xff08 64位 xff09 x86系统 xff08 32位 xff09 在这里有一个很有意思的点 xff0c 我使用VS在x86与x64系统下运行出来的long类型所占据的空间都是4
  • 安装docker报出的错误及解决方案

    1 错误一 xff1a 解决方案 xff1a yum erase podman buildan yum install y docker ce allowerasing 重启服务 systemtl restart docker yum源的安
  • make、makefile的使用解释(Linux项目自动化构建工具)

    本文所使用系统为Linux centos 7 makefile是一个文件 里面包含了 xff1a 1 文件与文件的依赖关系 2 文件与文件的依赖方法 为什么需要包含文件与文件的依赖方法和依赖方法呢 xff1f 一个工程中的源文件不计数 xf
  • elementUI中neditor第一次加载无法正常赋值的解决方法

    1 lt neditor v if 61 34 neditorLoad 34 v model 61 34 formFields content 34 class 61 34 wd editor 34 gt 加上v if 61 34 nedi
  • Gazebo仿真中光源的设置

    目录 写在前面官方文档链接point类型directional类型spot类型 写在前面 最近研究在Gazebo中仿真px4 xff0c 使用Apriltag ros包对Apriltag二维码检测的时候发现光源对检测影响非常大 xff0c
  • 使用Java操作Hbase

    目录 修改hosts文件 导入jar包 配置hbase信息 xff0c 连接hbase数据库 创建表 删除表 获取namespace 获取tables 添加数据 查询表中的数据 查询表中所有数据 关闭流 修改hosts文件 位置 xff1a
  • CAN协议国际标准化协议部分总结(一)

    前言 xff1a 本文主要是对CAN协议中ISO11898做一个简短的总结 ISO11898 ISO11519 ISO15765 CAN协议在OSI模型中包含三层 xff0c 物理层 数据链路层和传输层 各层中CAN定义内容可参考下图 其协
  • STM32 串口 DMA 数据读取(详细代码)

    最近重新开始学32 xff0c 搞到串口 DMA 的时候 xff0c 数据读取卡了很长一段时间 xff0c 最终 xff0c 功夫不负有心人终于搞出来了 在此以记录一下 xff0c 方便以后查询使用 在调试的过程中也遇到了很多bug xff
  • 在阿里云购买Linux服务器,配置宝塔环境,全图文,最最详细图解,保姆级教学

    在阿里云购买Linux服务器 xff08 CentOs 7 xff09 xff0c 配置宝塔环境 一 在阿里云购买CentOs服务器 Linux系统 CentOS是免费的 开源的 可以重新分发的开源操作系统 xff0c CentOS xff
  • (Linux)FreeRTOS(任务)

    任务调度器 调度器就是使用相关的调度算法来决定当前需要执行的任务 xff0c 调度器总是在所有处于就绪列表的任务中 xff0c 选择具有最高优先级的任务来执行 抢占式调度 xff1a 主要是针对优先级不同的任务 xff0c 每个任务都有一个
  • 制作一个串口助手 | python + pyqt5

    目录 一 背景 1 1 开发流程图 二 前提 2 1 关于环境 2 2 关于源码 三 步骤 3 1 使用pyqt创建一个 ui界面并生成 py文件 3 2 创建两个 py文件 xff0c 一个用来继承ui界面生成的 py类 xff0c 一个
  • FreeRTOS任务调度与任务切换 | FreeRTOS八

    目录 说明 xff1a 一 任务调度器 1 1 开启任务调度器函数 1 2 任务调度器实现步骤 1 3 xPortStartScheduler 函数 二 启动一个任务 2 1 prvStartFirstTask 函数 2 2 vPortSV
  • 单片机原理简介

    提出问题 xff1a 什么是单片机 xff1f 类似于一台性能相对较弱的微型电脑 xff0c 具有完整的计算机结构和片内外设 xff08 例如串口 xff0c I2C xff0c ADC等硬件 xff09 xff0c 将他们集成封装在一颗芯
  • composer安装第三方库

    用法 xff1a 在thinkphp根目录下执行 composer require wechatpay wechatpay 1 4
  • STM32F407ZGT6控制ESP8266与OV2640下的百度智能图片识别

    前言 xff1a STM32F407ZGT6控制OV2640下采集到JPG图片格式的二进制数据 xff0c 然后对二进制数据进行BASE64编码 xff0c 接着通过串口将数据传输给ESP8266并上传至训练好的EASYDL的AI算法识别平
  • 力扣数组算法(c++)(代码随想录数组部分)

    文章一部分内容和图片引用代码随想录和力扣官方题解 数组 C 43 43 考察数组的题目一般在思维上都不难 xff0c 主要是考察对代码的掌控能力 数组是存放在连续内存空间上的相同类型数据的集合 数组可以方便的通过下标索引的方式获取到下标下对
  • cv_bridge用于ROS图像和OpenCV图像的转换

    一 背景 ROS对于传感器数据有自己的格式和规范 而在OpenCV中 xff0c 图像是以Mat矩阵的形式存储的 xff0c 这与ROS定义的图像消息的格式有一定的区别 xff0c 所以我们需要利用cv bridge将这两种不相同的格式联系
  • ROS通信机制——python实现

    一 普通话题通信 1 创建发布者 注意 xff1a 不要在开头添加注释 xff0c 下面代码第一行是指定编译器 xff0c 第二行是防止因为代码中的中文注释而出现乱码 usr bin env python coding utf 8 导包 i