#web-rtc #sdk #robot #built #beyond #viamrobotics #viam

bin+lib viam-rust-utils

为Viamrobotics的SDKs设计的实用工具

37次发布

0.2.12 2024年8月12日
0.2.11 2024年7月10日
0.2.6 2024年5月23日
0.2.3 2024年3月28日
0.0.5 2022年11月29日

#302 in Web编程

每月46次下载

Apache-2.0

500KB
8K SLoC

Viam Rust Utils

在Rust中构建,用于各种Viam SDKs及其它

先决条件

在Mac和Unix-like上安装Rust

在完成以下步骤之前,请确保没有其他Rust的安装,例如对于Mac,您需要运行 brew uninstall rust

然后运行以下命令 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 在您喜欢的终端中,如果您以前已经安装了rustup,则只需运行 rustup update。安装程序应更新PATH环境变量,运行 which rustc 应该看到类似 ~/.cargo/bin/rustc 的内容,如果不是这样,您可能需要重新加载终端,如果仍然不起作用,那么您应该在PATH环境变量中添加 ~/.cargo/bin(更多信息 这里

仓库布局

  • src/gen 所有Google和Viam API proto文件
  • src/dial 用于机器人点对点连接的基于WebRTC的gRPC实现
  • src/dialdbg 用于调试dial逻辑的命令行工具。请参阅 src/dialdbg/README.md
  • src/ffi 用于dial逻辑的FFI包装器
  • src/proxy 创建Unix套接字以作为连接代理的逻辑
  • examples 示例列表

入门指南

本库中的逻辑旨在与Viam的SDK(Rust及其他)一起使用,而不是作为独立产品。要了解更多关于使用此处包含的逻辑的信息,请参阅rust-sdkpython-sdk。如果您想验证此代码是否工作,可以导航到示例文件夹并运行cargo run --bin test-echo(您需要提供自己的机器人的凭据,或参阅下面的说明)

回声流示例

回声示例与goutils样本服务器通信。它演示了单个、流式和双向通信。要测试,导航到您的goutils克隆并运行

go run rpc/examples/echo/server/cmd/main.go

请注意信令端口,并将examples/src/echo/main.rs中的端口号替换为您自己的端口,如下所示

let c = dial::DialOptions::builder()
    .uri("localhost:<your-port>")
    .without_credentials()
    .allow_downgrade()
    .connect
    .await?;

然后,从examples/目录运行

cargo run --bin test-echo

使用FFI(外部函数接口)

rust SDK公开了一些符合平台C调用约定的函数。大多数语言都支持调用C代码,但它们的特定实现超出了本README的范围。然而,我们提供了C++的示例。

设置

目前我们只支持类Unix系统。在继续之前,请确保已安装了GRPCCpp。导航到

cd examples/src/ffi/cpp
# Then
make buf

回声示例

回声示例与goutils样本服务器通信,导航到您的goutils克隆并运行

go run rpc/examples/echo/server/cmd/main.go

然后运行

make ffi_echo && ./ffi_echo

机器人示例

机器人示例与rdk服务器通信。在ffi_robot.cc文件中更新dial函数,使用您的地址和密钥

dial("<robot-address>",
            "<robot-secret>",
            false, ptr);

然后运行

make ffi_robot && ./ffi_robot

关于连接性和WebRTC功能的两个注意事项

首先:rust SDK默认尝试通过WebRTC进行拨号。您可以通过在dial构建器上调用disable_webrtc()来覆盖此设置,如下所示

let c = dial::DialOptions::builder()
        .uri("test-main.33vvxnbbw9.local.viam.cloud:8080") // Robot address
        .with_credentials(creds) // credentials
        .disable_webrtc() // forces gRPC connection
        .connect()
        .await?; // if the connection complete you will have a channel otherwise an error

其次:rust WebRTC实现仍然很新,可能存在bug。至少,我们预计调用ShellService::shell()存在异常行为的高可能性。如果您在WebRTC上遇到任何流请求的问题,直接拨号(如上所述禁用WebRTC)应解决这些问题。并且请提交一个bug报告!我们将努力尽快响应并解决问题。

许可证

版权所有 2021-2022 Viam Inc。

Apache 2.0 - 请参阅LICENSE文件

依赖关系

~67MB
~1.5M SLoC