dora-rs学习之Rust 和机器人

最近在研究一个网红机器人框架 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中的避碰路径规划
  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 GTK-rs 库需要先安装 GTK+3,可以在 Linux 系统下通过包管理器安装,也可以在 Windows 和 macOS 下从官网下载安装程序进行安装。 安装 GTK+3 后,可以在 Rust 项目中添加 gtk 和 gdk 两个依赖: ```toml [dependencies] gtk = "0.9" gdk = "0.9" ``` 然后在 Rust 代码中引入 gtk 和 gdk 库: ```rust extern crate gtk; extern crate gdk; ``` 在 GTK-rs 中,主要有两种方式创建 GUI 窗口:Builder 和手动创建。下面分别介绍这两种方式。 ### 使用 Builder 创建 GUI 窗口 使用 Builder 可以通过 XML 文件描述 GUI 界面,然后使用 Rust 代码加载并显示窗口。以下是一个简单的例子: ```xml <?xml version="1.0" encoding="UTF-8"?> <interface> <object class="GtkWindow" id="main_window"> <property name="title">Hello, World!</property> <property name="default-width">400</property> <property name="default-height">300</property> <child> <object class="GtkLabel" id="label"> <property name="label">Hello, World!</property> </object> </child> </object> </interface> ``` 在 Rust 代码中,可以使用 gtk::Builder 加载并显示窗口: ```rust use gtk::prelude::*; use gtk::{Builder, Window}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let glade_src = include_str!("path/to/glade/file.glade"); let builder = Builder::from_string(glade_src); let window: Window = builder.get_object("main_window").unwrap(); window.show_all(); gtk::main(); } ``` ### 手动创建 GUI 窗口 手动创建 GUI 窗口需要在 Rust 代码中定义窗口和窗口中的组件,以下是一个简单的例子: ```rust use gtk::prelude::*; use gtk::{Window, WindowType, Label}; fn main() { if let Err(err) = gtk::init() { eprintln!("Failed to initialize GTK: {}", err); return; } let window = Window::new(WindowType::Toplevel); window.set_title("Hello, World!"); window.set_default_size(400, 300); let label = Label::new(Some("Hello, World!")); window.add(&label); window.show_all(); gtk::main(); } ``` 以上代码中,创建了一个顶层窗口和一个标签组件,将标签添加到窗口中并显示窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值