ROSNOTE : rospy例子/PoseStamped/python常识/python 发布和订阅话题/python 订阅话题的两种方式

2023-05-16

目录

1、rospy 网上开源小例子

2、python PoseStamped 例子

3、python常识

4、rospy 规范写法与介绍

5、rospy.is_shutdown()

6、python写ros 话题

7、订阅话题


1、rospy 网上开源小例子

     http://codingdict.com/sources/py/rospy.html

2、python PoseStamped 例子

def __init__(self):

        rospy.init_node("mav_control_node")
        rospy.Subscriber("/mavros/local_position/pose", PoseStamped, self.pose_callback)
        rospy.Subscriber("/mavros/rc/in", RCIn, self.rc_callback)

        self.cmd_pos_pub = rospy.Publisher("/mavros/setpoint_position/local", PoseStamped, queue_size=1)
        self.cmd_vel_pub = rospy.Publisher("/mavros/setpoint_velocity/cmd_vel_unstamped", Twist, queue_size=1)
        self.rc_override = rospy.Publisher("/mavros/rc/override", OverrideRCIn, queue_size=1)

        # mode 0 = STABILIZE
        # mode 4 = GUIDED
        # mode 9 = LAND
        self.mode_service = rospy.ServiceProxy('/mavros/set_mode', SetMode)
        self.arm_service = rospy.ServiceProxy('/mavros/cmd/arming', CommandBool)
        self.takeoff_service = rospy.ServiceProxy('/mavros/cmd/takeoff', CommandTOL)

        self.rc = RCIn()
        self.pose = Pose()
        self.timestamp = rospy.Time() 
def visualRobotCallback(self, pose_stamped_msg):
        """
        Callback for ROS topic
        Get the new updated position of robot from camera
        :param pose_stamped_msg: (PoseStamped ROS message)
        """
        self.robot_pos[0] = pose_stamped_msg.pose.position.x
        self.robot_pos[1] = pose_stamped_msg.pose.position.y
        self.robot_yaw = euler_from_quaternion([pose_stamped_msg.pose.orientation.x, pose_stamped_msg.pose.orientation.y,
                                                pose_stamped_msg.pose.orientation.z, pose_stamped_msg.pose.orientation.w])[2]

        if NO_TARGET_MODE and self.target_pos_changed:
            # simulate the target's position update
            self.target_pos[0] = 0.0
            self.target_pos[1] = 0.0
            self.target_yaw = 0.0
            self.target_pos_changed = False 

3、python常识

字典是无序的,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。

4、rospy 规范写法与介绍

5、rospy.is_shutdown()

      用于检测是否退出,是否按Ctrl C 或者其他

      rate = rospy.Rate(10)

      rate.sleep() 是为了休眠

6、python写ros 话题

      导入ROS模块

     用python编写ROS的程序有很多有点,Python的numpy模块可以方便快速的完成机器人规划、正逆运动学的开发,如果需要完成更复杂的计算功能,可以使用scipy模块完成科学计算,对采集数据的时间系列分析可以采用pandas做数据分析,最重要的是Python的matplotlib模块可以完成绝大部分的数据绘图,可以与pyqt5结合完成数据的可视化显示。当然Python还可以方便的调用机器人学习、深度学习等模块完成人工智能的开发,用最短的时间完成机器人的智能化。
Python中使用ROS首先要导入rospy模块

import rospy

完成机械臂的控制还需要导入其他数据模块,ROS在C++中的数据类型在Python也可以找到,其中最常用的数据模块是std_msgs、sensor_msgs、geometry_msgs模块(下面代码作为参考)

from std_msgs.msg import Float64MultiArray
from sensor_msgs.msg import JointState
import actionlib
from actionlib_msgs.msg import *
from geometry_msgs.msg import Pose, PoseWithCovarianceStamped, Point, Quaternion, Twist,PoseStamped
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
from random import sample
from math import pow, sqrt

 发送话题:ros话题是最常用的通讯方式,通过话题实现数据传输,下面将介绍话题发布。
 首先,需要建立一个一个节点,并发起一个或多个话题

