5 个版本
0.2.2 | 2023 年 10 月 2 日 |
---|---|
0.2.1 | 2023 年 7 月 5 日 |
0.2.0 | 2023 年 6 月 29 日 |
0.1.1 | 2023 年 6 月 18 日 |
0.1.0 | 2023 年 6 月 18 日 |
77 在 机器人 中排名
74 每月下载量
19KB
353 代码行
Rust 中的 Foxglove WebSocket 发布
此库提供在 Rust 中将消息发布到惊人的 Foxglove UI 的方法。它实现了 Foxglove WebSocket 协议的一部分,该协议在 https://github.com/foxglove/ws-protocol 中描述。
示例
调用
cargo run --release --example string
以启动一个示例应用程序,该应用程序发布 ROS 1 字符串数据 -- 既有 latching 也有 non-latching。
lib.rs
:
此库提供在 Rust 中将消息发布到惊人的 Foxglove UI 的方法。它实现了 Foxglove WebSocket 协议的一部分,该协议在 https://github.com/foxglove/ws-protocol 中描述。
该协议本身不固定消息的具体数据方案。但为了 Foxglove 能够理解这些消息,遵循众所周知的序列化方案 https://mcap.dev/spec/registry 是有意义的。
示例
这是一个使用单个 ROS1 通道/主题和 std_msgs/String
消息类型的示例。
use std::{io::Write, time::SystemTime};
fn build_string_message(data: &str) -> anyhow::Result<Vec<u8>> {
let mut msg = vec![0; std::mem::size_of::<u32>() + data.len()];
// ROS 1 message strings are encoded as 4-bytes length and then the byte data.
let mut w = std::io::Cursor::new(&mut msg);
w.write(&(data.len() as u32).to_le_bytes())?;
w.write(data.as_bytes())?;
Ok(msg)
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let server = foxglove_ws::FoxgloveWebSocket::new();
tokio::spawn({
let server = server.clone();
async move { server.serve(([127, 0, 0, 1], 8765)).await }
});
let channel = server
.publish(
"/data".to_string(),
"ros1".to_string(),
"std_msgs/String".to_string(),
"string data".to_string(),
"ros1msg".to_string(),
false,
)
.await?;
channel
.send(
SystemTime::now().elapsed().unwrap().as_nanos() as u64,
&build_string_message("Hello!")?,
)
.await?;
}
依赖项
~9–19MB
~262K SLoC