ROS是开发机器人应用的极具生产力的工具,最常用于概念开发、算法验证。在算法开发工具中,Python是一个极佳的选择,因为Python的工具包十分丰富,脚本语言的特性也使得无需编译,算法修改方便。

本文以ROS1为开发环境,以经典的Turtlesim的发布和订阅为例子,介绍用Python开发ROS机器人应用的步骤。例子中将实现用Python控制小乌龟的运动。

1. 操作系统Ubuntu18.04,安装ROS1、Python,网上安装教程很多,不再赘述。安装成功的标志是:终端中运行 roscore,不报错;终端中运行 python,不报错。

2. 通常安装ROS1后,会附带turtlesim功能包,在终端中运行 rosrun turtlesim turtlesim_node,会有一只很可爱的小乌龟出现在窗口中。

3. ROS1实际上就是实现了一个通信机制,发布/订阅是其中主要的一个通信形式。如果想查看有哪些主题在发布和订阅,可以通过命令,当然还有更直接的方式,就是用ROS1自带的rqt工具,在终端中运行 rqt,即出现可视化工具了。如果turtulesim还在运行的话,可以看到Topic中看到turtle1/cmd_vel这一主题,以及它的类型、刷新频率,这一主题实际上就是小乌龟的线速度、角速度指令了,如果去改一下数值,是可以在实际的Turtlesim窗口中观察到小乌龟的运动的。

4. 了解了ROS1的通信机制,那小乌龟的运动控制思路就很简单了:只要给相应的主题发指令就行了。我们的Python代码的目的也很明确了:新建一个节点 -> 连接到一个话题 -> 向话题发布信息。

就这么简单,下面就构建ROS1中的Python开发环境,用到caktin指令。

5. 在Ubuntu中新建文件夹,作为工作空间,文件夹下新建src文件夹,这很重要,编译时要找这个文件夹的。

6. 定位到src文件夹下,运行终端,输入命令 catkin_init_workspace,初始化工作空间。再输入命令 catkin_create_pkg demo rospy std_msgs,建立文件包,这里的demo是起的包的名字,请修改成你自己的包的名字。不出意外的话,src文件夹下自动出现了demo文件夹,下面有自动建立的一系列文件和文件夹。

7. 定位到src/demo文件夹下,新建scripts文件夹,这是python文件的存放位置,当然也可以放在别的位置,后面可以在CMakeLists文件中修改。在scripts文件夹下新建python文件,比如 talker.py。右键修改其属性为 Allow executing file as program,这一步很关键,否则后面运行会提示找不到可执行文件。

8. 双击打开,用文本编辑该文件。输入你的python程序,比如下面,注意检查语法中的缩进字符:

#! /usr/bin/env python

import rospy
from geometry_msgs.msg import Twist
import numpy as np

def talker():
    rospy.init_node('talker', anonymous=True)
    pub = rospy.Publisher('turtle1/cmd_vel', Twist, queue_size=10)
    rate = rospy.Rate(1) # 1hz
    while not rospy.is_shutdown():
        vel_msg = Twist()
        vel_msg.linear.x = 0.5 * np.random.uniform(-1, 1)
        vel_msg.angular.z = 0.2 * np.random.uniform(-1, 1)
        pub.publish(vel_msg)
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

9. 修改CMakeList.txt,主要是找到 catkin_install_python 这一重要信息,将它从注释中释放出来,并把my_python_script修改为你的python文件的地址。(看到第7步中建立scripts文件夹的意义了吧)

## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
 catkin_install_python(PROGRAMS
   scripts/my_python_script
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
 )

10. 定位到工作空间根目录,在终端中运行命令 catkin_make demo,这里demo是包的名字。可以看到自动生成了一系列文件,build中存放的是可执行文件,devel中存放的是安装包。

11. 在终端中运行 source devel/setup.bash,这一步是将包的名字放到环境变量中,否则后面ROS会提示无法找到这个包。

12. 万事具备,来检验一下我们的环境是否搭建成功吧。首先运行 roscore,启动基础通信服务;然后运行 rosrun turtlesim turtlesim_node,启动小乌龟程序,该程序订阅了turtle1/cmd_vel主题;最后运行 rosrun demo talker.py,启动我们的python程序,程序将按照1Hz的频率向主题turtle1/cmd_vel发布数据。可以看到我们的小乌龟按照预期运动起来了!

13. python程序可以随时修改,但修改后要先 ctrl+c 结束运行,然后重新输入 rosrun demo talker.py,才可以执行新的程序。

其实gazebo仿真算法的思路也是类似的,主要就是用rqt找到相应的主题,然后订阅或发布数据给该主题。剩下就是python算法的设计了。

