NiQin (blog: 泥芹) shared the aphorism --
I returned and saw under the sun, that the race is not to the swift, nor the battle to the strong, neither yet bread to the wise, nor yet riches to men of understanding, nor yet favour to men of skill; but time and chance happeneth to them all. -- 《圣经》

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

💥 内容涉及著作权,均归属作者本人。若非作者注明,默认欢迎转载:请注明出处,及相关链接。

Summary: 因 C++ 的特性,使得机器人平台面临着潜在的巨大危害。C++ 的测试、体系结构,以及内存管理,均存在使用依赖性上的不一致问题;然而,这些依赖关系可能会捕获和操纵基本的底层资源。这意味着在不经意间,就会非常容易地构建导致关键问题的 bug,并且你不会意识到……Rust 具有和 C++ 同等的“与金属融合(close to the metal)”的特性。这使得 Rust 成为一种高效、极其安全的语言。Rust 还允许底层访问,这非常适合资源约束和代码安全至关重要的机器人世界。使用 Rust 构建机器人平台的最大好处是内存安全和管理。在 Rust 中,内存管理的方法是使用堆栈跟踪程序,然后使用指针引用来指向包含较大数据结构的堆。对于机器人平台来说,Rust 是一个明智的选择,但是向用 Rust 编写的机器人平台过渡,则需要时间。

Topics: rust ai 人工智能 机器人 robotics

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

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

rust robots 图像作者为 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++ robots

除非你如上述韦恩图所示,在狭小的交集范围内思考。否则,将会因为 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:用于机器人和自主系统的嵌入式优化

计算机视觉

碰撞侦测

控制器

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

模拟器

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

数学计算

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

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

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

谢谢您的阅读!


