随着AI的发展,机器人必然变得越来越智能。然而要实现智能化,除了需要丰富的AI算法外,还需要强大的操作系统支持——ROS就是这样一款非常受欢迎的机器人系统。ROS目前已经建立了庞大的生态系统,其参与者包括来自全球机器人行业的众多开发者,而英特尔开源技术中心(OTC)的Web团队也是其中重要一员。他们在客户端、 edge、云、IoT、W3C标准、机器人技术等领域开发及应用web技术,致力于保持web开放、安全、特性丰富且性能强大。
对于机器人设计厂商来讲,他们在极力寻求更好的软硬件解决方案,所以有人自然想到将ROS和Web相结合从而得到更好的机器人解决方案。或许有人会问:为什么要在机器人技术中使用Node.js 和Web?它们各自有什么特点?先看Node.js,其具有高性能 (JIT)特性,性能高于Python语言,从而使系统在同一机器人硬件平台上可实现更多功能;另外,Node.js拥有强大的生态系统和社区支持,是Github*上最流行的语言,而且拥有世界上最大的包分发系统——npm。Node.js设计时易于部署和调试,适合应用于web 界面。再看Web技术,它是远程控制和仪表板的最佳选择,可以进行状态检查、运动控制、姿势可视化、视频流等工作,而且可以在任何浏览器里运行,易于嵌入,拥有海量资源。
基于两者各自的优势,工程师要考虑的是如何将web引入到ROS中?首先,RWT* 已经将ROS 1.0 APIs 在web中暴露,但在2017年年中之前还没有针对ROS 2.0的解决方案,因此OTC的Web团队开发了一套新模块应用于ROS 2.0。当然我们还需要考虑这是不是在web中暴露ROS API 的最佳方式呢? 比如:服务;另一种做法是Node.js web 服务器,就是在务器中暴露ROS API,这种方式灵活而有效,web页面中只保留业务逻辑(RaaS)。其实工程师也不必害怕,因为web服务器在 Node.js中只不过需要几行代码,并且前端和后端具有同样的技术栈,因此更易于调试。
ROS2.0路线图
我们目前取得的两个成果是GitHub RWT 的两个软件包,其中一个是rclnodejs (github repo),它是一个ROS 2.0的Node.js 客户端,它可以提供快速、便捷而强大的ROS 2.0的JavaScript接口;另一个是ros2-web-bridge (github repo),能够实现在web页面中调用ROS 2.0 API ,且与 roslibjs*兼容。下面我们来看看这两个模块各自的工作原理。
如上图所示,其展示了rclnodejs软件架构设计,其原则是对rcl层薄封装,从而快速而轻松地适应变化。软件接口采用事件驱动和非阻塞(Promise/Event)模式 ,使得程序可以拥有高并发特性;另外包本身无需重新编译即可使用新的ROS消息,一切都在运行过程中处理。如此一来,用户就能够轻松、有效地编写 ROS 应用。
如上图所示,展示ros2-web-bridge 是如何将ROS 2.0引入到浏览器中。其与ROS 1.0 bridge (rosbridge_suite)现有的JSON消息协议 兼容,从而现有的 Web Tools 可以直接使用,例如 :2D/3D 可视化。保持开发的快速简单,用户友好的调试。如此一来,RWT ROS 1.0组件便可与 ROS 2.0透明兼容。
除了Node.js,C++ 和 Python也是ROS开发中常用的两种语言,我们不妨将三者进行性能对比:发布一条ROS消息,测量所用的时间和内存。当运行次数增加时,趋势趋于稳定,其它类型的测试中也能观察到同样的趋势,两种趋势都与语言常识相符。可以看出,Node.js 的速度2倍于Python,但是在运行时会消耗更多内存。
在Turtlebot* 3 + ROS 2.0应用案例中,采用了Intel® RealSense™ 相机和Intel Atom®的Up Board* ,用一个web应用作为远程控制,可以看出roslibjs + ros2-web-bridge易于创建强大的UI,可运行于任何浏览器中,其源代码在github上,ROS 2.0 的消息类型是geometry_msgs/msg/Twist。
在机器人领域,英特尔还做出了很多其它贡献,包括推出面向ROS 2.0的AI/ML/CV软件;通过Movidius NCS提供专用 AI 硬件;用RealSense深度相机,以3D的方式感知世界;采用改进的ROS MoveIt*实现更佳的操纵;以及对ROS 2.0 导航的重新设计。我们相信随着硬件和软件的不断发展,机器人会变得越来越智能。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/6106/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料