ROS1中使用Python发布和订阅主题相关推荐

  1. websocket连接mqtt实现发布及订阅主题

    2019独角兽企业重金招聘Python工程师标准>>> 环境:linux(ubuntu.Centos7),websocket,mosquitto-1.4.10,libwebsocke ...

  2. Redis中消息队列/发布和订阅的介绍及代码实现

    一.概念 发布订阅是一种应用程序(系统)之间的通讯 传递数据的技术手段 特别是在异构(不同语言)的系统之间作用非常明显 发布订阅可以实现应用(系统)之间的解耦合 类似于微信中关注公众号/订阅号 那么订 ...

  3. 面向.NET开发人员的Dapr——发布和订阅

    目录: 面向.NET开发人员的Dapr--前言 面向.NET开发人员的Dapr--分布式世界 面向.NET开发人员的Dapr--俯瞰Dapr 面向.NET开发人员的Dapr--入门 面向.NET开发人 ...

  4. mac怎么用python3.0_怎么在mac中使用python

    怎么在mac中使用python 发布时间:2020-07-13 15:05:43 来源:亿速云 阅读:95 作者:Leah 这篇文章将为大家详细讲解有关怎么在mac中使用python,文章内容质量较高 ...

  5. ROS入门学习笔记|话题发布与订阅

    文章目录 一.工作空间 1.创建一个名称为sor_ws的工作空间 2.编译工作空间 3.创建功能包 二.自定义话题消息 1.定义msg文件 2.配置package.xml和CMakeLists.txt ...

  6. Python redis的订阅发布机制(publish、pubsub)

    为什么用订阅发布机制?原因在于它的速度要比pop.push快很多. 先介绍一下redis的pub/sub功能: Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能. ...

  7. mqtt server python_使用python实现mqtt的发布和订阅

    需要安装的python库 使用python编写程序进行测试MQTT的发布和订阅功能.首先要安装:pip install paho-mqtt 测试发布(pub) 我的MQTT部署在阿里云的服务器上面,所 ...

  8. AKKA 集群中的发布与订阅Distributed Publish Subscribe in Cluster

    Distributed Publish Subscribe in Cluster 基本定义 在单机环境下订阅与发布是很常用的,然而在集群环境是比较麻烦和不好实现的: AKKA已经提供了相应的实现,集群 ...

  9. ROS发布/订阅Float64MultiArray数组类消息(C++和Python相互发布和订阅)

    在terminal用指令发布一个Float64MultiArray消息,这个在调试时特别好用,注意格式,最后一行的data: [1,2,3]中冒号和后面的中括号间要有空格 rostopic pub / ...

最新文章

  1. QIIME 2用户文档. 17序列双端合并read-joining(2018.11)
  2. MATLAB符号计算
  3. PowerPoint2010 中停止使用和修改的功能
  4. 在asp.net中调用process.start执行程序
  5. bytes数组转string指定编码_一篇文章弄懂Python中所有数组数据类型
  6. Spring Boot笔记-JPA分页(后端分页)
  7. Linux位置无关代码实现,浅谈位置无关代码
  8. 在Python中给定包含该项目的列表的情况下查找项目的索引
  9. plink 与 ssh 远程登录问题
  10. jupyter notebook 内核挂掉
  11. 《软件需求十步走》阅读笔记6
  12. 关于瑞萨RH850中断的异常处理函数地址Exception Handler Address的理解
  13. 如何在html中使用 es6语法让浏览器识别
  14. DICOM医学图像处理:浅析SWF、MWL、SPS、MPPS
  15. CATIA怎么约束快捷键_在catia软件上怎么设置快捷键_catia快捷键设置使用要注意哪些问题 - 驱动管家...
  16. java io 和nio_java对比IO和NIO的文件读写性能测试
  17. 【转】安装虚拟机VMware及在VMware下安装Ghost XP系统图文教程(附PQ分区及VMware共享教程)
  18. 腾讯6W月薪架构师能力曝光!微信架构为什么是史上最值钱的IM架构?
  19. html加图标 favicon图标
  20. Oracle之函数concat、lpad

热门文章

  1. 鉴别优秀互联网公司的五项原则:前台大美女、工资有点高!
  2. 李宏毅机器学习课程--回归(Regression)
  3. On TransactionIsolation(6)RepeatableRead
  4. 【实战】轻轻松松使用StyleGAN(七):用StyleGAN Encoder为女朋友制作美丽头像
  5. 用 Go 实现一个 GitHub Trending API
  6. 巴菲特 投资“金”定律
  7. 优朋普乐大数据_优朋普乐发5亿广告红包 开拓互联网电视价值空间
  8. 我学炒外汇 第九篇美圆影响因素
  9. 学习笔记---Git
  10. 计算机在材料科学中的应用上机,计算机在材料科学中的应用上机指导书-.doc