文档章节

[译]机器人操作系统简介:终极机器人应用框架(下)

暗夜在火星
 暗夜在火星
发布于 2016/03/06 00:14
字数 1611
阅读 248
收藏 4
点赞 1
评论 0

上一篇:[译]机器人操作系统简介:终极机器人应用框架(上)


运行一个模拟系统

模拟世界

首先的目标是创建一个可以在其中模拟想要实现的脚本的环境。在stage_ros包中的stageros节点允许我们在一个由一张图片定义的2D图形中运行机器人。 在stage_ros包中有一个完整的针对世界文件和如何生成他们的语法。这些非常简单,但超出了我们的范畴。幸运的是, 这些包都带有几个demo世界。首先,去到文件的目录:

roscd stage_ros
cd world

在这个目录里有几个文件。运行其中一个,

rosrun stage_ros stageros willow-erratic.world

这样就创建了几个主题。每一个的意义在包的文档中都有说明。重要的部分是它有cmd_vel。

在显示的图形中,有一个蓝色的广场,代表你控制机器人。通过使用我们的代码或者_Robot Steering_,可以控制这个机器人。试试吧!

通过加载文件来启动系统

在我们的包中创建一个launch目录,并且在它里面创建一个teleop.launch文件。最后目录的结构应该看起来像这样:

toptal_tutorial/
├── CMakeLists.txt
├── launch
│   └── teleop.launch
├── package.xml
├── scripts
│   └── teleop.py
└── src

在teleop.launch文件中我们定义了一系列节点以及他们的互联。

<launch>
  <arg name="world_file" default="$(find stage_ros)/world/willow-four-erratics-multisensor.world" />
  <node pkg="stage_ros" type="stageros" name="simulated_world" args="$(arg world_file)"></node>
  <group ns="robot_0">
    <node pkg="joy" type="joy_node" name="joy_input"></node>
    <node pkg="toptal_tutorial" type="teleop.py" name="joy_convert"></node>
  </group>
</launch>

新的世界包括了四个机器人,并且他们每一个主题都有前缀robot_<n>。所以,0号机器人有一个叫作robot_0/cmd_vel的速度命令主题。 这就是为什么我们在命名空间中放置名叫robot_0的控制器,以便把他们的名字调整到新的格式。在这样的场景下,你可以想象得到在文件系统中这些主题的目录名字。

为了运行启动文件,不需要roscore。在某些场景,roscore只是无作为的启动文件的一个特别案例。如果缺少roscore,仅是第一个启动文件被加载时会运行 一个core,剩下的则连接到此。现在,我们通过这样来运行加载器:

roslaunch toptal_tutorial teleop.launch

如果全部都正确,结果会有一个带4个机器人的模拟器,其中一个机器人由我们的游戏柄或者操纵杆控制。这个世界比前一个的引擎盖要多得多。这四个机器人每一个都有:

/robot_<n>/base_pose_ground_truth
/robot_<n>/base_scan_0
/robot_<n>/base_scan_1
/robot_<n>/camera_info_0
/robot_<n>/camera_info_1
/robot_<n>/cmd_vel
/robot_<n>/depth_0
/robot_<n>/depth_1
/robot_<n>/image_0
/robot_<n>/image_1
/robot_<n>/odom

可用0,1,2,3来替换<n>。这把我们带到了最后一个主题。

使用rqt查看数据

我们不会深入研究rqt,但它是查看更复杂数据的完美工具。你可以尝试全部主题,但这里我们关注于image_0,image_1,depth_0,和depth_1这几个主题。

让我们加载rqt并移除全部开启的插件。现在打开4个图片展示台(Plugins > Visualization > Image View),并且在2x2的表格结构中放置他们。最后,在每个视图的左上角, 在四个状态主题中选择robot_0。

我们得到的是带尝试知觉的立体视觉,和低分辨率的摄像机。记住我们甚至可以获得这个结果而不用输入系统。如果我们只是这样运行(在stage_ros/world目录里面):

rosrun stage_ros stageros willow-four-erratics-multisensor.world

并且通过一个叫作/robot_0/cmd_vel主题添加_Robot Steering_插件,也可以获得带在屏幕滑块进行控制的相同的结果。

将结果应用到真实系统

大量的硬件都能完整支持ROS,这些经常由第三方志愿者提供。很多机器人平台有生成这些消息类型的驱动,而ROS有采取网络摄像头以及发布图片反馈的节点。

最后的结果是我们想要实现的一个模拟,通过以下修改也可以达到同样的效果:

  • 在你的机器人的车载计算器上安装ROS

  • 在车载计算机上创建一个启动文件把ROS和底层平台,全部高层的传感器如摄影机以及激光测距义等连接起来。需要的节点可能已经存在,或者可以通过在某一边为ROS创建发布者/订阅者,同时在另一边创建针对序列通信的驱动来实现

  • 在启动时运行启动文件

  • 在你的远程计算机中把export ROS_MASTER_URI=http://<robot_hostname>:11311/添加到你的bash启动中,使得远程计算机在给定的域名和端口寻找roscore

  • 加载rqt并且/或者任意监控和控制机器人的脚本