Related Articles

  1. [WebAssembly] yew SSR 服务器端渲染
  2. [Rust] async-std 创建者对于最近“项目是否已死?”,移除对其支持等的答复
  3. [Rust] Rust 1.56.0 版本和 Rust 2021 版次发布,新特性一览,及项目的迁移、升级
  4. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 博客应用的体验报告
  5. [Rust] Rust 官方周报 399 期(2021-07-14)
  6. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(5)- 构建 HTTP 请求、与外部服务器通信的两种方法
  7. [Rust] Rust 官方周报 398 期(2021-07-07)
  8. [Rust] Rust 官方周报 397 期(2021-06-30)
  9. [Rust] Rust 官方周报 396 期(2021-06-23)
  10. [Rust] Rust 官方周报 395 期(2021-06-16)
  11. [Rust] Rust 1.53.0 明日发布,关键新特性一瞥
  12. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(3)- rhai 脚本、静态/资源文件、环境变量等
  13. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(2)- 获取并解析 GraphQL 数据
  14. [Rust] 使用 tide、handlebars、rhai、graphql 开发 Rust web 前端(1)- crate 选择及环境搭建
  15. [Rust] Rust 官方周报 394 期(2021-06-09)
  16. [Rust] Rust web 前端库/框架评测,以及和 js 前端库/框架的比较
  17. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(4)- 获取 GraphQL 数据并解析
  18. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 web 前端(3)- 资源文件及小重构
  19. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(2)- 组件和路由
  20. [WebAssembly] Rust 和 Wasm 的融合,使用 yew 构建 WebAssembly 标准的 web 前端(1)- 起步及 crate 选择
  21. [Rust] Rust 官方周报 393 期(2021-06-02)
  22. [Rust] Rust 官方周报 392 期(2021-05-26)
  23. [Rust] Rust 中,对网址进行异步快照,并添加水印效果的实践
  24. [Rust] Rust 官方周报 391 期(2021-05-19)
  25. [Rust] Rust,风雨六载,砥砺奋进
  26. [Rust] 为什么我们应当将 Rust 用于嵌入式开发?
  27. [Rust] Rust 官方周报 390 期(2021-05-12)
  28. [Rust] Rust + Android 的集成开发设计
  29. [Rust] Rust 1.52.1 已正式发布,及其新特性详述
  30. [Rust] 让我们用 Rust 重写那些伟大的软件吧
  31. [Rust] Rust 1.52.0 已正式发布,及其新特性详述
  32. [Rust] Rust 官方周报 389 期(2021-05-05)
  33. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(4) - 变更服务,以及小重构
  34. [Rust] Rust 1.52.0 稳定版预发布测试中,关键新特性一瞥
  35. [Rust] Rust 生态中,最不知名的贡献者和轶事
  36. [Rust] Rust 基金会迎来新的白金会员:Facebook
  37. [Rust] Rustup 1.24.1 已官宣发布,及其新特性详述
  38. [Rust] Rust 官方周报 388 期(2021-04-28)
  39. [Rust] Rust 官方周报 387 期(2021-04-21)
  40. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(4)- 变更服务,以及第二次重构
  41. [Rust] Rustup 1.24.0 已官宣发布,及其新特性详述
  42. [Rust] basedrop:Rust 生态中,适用于实时音频的垃圾收集器
  43. [Rust] Rust 编译器团队对成员 Aaron Hill 的祝贺
  44. [Rust] Jacob Hoffman-Andrews 加入 Rustdoc 团队
  45. [机器人] 为什么应将 Rust 引入机器人平台?以及机器人平台的 Rust 资源推荐
  46. [Rust] rust-lang.org、crates.io,以及 docs.rs 的管理,已由 Mozilla 转移到 Rust 基金会
  47. [Rust] Rust 官方周报 386 期(2021-04-14)
  48. [Rust] Rust 编译器(Compiler)团队 4 月份计划 - Rust Compiler April Steering Cycle
  49. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(3) - 重构
  50. [Rust] 头脑风暴进行中:Async Rust 的未来熠熠生辉
  51. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务(2) - 查询服务
  52. [GraphQL] 基于 actix-web + async-graphql + rbatis + postgresql / mysql 构建异步 Rust GraphQL 服务 - 起步及 crate 选择
  53. [Rust] Rust 2021 版本特性预览,以及工作计划
  54. [Rust] Rust 用在生产环境的 42 家公司
  55. [Rust] 构建最精简的 Rust Docker 镜像
  56. [Rust] Rust 官方周报 385 期(2021-04-07)
  57. [Rust] 使用 Rust 做异步数据采集的实践
  58. [Rust] Android 支持 Rust 编程语言,以避免内存缺陷
  59. [Rust] Android 平台基础支持转向 Rust
  60. [Rust] Android 团队宣布 Android 开源项目(AOSP),已支持 Rust 语言来开发 Android 系统本身
  61. [Rust] RustyHermit——基于 Rust 实现的下一代容器 Unikernel
  62. [Rust] Rustic:完善的纯粹 Rust 技术栈实现的国际象棋引擎,多平台支持(甚至包括嵌入式设备树莓派 Raspberry Pi、Buster)
  63. [Rust] Rust 迭代器(Iterator trait )的要诀和技巧
  64. [Rust] 使用 Rust 极致提升 Python 性能:图表和绘图提升 24 倍,数据计算提升 10 倍
  65. [Rust] 【2021-04-03】Rust 核心团队人员变动
  66. [Rust] Rust web 框架现状【2021 年 1 季度】
  67. [Rust] Rust 官方周报 384 期(2021-03-31)
  68. [Rust] Rust 中的解析器组合因子(parser combinators)
  69. [生活] 毕马威(KPMG)调查报告:人工智能的实际采用,在新冠疫情(COVID-19)期间大幅提升
  70. [Python] HPy - 为 Python 扩展提供更优秀的 C API
  71. [Rust] 2021 年,学习 Rust 的网络资源推荐(2)
  72. [Rust] 2021 年,学习 Rust 的网络资源推荐
  73. [生活] 况属高风晚,山山黄叶飞——彭州葛仙山露营随笔
  74. [Rust] Rust 1.51.0 已正式发布,及其新特性详述
  75. [Rust] 为 Async Rust 构建共享的愿景文档—— Rust 社区的讲“故事”,可获奖
  76. [Rust] Rust 纪元第 382 周最佳 crate:ibig 的实践,以及和 num crate 的比较
  77. [Rust] Rust 1.51.0 稳定版本改进介绍
  78. [Rust] Rust 中将 markdown 渲染为 html
  79. [生活] 国民应用 App 的用户隐私数据窥探
  80. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(3)- 重构
  81. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(2)- 查询服务
  82. [GraphQL] 构建 Rust 异步 GraphQL 服务:基于 tide + async-graphql + mongodb(1)- 起步及 crate 选择
  83. [Rust] Rust 操控大疆可编程 tello 无人机

