热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python的numpy教程_ROS与Python入门教程使用numpy

ROS与Python入门教程-使用numpy说明这一节介绍numpy,它是针对科学计算的python软件包,用于处理传感器数据,数组数据等。在本教

ROS与Python入门教程-使用numpy

说明

这一节介绍numpy,它是针对科学计算的python软件包, 用于处理传感器数据,数组数据等。

在本教程中,我们将使用rospy.numpy_msg模块。这个模块带有numpy_msg()的封装,它允许节点在适当的地方反序列化消息直接进入NumPy数组。numpy_msg()封装也可以用来发布包含NumPy数组数据信息。

创建包numpy_tutorial

创建新包,依赖numpy_tutorial,依赖rospy_tutorials的消息类型。

catkin_create_pkg numpy_tutorial rospy rospy_tutorials

查看rospy_tutorials的消息类型

$ rosmsg show rospy_tutorials/Floats

float32[] data

需要依赖python-numpy,添加下面两行代码到在package.xml文件里。

python-numpy

python-numpy

创建没使用numpy的listener节点

创建节点_listener.py, 用来订阅floats主题。

$ cd ~/catkin_ws/src/numpy_tutorial

$ mkdir scripts

$ cd scripts

$ touch numpy_listener.py

$ chmod +x numpy_listener.py

$ vim numpy_listener.py

手工输入代码:

#!/usr/bin/env python

import rospy

from rospy_tutorials.msg import Floats

def callback(data):

print rospy.get_name(), "I heard %s"%str(data.data)

def listener():

rospy.init_node('listener')

rospy.Subscriber("floats", Floats, callback)

rospy.spin()

if __name__ == '__main__':

listener()

测试listener节点

新开终端,启动roscore

$ roscore

新开终端,启动订阅节点

$ rosrun numpy_tutorial numpy_listener.py

新开终端,发布主题

$ rostopic pub -r 1 floats rospy_tutorials/Floats "[1.1, 2.2, 3.3, 4.4, 5.5]"

效果:

$ rosrun numpy_tutorial numpy_listener.py

/listener-977-1248226102144 I heard (1.1000000238418579, 2.2000000476837158, 3.2999999523162842, 4.4000000953674316, 5.5)

/listener-977-1248226102144 I heard (1.1000000238418579, 2.2000000476837158, 3.2999999523162842, 4.4000000953674316, 5.5)

... and so on

使用Numpy的listener节点

更改节点,需要变化: 导入numpy_msg, 在订阅指定numpy_msg函数处理的浮点值。

from rospy.numpy_msg import numpy_msg

...

rospy.Subscriber("floats", numpy_msg(Floats), callback)

更改代码为:

#!/usr/bin/env python

import rospy

from rospy_tutorials.msg import Floats

from rospy.numpy_msg import numpy_msg

def callback(data):

print rospy.get_name(), "I heard %s"%str(data.data)

def listener():

rospy.init_node('listener')

rospy.Subscriber("floats", numpy_msg(Floats), callback)

rospy.spin()

if __name__ == '__main__':

listener()

测试使用Numpy的listener节点

新开终端,启动roscore

$ roscore

新开终端,启动订阅节点

$ rosrun numpy_tutorial numpy_listener.py

发布主题

$ rostopic pub -r 1 floats rospy_tutorials/Floats "[1.1, 2.2, 3.3, 4.4, 5.5]"

效果:(跟之前稍有不同,就是位数变化,返回的是numpy数组格式)

$ rosrun rospy_tutorials listener_numpy.py

/listener-1243-1248226610835 I heard [ 1.10000002 2.20000005 3.29999995 4.4000001 5.5 ]

/listener-1243-1248226610835 I heard [ 1.10000002 2.20000005 3.29999995 4.4000001 5.5 ]

... and so on

使用Numpy的Talker节点

Talker节点需要正确处理Numpy的数组的数据格式

在scripts新建numpy_talker.py

$ cd ~/catkin_ws/src/numpy_tutorial

$ mkdir scripts

$ cd scripts

$ touch numpy_talker.py

$ chmod +x numpy_talker.py

$ vim numpy_talker.py

手工输入如下代码:

#!/usr/bin/env python

import rospy

from rospy.numpy_msg import numpy_msg

from rospy_tutorials.msg import Floats

import numpy

def talker():

pub = rospy.Publisher('floats', numpy_msg(Floats),queue_size=10)

rospy.init_node('talker', anonymous=True)

r = rospy.Rate(10) # 10hz

while not rospy.is_shutdown():

a = numpy.array([1.0, 2.1, 3.2, 4.3, 5.4, 6.5], dtype=numpy.float32)

pub.publish(a)

r.sleep()

if __name__ == '__main__':

talker()

代码分析:

代码:pub = rospy.Publisher('floats', numpy_msg(Floats))

分析:发布经过numpy_msg函数来处理浮点值内容

代码:a = numpy.array([1.0, 2.1, 3.2, 4.3, 5.4, 6.5], dtype=numpy.float32)

分析:利用numpy.array来转换成numpy的数组结构,并要指定内容的数据格式,这是float32

测试使用numpy的Talker节点

新开终端,启动roscore

$ roscore

新开终端,启动订阅节点

$ rosrun numpy_tutorial numpy_listener.py

新开终端,启动发布节点

$ rosrun numpy_tutorial numpy_talker.py

效果:

$ rosrun rospy_tutorials listener_numpy.py

/listener-1423-1248226794834 I heard [ 1. 2.0999999 3.20000005 4.30000019 5.4000001 6.5 ]

/listener-1423-1248226794834 I heard [ 1. 2.0999999 3.20000005 4.30000019 5.4000001 6.5 ]

... and so on



推荐阅读
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Python多线程编程技巧与实战应用详解 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 本文详细介绍了 Java 中遍历 Map 对象的几种常见方法及其应用场景。首先,通过 `entrySet` 方法结合增强型 for 循环进行遍历是最常用的方式,适用于需要同时访问键和值的场景。此外,还探讨了使用 `keySet` 和 `values` 方法分别遍历键和值的技巧,以及使用迭代器(Iterator)进行更灵活的遍历操作。每种方法都附有示例代码和具体的应用实例,帮助开发者更好地理解和选择合适的遍历策略。 ... [详细]
author-avatar
阿尔及利亚奥兰叉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有