#!/usr/bin/env python
# -*-coding:utf-8-*-
# 本文档用于发送关节角度
# 程序员:CYT
# 版权:哈尔滨工业大学(深圳)
# 日期:初稿:2019.11.6
# 转载

import rospy
from std_msgs.msg import Float64MultiArray

import os
import numpy as np

def talker():
    # 建立节点
    rospy.init_node("joint_position_command", anonymous=True)
    #建立话题
    pub = rospy.Publisher("joint_command", Float64MultiArray, queue_size=1)
    #设置发送频率
    rate = rospy.Rate(100)  # 100hz

    #假设数据
    command_pos = np.zeros([1000,7])

    # 重写数据
    kk = len(command_pos[:, 0])
    n = len(command_pos[0, :])
    command_data = np.zeros([kk, n])
    for i in range(kk):
        for j in range(n):
            command_data[i, j] = command_pos[i, j]

    #主循环中发送数据
    k = 0
    while not rospy.is_shutdown():
        if k == kk:
            break
        tip_str = "第 %s 次命令:" % k
        rospy.loginfo(tip_str)

        send_data = Float64MultiArray()
        send_data.data = command_data[k, :]
        print send_data.data
        #发送数据
        pub.publish(send_data)
        #休眠
        rate.sleep()
        k = k + 1

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass
Float64MultiArray, queue_size=1)

7、订阅话题