这样下来其实只是在远程设备上放置合适的环境变量,其余的则是处理它本身。在计算机集群上运行ROS仅需要在每一个机器上都完成某一个步骤。

结论

我们已经通过非常少量的代码,演示了你怎样才能随心所欲操纵一个复杂系统的变量。简单的发布者/订阅者系统允许你快速开发在计算机集群中处理数据的软件管道,而不需要担心底层相关元素的实现。

我们只是使用了一个简单的模拟器,更复杂的模拟器如gazebo(也包含在完整的桌面版本中)可以让你创建有物理和复杂传感器的3D世界, 并且可以给你最终结果的体验和远在它被开发前的产品。

这个只是一个很基本的简介,但希望你对和这个多才多艺的框架一起工作的更感兴趣。


------------------------    


© 著作权归作者所有

共有 人打赏支持
暗夜在火星

暗夜在火星

粉丝 150
博文 150
码字总数 310930
作品 1
广州
程序员
[译]机器人操作系统简介:终极机器人应用框架(上)

[译]机器人操作系统简介:终极机器人应用框架 /** * 原文出处:https://www.toptal.com/robotics/introduction-to-robot-operating-system * @author dogstar.huang chanzonghuang@gmail.co......

暗夜在火星 ⋅ 2016/03/06 ⋅ 0

【掘金小报】第十一期 Facebook 是如何加速应用的?

掘金日报主打分享优质深度技术内容,技术内容分:前端、后端、Android、iOS、产品设计、工具资源和一些有趣的东西。 与标题相关的文章在iOS分类下:Facebook iOS 应用是如何加速图片显示的?...

膜法小编 ⋅ 2017/05/10 ⋅ 0

ICRA 2018 十二大奖项名单及评选标准全汇总

雷锋网 AI 科技评论按:国际机器人与自动化会议(ICRA)是 IEEE 机器人与自动化学会(IEEE Robotics and Automation Society)的旗舰会议,同时也是机器人研究者展示他们工作的重要论坛。ICR...

WBLUE ⋅ 05/20 ⋅ 0

丰田研究院再向开源机器人基金会捐赠 100 万美元

丰田研究院(TRI)2 月 6 日发布公告称再次向开源机器人基金会(OSRF)捐赠 100 万美元,这也是 TRI 第二次向 OSRF 提供资金支持。上一次捐赠是在 2016 年,金额同样是 100 万美元。 丰田研究...

王练 ⋅ 02/08 ⋅ 0

嵌入式技术在机器人中这样发挥作用!

以嵌入式计算机为核心的嵌入式系统(Embedded System)是继IT 网络技术之后,又一个新的技术发展方向,它以其强大而灵活的可应用性得到了计算机、通信和信息等产业的广泛认可,已被广泛应用在...

dp29sym41zygndvf ⋅ 05/12 ⋅ 0

如何利用paddlepaddle做一个简单的聊天机器人 | 公开课

分享背景 ▼ 语音助手,也称为聊天机器人作为人工智能交互的入口之一,其战略地位,好比百度之于PC,微信之于手机,已经成为巨头兵家必争之地。什么是聊天机器人,聊天机器人又有哪些难点,本...

y0w1as5eg37urfds ⋅ 2017/12/18 ⋅ 0

预告:贾子枫 与 Top Liu 的Live - - 如何玩转 ROS 机器人程序设计

首先要非常感谢贾子枫邀请我来参与这次「机器人」主题的系列live,并与大家分享ROS学习的话题。 本次活动定位为公益及技术传播活动 1. 门票定为最低价9.9元 2. 本次live全部收入将用于资助贫...

Top Liu ⋅ 2017/03/08 ⋅ 0

强化学习:迈向通用型人工智能的重要途径

     如何赋予机器自主学习的能力,一直是人工智能领域的研究热点。在越来越多的复杂现实场景任务中,需要利用深度学习、宽度学习来自动学习大规模输入数据的抽象表征,并以此表征为依据...

遇见人工智能 ⋅ 05/27 ⋅ 0

比起各式各样的机器人,或许我们更需要一个机器人OS

  摘要:别让机器人变成了千元机。      如今智能机器人的一片火热,让我联想到当初的造手机大潮,iOS和安卓引领大屏击退塞班,中国厂商开始快速跟进,推出各种小XX大YY,这些千元机百...

人工智能观察君 ⋅ 2017/07/13 ⋅ 0

CES2018提前看 这几家人工智能公司值得关注

     每一年的CES都是科技行业的风向标,AI作为目前较为热门的领域,自然也成为CES的焦点。那么下周即将到来的CES都有哪些值得关注的AI公司和新品呢?我们不妨提前看一看。   科大讯飞...

人工智能那点事 ⋅ 01/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部