Topics

rust(83)

graphql(17)

rust-官方周报(17)

webassembly(16)

wasm(10)

async-graphql(9)

yew(9)

tide(8)

rust-官方博客(8)

rust-web(7)

this-week-in-rust(6)

mysql(5)

actix-web(5)

rbatis(5)

android(4)

mongodb(3)

json-web-token(3)

jwt(3)

cargo(3)

技术延伸(3)

rust-wasm(3)

trunk(3)

handlebars(3)

rhai(3)

用户隐私(2)

学习资料(2)

python(2)

ai(2)

人工智能(2)

postgresql(2)

rust-compiler(2)

rust-基金会(2)

rust-foundation(2)

rustup(2)

rust-toolchain(2)

rust-工具链(2)

rust-游戏开发(2)

rust-区块链(2)

rust-2021(2)

graphql-client(2)

surf(2)

rust-game(2)

async-std(2)

tello(1)

drone(1)

无人机(1)

隐私数据(1)

markdown(1)

html(1)

crate(1)

async(1)

异步(1)

旅游(1)

不忘生活(1)

葛仙山(1)

hpy(1)

python-扩展(1)

正则表达式(1)

解析器组合因子(1)

组合器(1)

regular-expression(1)

parser-combinator(1)

regex(1)

官方更新(1)

rust-工作招聘(1)

rust-技术资料(1)

rust-周最佳-crate(1)

rust-web-框架(1)

rust-web-framework(1)

rust-核心团队(1)

rust-core-team(1)

rust-language-team(1)

pyo3(1)

rust-python-集成(1)

python-性能改进(1)

迭代器(1)

iterator-trait(1)

国际象棋(1)

chess(1)

游戏引擎(1)

game-engine(1)

虚拟化(1)

unikernel(1)

rustyhermit(1)

linux(1)

virtualization(1)

sandboxing(1)

沙箱技术(1)

数据采集(1)

异步数据采集(1)

docker(1)

镜像(1)

生产环境(1)

rust-评价(1)

rust-2021-edition(1)

rust-2021-版本(1)

graphql-查询(1)

vision-doc(1)

愿景文档(1)

代码重构(1)

steering-cycle(1)

方向周期(1)

隐私声明(1)

机器人(1)

robotics(1)

rustdoc(1)

rust-编译器(1)

实时音频(1)

real-time-audio(1)

变更服务(1)

mutation(1)

查询服务(1)

query(1)

rust-贡献者(1)

rust-轶事(1)

rust-稳定版(1)

rust-预发布(1)

rust-测试(1)

安全编程(1)

可信计算(1)

安全代码(1)

secure-code(1)

rust-android-integrate(1)

rust-embedded(1)

rust-嵌入式(1)

rust-生产环境(1)

rust-production(1)

网页快照(1)

网页截图(1)

水印效果(1)

图片水印(1)

yew-router(1)

css(1)

web-前端(1)

wasm-bindgen(1)

区块链(1)

blockchain(1)

dotenv(1)

标识符(1)

rust-1.53.0(1)

rusthub(1)

rust-1.56.0(1)

rust-项目升级(1)

异步运行时(1)

ssr(1)

tokio(1)

warp(1)

reqwest(1)


Elsewhere

- Open Source
  1. github/zzy
  2. github/sansx
- Learning & Studying
  1. Rust 学习资料 - 泥芹