dora-rs学习之Rust 和机器人

news2024/11/24 9:04:16

最近在研究一个网红机器人框架 dora-rs,也看到一些具身智能相关,做机器人遥操作与数据采集及可视化系统的公司使用rust来开发,这里探讨一下dora-rs和rust给机器人带来什么,引述官方的描述:Hello from dora-rs | dora-rs

2024年,AI蓬勃发展!然而,机器人框架多年来没有太大变化...... 这就是我们创建dora-rs的原因!DORA-RS是一种新的机器人框架,将现代性带入机器人应用。

dora-rs 已经可以显示出令人印象深刻的性能!这是使用我们自己的共享内存服务器和Apache Arrow 实现零复制(zero-copy)的结果!

这些性能改进对于初学者、AI 从业者和业余爱好者来说意义重大,他们因该领域缺乏对 Python 的支持而受到限制!

而这只是我们可以为 dora-rs 展示的众多创新功能中的一个例子!

 dora-rs 支持 Python、Rust、C 和 C++ !官方贴出了传输ros消息的性能对比,使用ros2 python API传输1080p 4MB消息数据需要14.76ms,使用dora-rs只需要2.18ms,快了6.8倍。当数据量到40MB大小时,差距被明显拉大,dora-rs python 比 ros2 python快17倍多;

 再看c++ API对比版本,40MB数据大小时,dora-rs 与 ros2 打平,稍微快一丢丢;

dora-rs传 40MB 大小的数据,python,rust,C++ 分别用时 8.94ms、4.49ms、4.49ms 

这个速度确实很快了,而且rust和c++一样快,于是很好奇rust是什么,在机器人领域可以做什么。

dora-rs 介绍和特点

dora-rs 是一款基于 Rust 语言的机器人应用框架,旨在简化和加速机器人应用的开发。它提供低延迟、可组合和分布式的数据流功能,使开发人员能够专注于机器人应用的逻辑,而无需过多地关注底层硬件和通信细节。

dora-rs 的核心是数据流范式,将机器人应用建模为有向图,其中节点代表任务,边代表数据流。这种模式使得开发人员可以轻松地组合和分解任务,并将其分布到多台机器上运行。

dora-rs 的优势包括:

  • 低延迟: 使用零拷贝 Apache Arrow 消息,确保数据传输的低延迟和高吞吐量。
  • 可组合性: 任务可以轻松地组合和分解,并以分布式方式运行。
  • 易用性: 支持 Python、C、C++ 和 ROS2 等多种语言和编程范式,降低了开发门槛。
  • 现代化: 基于 Rust 语言构建,具有内存安全、高性能和可扩展性等优点。

dora-rs 已经在机器人控制、自主导航、计算机视觉等领域得到了广泛应用。

dora-rs 的功能

dora-rs 提供了一系列功能来简化机器人应用的开发,包括:

  • 任务调度和管理:自动调度和管理任务的执行,并提供任务状态监控和故障恢复机制。
  • 数据流管理:高效地管理数据流,确保数据在任务之间高效传输。
  • 传感器数据处理:提供传感器数据处理库,简化传感器数据的采集和处理。
  • 运动控制:提供运动控制库,实现机器人的运动控制。
  • 仿真:提供仿真环境,方便开发和测试机器人应用。

dora-rs 的应用

dora-rs 可用于开发各种机器人应用,包括:

  • 机器人控制:控制机器人的运动和姿态。
  • 自主导航:使机器人能够自主地在环境中导航。
  • 计算机视觉:从机器人摄像头获取图像和视频,并进行分析处理。
  • 人机交互:实现机器人与人的自然交互。

rust的优点,以及其在机器人领域的优势: 

Rust语言在机器人开发上的优势

1. 内存安全

  • 核心优势:Rust通过引入所有权和借用检查机制,在编译时就能发现和解决内存错误,如空指针引用、数据竞争等,从而极大地提高了代码的安全性和稳定性。这对于机器人这种需要长时间稳定运行且对安全性要求极高的系统来说至关重要,机器人系统通常需要运行在恶劣的环境中,内存安全问题可能导致机器人系统崩溃或死机,造成严重后果。
  • 具体表现:Rust的所有权系统确保每个对象都有一个明确的所有者,该所有者负责在不再需要时释放对象,从而避免了内存泄漏。同时,Rust的借用检查器确保在对象被借用期间,其所有者不会意外地修改或释放它,从而避免了数据竞争和悬挂指针等问题。

2. 高性能

  • 性能接近C/C++:Rust被设计为与C和C++相媲美的性能,但同时又提供了更高级别的抽象和编程便利性。这使得开发者可以在保持高性能的同时,享受更安全的编程体验。
  • 零成本抽象:Rust的零成本抽象原则允许开发者以高层次的抽象编写代码,而无需担心性能损失。这意味着开发者可以使用Rust的高级特性来构建复杂的机器人系统,同时保持高效的执行速度。

