前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么应将 Rust 引入机器人平台?以及机器人平台的 Rust 资源推荐

为什么应将 Rust 引入机器人平台?以及机器人平台的 Rust 资源推荐

作者头像
niqin.com
发布2022-09-01 15:35:16
2K0
发布2022-09-01 15:35:16
举报
文章被收录于专栏:Rust 生态与实践

摘译自 Adam Rodnitzky 于 2021-03-30 发表在 tangramvision.com 的文章 Why Rust for Robots?

目前,机器人平台主要使用的程序设计语言为 C++。而 Tangram Vision 团队则认为,机器人平台应当选择更好和更合适的程序设计语言,Rust。

图像作者为 Davide Baraldi,来自于 Unsplash

C++ 在机器人平台的应用

对于机器人平台而言,其最终目标是商业化及其规模上的部署。C++ 在过去几十年的使用中,已经逐渐成为标准,这是由多种原因合力造就的。首先,C++ 无处不在的应用规模已经形成一个自我强化的机制;其次,C++ 有丰富的类库、工具,以及工程师的生态系统。比如说,ROS(译注:RobotOS,目前最流行的机器人平台客户端库之一)主要是用 C++ 实现的;流行的 OpenCV 计算机视觉库也主要是用 C++ 编写,并用 C++ 进行调用。

然而,工具和工程师的普遍性存在,并不能完全解释 C++ 在机器人平台的流行。还有一个更根本的原因是:在已知的资源限制下,大多数机器人平台必须满足可接受的性能阈值。C++ 非常适合这些嵌入式应用程序,因为高性能的语言才适合“与金属融合(close to the metal)”。

译注:“close to the metal” 是美剧《奔腾年代(Halt and Catch Fire)》第一季第四集剧名,大概剧情:戈登等人突破了多赫蒂阈值,这意味着他们的个人电脑组装后,将成为最快的电脑……清洁工打扫时制造了电涌,导致代码都不见了……原来乔是故意将卡梅伦骗出工作间制造了电涌……

因其 C++ 的特性,这种“与金属融合(close to the metal)”的优势,使得机器人平台面临着潜在的巨大危害。C++ 的测试、体系结构,以及内存管理,均存在使用依赖性上的不一致问题;然而,这些依赖关系可能会捕获和操纵基本的底层资源。这意味着在不经意间,就会非常容易地构建导致关键问题的 bug,并且你不会意识到……也就是说,直到你完全投入生产环境。在产品部署到生产环境之前,这个大问题的 bug,是不会被发现的。在生产环境中,一个绕过 QA 的边缘案例场景,会触发内存泄漏,或者系统崩溃,等等。

除非你如上述韦恩图所示,在狭小的交集范围内思考。否则,将会因为 C++ 自身的问题,而导致你的机器人平台代码库有诸多麻烦。

基于上述原因,Rust 语言则显得非常有积极意义。

将 Rust 引入机器人平台

Rust 是相对较新的机器人语言,但是有大量快速增长的项目和库,以及为机器人技术的发展提供了关键框架。

但是,为什么要改变呢?

首先,使用 Rust 构建机器人平台的最大好处是内存安全和管理。在 Rust 中,您必须非常地努力,才能“创造”内存泄漏或争用条件,比如:常见的内存陷阱、空指针,或数据争用。在 Rust 中,内存管理的方法是使用堆栈跟踪程序,然后使用指针引用来指向包含较大数据结构的堆。

为了访问数据结构,必须建立所有权,从而防止多个变量同时访问或修改数据结构。效率高?对。安全吗?对。最好的部分是:Rust 具有和 C++ 同等的“与金属融合(close to the metal)”的特性。这使得 Rust 成为一种高效、极其安全的语言。Rust 还允许底层访问,这非常适合资源约束和代码安全至关重要的机器人世界。

对于机器人平台来说,Rust 是一个明智的选择,但是向用 Rust 编写的机器人平台过渡,则需要时间。Rust 发布不足十年(译注:2014 年 10 月,Rust 编译器和工具有了第一个发布:0.12 版),而 C++ 已经存在了四个十年了。因此,C++ 仍然具有非常大的惯性,但 Rust 社区正在快速发展中。

机器人平台的 Rust 资源

在将 Rust 用于机器人平台的开发方面,有一个小型的,但正在不断增长的公司和开发人员社区(包括 Tangram Vision)。他们正在将一些机器人平台最常用的库和工具与 Rust 相融合,并且也在开发新的工具,以简化创建 Rust-编程(Rust-programmed)机器人的开发路径。

下面是我们最喜欢的几个机器人平台的 Rust 资源,涵盖了机器人技术发展的一些关键领域。在我们的选择中,较看重积极维护的资源(一年内)。

框架

  • OpenRR:开源的 Rust 机器人平台

ROS

  • rosrust:完全由 Rust 实现的 ROS 客户端库
  • ros2-rust:ROS2 的 Rust 绑定、代码生成器,以及示例代码
  • rustros_tf:ROS tf 库的 Rust 端口,用于追踪三维变换
  • Optimization Engine:用于机器人和自主系统的嵌入式优化

计算机视觉

  • realsense-rust:用于 Intel RealSense 深度摄像机的高级绑定(Tangram Vision 维护)
  • opencv-ros-camera: 一种兼容 OpenCV 的相机几何模型
  • adskalman: 卡尔曼(Kalman)电子滤波器
  • cam-geom: 相机几何模型
  • bayes_estimate: 一种贝叶斯(Bayesian)评估库

碰撞侦测

  • openrr-planner: 规避性的路径规划

控制器

  • stepper: Rust 的通用步进电机驱动器和控制器接口

模拟器

  • nphysics: 可用于机器人仿真的 2D 和 3D 物理引擎

数学计算

  • Nalgebra: Rust 的线性代数计算库
  • petgraph: 图数据结构库,兼容 Rust

你应该用 Rust 开发机器人吗?

随着 Rust 和机器人世界的发展,我们认为答案将越来越是肯定的。Rust 语言的基本优点,已经使其非常适合机器人专家,以及机器人平台的需要。越来越多的库和资源,使我们比以往任何时候都更容易开始基础工作。

谢谢您的阅读,欢迎交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust 生态与实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++ 在机器人平台的应用
  • 将 Rust 引入机器人平台
  • 机器人平台的 Rust 资源
    • 框架
      • ROS
        • 计算机视觉
          • 碰撞侦测
            • 控制器
              • 模拟器
                • 数学计算
                • 你应该用 Rust 开发机器人吗?
                相关产品与服务
                图数据库 KonisGraph
                图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档