(这一小块的代码全部来自于这篇文章 :https://blog.csdn.net/weixin_43956732/article/details/105951288)

Python接受话题有两种方式,但是与C++相比,其只有rospy.spin(),没有ros::spinOnce,所以想要在循环中处理需要特别注意。

第一种方式:rospy.Subscriber

第一种方式与c++类似,调用回调函数来处理,但是因为只有rospy.spin()来调用回调函数,所以程序会阻塞在回调函数中,接受到一个数据,调用一次。

#建立节点
rospy.init_node('listener', anonymous=True)
#订阅话题
rospy.Subscriber('/joint_states', JointState, callback)
#调用回调函数,并阻塞,直到程序结束
rospy.spin()

第二种方式:rospy.wait_for_message

该方法无需节点,也无需回调函数,其与一个函数类似,等待话题发布消息,当接收到一个消息时,返回数据,继续执行后面的程序。相对于第一种,我们把它称为半阻塞,接收的话题如果没有发布消息,它会一直等待,但是接收到一个消息后,等待结束,会继续执行后面的程序。

msg2 = rospy.wait_for_message('/joint_states', JointState, timeout=None)

完整的代码:通过两个函数演示两种不同的就收方法,当上文中话题启动后,下文中的程序就可接受到数据。
  
#!/usr/bin/env python
# -*-coding:utf-8-*-
# 本文档用于接收信息
# 程序员:CYT
# 版权:哈尔滨工业大学(深圳)
# 日期:初稿:2019.12.12

import numpy as np

import rospy
from std_msgs.msg import Float64MultiArray

def callback(data):
    print "msg:", data

def listener1():
    #建立节点
    rospy.init_node('listener', anonymous=True)
    #订阅话题
    rospy.Subscriber('joint_command', Float64MultiArray, callback)
    #调用回调函数,并阻塞
    rospy.spin()

def listener2():
    #用循环来订阅所有数据
    while not rospy.is_shutdown():
        #订阅话题
        msg = rospy.wait_for_message('joint_command', Float64MultiArray, timeout=None)
        print "msg: %s" % msg

if __name__ == '__main__':
    #运行程序1
    #listener1()
    #运行程序2
    listener2()

 

 

 

     

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

ROSNOTE : rospy例子/PoseStamped/python常识/python 发布和订阅话题/python 订阅话题的两种方式 的相关文章

  • 四川麻将纯AI算法------最优拆牌

    ps 四川麻将AI算法已经开发完毕 xff0c 现已上线运营 xff0c 有需要交流的朋友请留言交流讨论 转载请说明出处 xff1a by wojiushi3344 我想现实生活中应该有很多朋友都在玩四川麻将 xff0c 不知道你有没有发现
  • Ubuntu 安装 HDF5 C++库

    HDF5 HDF5安装教程在源码包中的release docs文件夹中的INSTALL文件中有详细介绍 下载 根据系统选择下载源码包 xff0c 否则导致编译出错 xff1a https support hdfgroup org ftp H
  • C++和Windows平台的一些书籍

    从2010年学习编程以来 xff0c 到现在有差不多3年时间了 xff0c 过的真快啊 目前在深圳工作 xff0c 主要使用的是C 43 43 语言 xff0c 那么我就说说C 43 43 和Windows平台的书籍吧 1 C primer
  • Windows程序设计 截屏

    span style font family none span BLOWUP C Video Magnifier Program c Charles Petzold 1998 include lt windows h gt include
  • windows 程序设计 调色板

    调色板 这时就需要使用Windows调色盘管理器 xff08 在Windows 3 0中提出 xff09 了 Windows保留了256种颜色中的20种 xff0c 而允许应用程序修改其余的236种 xff08 在某些情况下 xff0c 应
  • windows程序设计 文字和字体

    文字和字体 简单的文字输出 让我们先来看看Windows为文字输出 影响文字的设备内容属性以及备用字体提供的各种函数 文字输出函数 我已经在许多范例程序中使用过最常用的文字输出函数 xff1a TextOut hdc xStart ySta
  • windows 网络编程 WinNet

    初始化 winNet 库 HINTERNET InternetOpen LPCTSTR lpszAgent DWORD dwAccessType LPCTSTR lpszProxyName LPCTSTR lpszProxyBypass D
  • Cocos 随写

    auto listenter 61 EventListenerTouchOneByOne create 设置单点触摸 listenter gt onTouchBegan 61 Touch pTouch Event event gt bool
  • android NDK崩溃信息调试

    android NDK崩溃 调试 主要利用 tombstones xff0c 可以看成是普通linux上利用core文件调试查问题类似 一 tombstones简介 1 什么是tombstone 当独立ndk bin方式或者jni方式开始运
  • 延迟加载DLL[转]

    问题来源 我的应用程序需要用到D3DX9 41 dll 程序里用的静态加载 xff0c 这个dll通常是把它放在根目录下 xff0c 否则应用程序找不到dll 但是有一天 xff0c 我需要把他放到别的目录 xff0c 那么下面就是一个解决
  • C++11 lambda 表达式

    lambda 表达式也是一种可调用对象 xff0c 那么可调用对象有哪些呢 xff1f 有函数 xff0c 函数指针 xff0c 重载了调用运算符的类 xff0c 还有lambda表达式 1个lambda表达式表示一个可调用的代码单元 xf
  • Windows核心编程之 2 字符和字符串

    1 包含新的安全是字符串处理头文件 StrSafe h counof 宏可以计算缓冲区的元素个数 StringCchCat StringCchCopy StringCchPrintf 34 Cch 34 表示 字符数 StringCbCat
  • Windows核心编程之 用户模式下的线程同步 读写锁和条件变量

    读写锁 include lt Windows h gt include lt tchar h gt include lt stdio h gt include lt process h gt include lt winbase h gt
  • 八戒常用之php时间戳strtotime前一天或后一天的日期

    date default timezone set 39 PRC 39 默认时区 今天 date 34 Y m d 34 time 昨天 date 34 Y m d 34 strtotime 34 1 day 34 明天 date 34 Y
  • 信号量和互斥锁的区别

    信号量和互斥锁 xff1a 信号量 xff08 semaphore sem f r xff09 用在多线程多任务同步的 xff0c 一个线程完成了某一个动作就通过信号量告诉别的线程 xff0c 别的线程再进行某些动作 而互斥锁 xff08
  • VLC生成流媒体实时流

    VLC生成实时流 xff0c 分为以下步骤 1 打开VLC xff0c 如果未下载可在官网下载 2 现在将要产生流的视频文件选中 3 开始产生流 4 检验流的生成 转载请注明出处 xff1a http www wolfnx com 2017
  • nmap 缺少module 'citrixxml'以及citrixxml.lua的修补

    当使用nmap的 script功能时 xff0c 可以参考nmap脚本使用总结 xff0c 但是在ubuntu12 04 LTS下使用默认下载安装的nmap xff08 版本为5 21 xff09 时 xff0c 当运行nmap scrip
  • 【ROS】Ubuntu18.04安装IntelRealsense D435

    参考文章 xff1a 文章一 文章二 这两篇文章多多少少和自己的有点不一样 xff0c 故在此记录 以实际为准 从官网https github com IntelRealSense librealsense下载安装包 xff08 用git的
  • 利用ROS同时采集激光雷达、摄像头数据并提取信息

    利用ROS同时采集激光雷达 摄像头数据并提取信息 在实际工程中 xff0c 往往需要采集lidar和camera的信息 xff0c 并进行同步 xff0c 而二者的频率往往不一致 xff0c 比如相机的采集频率为30HZ xff0c 而ve
  • C#连接SQLserver数据库

    导入命名空间 span class token keyword using span span class token namespace System span class token punctuation span Configura

随机推荐

  • MTK编译记录

    MTK编译记录 系统编译1 Q FAILED check kernel config 系统编译 1 Q FAILED check kernel config bin bash c python device mediatek build b
  • Git回退到指定版本

    Git版本回退 xff0c 在idea中不方便操作 xff0c 需进行强制提交 主要使用reset和push f进行强制回退 1 git 命令行回退到某个指定的版本 1 在开发过程中遇到合并别人的代码或者合并主分支的代码导致自己的分支代码冲
  • 四旋翼无人机crazepony烧写流程

    开源crazepony 自上而下 xff0c 从产品到底层的学习方法是效率比较高的 事前准备 xff1a 编译stm程序用的是Keil 5 xff0c 官方推荐用5不用4 4不支持Unicode8 xff0c 怕是不支持中文输入 在用官方包
  • deb 打包、安装、卸载

    deb 打包 安装 卸载 deb 格式是 Debian 系统 包含 Debian 和 Ubuntu 专属安装包格式 dpkg 是 Debian下的包管理工具 xff0c 用来执行软件包的打包 解包 安装 卸载等命令 运行环境 xff1a D
  • Kafka高可用 — KRaft集群搭建

    Apache Kafka Raft 是一种共识协议 xff0c 它的引入是为了消除 Kafka 对 ZooKeeper 的元数据管理的依赖 xff0c 被社区称之为 Kafka Raft metadata mode xff0c 简称 KRa
  • python线程池ThreadPoolExecutor的用法

    为了释放python GIL锁实现多个任务的并发运行 xff08 实际上并非真正的并行只是看起来并发 xff09 xff0c 往往采用多线程或者线程池的方式来实现 从Python3 2开始 xff0c concurrent futures模
  • 结构化数据、半结构化数据、非结构化数据的对比

    结构化数据 结构化数据是指可以使用关系型数据库表示和存储 xff0c 表现为二维形式的数据 一般特点是 xff1a 数据以行为单位 xff0c 一行数据表示一个实体的信息 xff0c 每一行数据的属性是相同的 举一个例子 xff1a idn
  • IoU(交并比)的理解及python实现

    1 概述 交并比 Intersection over Union IoU 是目标检测 语义分割 追踪等任务最常用的评估指标 交并比 xff0c 顾名思义是两区域交集与并集的比值 xff0c 当两区域完全重叠时交并比最大 xff0c 为1 x
  • 【复盘】2022年下半年软考·信息系统项目管理师

    题目简析 xff1a 上午选择题 xff1a 考得很分布 xff0c 十四五规划内容考了很多 xff0c 教材上的内容还是十三五 预估分45分 xff0c 一定能过 下午案例分析题 xff1a 三个题都不是十拿九稳的 xff08 特别是计算
  • pybind11 的 Hello World

    pybind11是一个轻量级的仅头文件库 xff0c 主要用于创建现有C 43 43 代码的Python绑定 Github地址 xff1a https github com pybind pybind11 官方文档 xff1a https
  • Flask 中使用 WebSocket 通信

    WebSocket 是一种计算机通信协议 xff0c 通过单个 TCP 连接提供全双工通信信道 WebSocket 使得客户端和服务器之间的数据交换变得更加简单 xff0c 允许服务端主动向客户端推送数据 在WebSocket API 中
  • git常用命令

    一 代码提交 提交代码 git pull 下拉代码并合并到本地 git add 提交修改 增加或者修改的文件 到本地缓存 git commit m 备注 提交修改备注到本地缓存 git push 将修改文件及备注一起提交到远程服务器 附1
  • cmake1:如何编写CMakeLists.txt

    注 xff1a 转载自 xff1a 链接 xff1b 该作者的cmake系列都很好 xff0c 值得一看 如何编写CMakeLists txt文件 CMakeLists txt 文件大小写不敏感 大型项目的根目录和子目录都会有这个文件 sp
  • 查看树莓派ip地址的几种方法

    在开始准备玩树莓派的时候 xff0c 除了外接一块显示器 xff0c 进行开发之外 xff0c 还可以通过ssh服务 xff0c 或者vnc服务 xff0c 可以很方便地通过另一台电脑进行远程登录操作 远程登录的前提就是需要获得树莓派的ip
  • C++经典类库

    现实中 xff0c C 43 43 的库门类繁多 xff0c 解决的问题也是极其广泛 xff0c 库从轻量级到重量级的都有 本文为你介绍了十一种类库 xff0c 有我们常见的 xff0c 也有不常见的 xff0c 一起来看 C 43 43
  • ROSNOTE: RVIZ

    rviz的资料 界面功能的使用介绍 转载 xff1a https www cnblogs com hiram zhang p 10398534 html 官网地址 xff1a https wiki ros org rviz UserGuid
  • MATLAB: 2018a百度云资源、迅雷资源、安装步骤

    原文链接 xff1a https blog csdn net YDC123458 article details 102696295 MATLAB 2018a 百度云链接 xff1a https pan baidu com s 1Y5DSU
  • RONOTE : 生成地图文件/GPS数据与人工地图位置坐标对应

    目录 一 尝试通过处理无人机图像来提取地形图 二 专利 DWG文件转成PGM文件 三 实际场景与机器人 xff08 ROS xff09 地图的对应关系 2 地图坐标系与Python canvas鼠标点击位置之间的对应关系 xff1a 3 P
  • ROSNOTE : 在RVIZ点击路径点-> 发布 ->进行导航

    1 可以订阅在rviz上的点的坐标 2 正文 RIVE 上的设置 这样子来添加上面的各项 注意的地方 publish point 是不能在空白的地方点的 xff0c 点了没有反映 xff0c 所以要把Map显示出来 xff0c 在地图上面点
  • ROSNOTE : rospy例子/PoseStamped/python常识/python 发布和订阅话题/python 订阅话题的两种方式

    目录 1 rospy 网上开源小例子 2 python PoseStamped 例子 3 python常识 4 rospy 规范写法与介绍 5 rospy is shutdown 6 python写ros 话题 7 订阅话题 1 rospy