3. 并发性

  • 并发安全:Rust通过所有权和借用机制确保了并发安全。它使用线程安全的“无共享可变性”模型来管理并发操作,避免了数据竞争和死锁等并发问题。这对于需要处理多任务并行计算的机器人系统来说非常重要。
  • 高效并行处理:Rust的并发库(如Rayon)提供了简单而高效的并行化操作,可以加速机器人算法中的数据处理和模型训练过程。这使得Rust成为实现高效并行计算的理想选择。

4. 生态系统支持

  • 丰富的库和工具:Rust拥有一个快速发展的生态系统,包括丰富的库和工具。这些库和工具涵盖了机器人开发的各个方面,如硬件接口、传感器数据处理、运动控制等。
  • 活跃的社区:Rust社区非常活跃,提供了大量的资源、教程和支持。开发者可以在社区中获取帮助、分享经验,并参与到Rust的改进和发展中来。

5. 跨平台性

  • 支持多种平台:Rust支持多种平台,包括Windows、Linux、macOS等。这使得开发者能够轻松地在不同平台上编写可移植的机器人代码。
  • 与C/C++的互操作性:Rust与C和C++具有良好的互操作性,这意味着开发者可以在Rust项目中无缝地集成现有的C/C++库和代码,从而利用这些库提供的丰富功能和优化性能。

综上所述,Rust语言在机器人开发上的优势主要体现在内存安全、高性能、并发性、生态系统支持和跨平台性等方面。这些优势使得Rust成为构建安全、高效、可靠的机器人系统的理想选择。随着 Rust 语言的不断发展和完善,相信它将在机器人开发领域发挥越来越重要的作用。

 除了上面提到的框架 dora-rs,rust在机器人领域有哪些成果呢?这个网站做了汇总

Rust for Robotics|robotics.rs --- Rust is for Robotics | robotics.rsicon-default.png?t=N7T8https://robotics.rs/

这个网站是关于机器人技术的Rust语言资源的。 它讨论了机器人技术中使用的各种库,包括ROS、数学、路径规划、模拟、可视化、文件加载和设备驱动程序。 这个网站提供了一个全面的Rust机器人技术的可用资源列表。 这个网站列出了机器人软件的几个关键组件,如运动规划,物理模拟,传感,硬件接口等,并为每个组件提供了各种库。 这个网站的目的是成为机器人技术中Rust语言的参考资源。

如路径规划的rust库:

Path Planning 路径规划

  • pathfinding - Pathfinding library for rust
  • rrt - RRT (Rapidly-exploring Random Tree) library in Rust
    rrt -Rust中的RRT(快速探索随机树)库
  • openrr-planner - Collision Avoidance Path Planning in Rust-lang
    openrr-planner -Rust-lang中的避碰路径规划

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1943790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

svelte - 5. 动画

svelte/motion模块导出两个函数: tweened 和 spring。 用于创建writable(可写)store,其值会在set 和 update之后更新,而不是立即更新。 (人话:用 svelte 提供的tweened 和 spring可以达成流程变…

数学建模学习(1)遗传算法

一、简介 遗传算法(Genetic Algorithm, GA)是一种用于解决优化和搜索问题的进化算法。它基于自然选择和遗传学原理,通过模拟生物进化过程来寻找最优解。 以下是遗传算法的主要步骤和概念: 初始化种群(Initialization&a…

react中嵌套路由以及默认显示二级路由

1.安装插件 npm install react-router-dom 2.新建文件及页面 在scr/page下新建layout、about、home文件夹,分别在对应的文件夹下新建入口文件index.js;src下新建router文件夹,该文件夹下新建入口文件index.js 3.配置路由 如何配置路由&am…

昇思学习打卡-25-自然语言处理/RNN实现情感分类

文章目录 数据下载加载预训练词向量数据集预处理模型构建损失函数与优化器训练逻辑评估指标和逻辑模型训练与保存模型加载与测试自定义输入测试测试 情感分类是自然语言处理中的经典任务,是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&…

android audio不同音频流,(六)settings内音频流音量调整

(1)settings内,可设置音频流音量,如下图: (2)settings调整音量条进度,会触发SeekBarVolumizer对象: SeekBarVolumizer文件路径: frameworks/base/core/java/…

设计模式13-单件模式

设计模式13-单件模式 写在前面对象性能模式典型模式1. 单例模式(Singleton Pattern)2. 享元模式(Flyweight Pattern)3. 原型模式(Prototype Pattern)4. 对象池模式(Object Pool Pattern&#xf…

WebRTC QoS方法十三.2(Jitter延时的计算)

一、背景介绍 一些报文在网络传输中,会存在丢包重传和延时的情况。渲染时需要进行适当缓存,等待丢失被重传的报文或者正在路上传输的报文。 jitter延时计算是确认需要缓存的时间 另外,在检测到帧有重传情况时,也可适当在渲染时…

无人机图像目标检测技术详解

当前研究领域的热点之一。无人机搭载的高清摄像头能够实时捕获大量图像数据,对这些数据进行有效的目标检测对于军事侦察、环境监测、灾害救援等领域具有重要意义。本文将对无人机图像目标检测技术进行详解,包括图像处理技术、目标检测算法、关键技术应用…

LoFTR关键点特征匹配算法环境构建与图像匹配测试Demo

0,LoFTR CVPR 2021论文《LoFTR: Detector-Free Local Feature Matching with Transformers》开源代码 1,项目主页 LoFTR: Detector-Free Local Feature Matching with Transformers 2,GItHub主页 GitHub - zju3dv/LoFTR: Code for "…

Gen AI核心技术发展趋势分析

Gen AI核心技术解析及发展趋势 判别式模型,适用于处理回归与分类任务,其核心在于精准区分各类数据。与生成模型的生成新数据不同,判别模型专注于揭示输入特征与输出标签之间的紧密联系,从而实现准确分类或预测。在众多应用领域&am…

VS Code打开新文件会覆盖之前的窗口,解决办法

当我在VS Code中打开文件夹时,文件夹中只有一个文件能展示在窗口中,如果点击打开另外一个文件,之前打开的文件又会被覆盖。这样是无法进行文件之间的关联查找的。 要保证窗口可以打开多个文件,有不同的tab显示,设置如下…

好用的电脑屏幕监控软件推荐,什么软件能够监控电脑?

在当今信息化时代,电脑屏幕监控软件成为了企业管理、家长监管以及教育培训等领域的必备工具。通过实时监控电脑屏幕,这类软件可以有效提高工作效率,防止信息泄露,保障网络安全。本文将详细盘点几款主流的电脑屏幕监控软件&#xf…

PHP基础语法(四)

一、字符串类型 1、字符串定义语法 1)单引号字符串:在单引号内部,所有的字符都会按照字面意义解释,不会进行变量替换或转义处理,除了 \ 表示单引号本身。 $str1 Hello, World!;2)双引号字符串&#xff…

【机器学习算法基础】(基础机器学习课程)-08-决策树和随机森林-笔记

一、决策树之信息论基础 决策树是一种用来做决策的工具,就像我们生活中的选择树。例如,你在选择今天穿什么衣服时,会根据天气情况、出行活动等进行判断。决策树的构建过程涉及一些信息论的概念,用来衡量和选择最好的“分叉点”来进…

Unity打包设置

1.Resolution and Presentation (分辨率和显示) Fullscreen Window (全屏窗口): 应用程序将以全屏窗口模式运行,但不会独占屏幕。适用于想要全屏显示但仍需访问其他窗口的情况。 Resizable Window (可调整大小的窗口): 允许用户调整应用程序窗口的大小。适用于窗口…

Action通信 实践案例

Action通信 Server端实现 创建服务端功能包(注意目录层级): ros2 pkg create my_exer05_action_server --build-type ament_cmake --node-name nav_server --dependencies rclcpp rclcpp_action my_exer_interfaces nav_msgs /*需求&#x…

【vim】ubuntu20-server 安装配置 vim 最新最详细

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【vim】ubuntu20-server 安装配置 vim 最新最详细 开发环境一、vim github二、安装必…

基于SpringBoot实现验证码功能

目录 一 实现思路 二 代码实现 三 代码汇总 现在的登录都需要输入验证码用来检测是否是真人登录,所以验证码功能在现在是非常普遍的,那么接下来我们就基于springboot来实现验证码功能。 一 实现思路 今天我们介绍的是两种主流的验证码,一…

IP地址专用SSL/https证书——10分钟签发

一般常用的SSL证书多为域名型SSL证书,即需要提供准确的域名。如果不能提供域名,只能提供IP地址,则需要一种特殊的SSL证书——IP地址证书。下面是IP地址证书的申请教程 IP地址专用SSL证书获取链接https://www.joyssl.com/certificate/select/…

SQL中的LEFT JOIN、RIGHT JOIN和INNER JOIN

在SQL中,JOIN操作是连接两个或多个数据库表,并根据两个表之间的共同列(通常是主键和外键)返回数据的重要方法。其中,LEFT JOIN(左连接)、RIGHT JOIN(右连接)和INNER JOIN…