了解 RemotiveBroker 的 gRPC API 以及它如何简化原型设计、构建和测试汽车软件。以您想要的方式和您选择的编程语言构建软件。我们使用 Python 包装器和 GitHub 上的公共存储库中提供的 gRPC 存根使事情变得更容易。
想要使用 Python 制作快速原型吗?对 Rust 感兴趣? RemotiveBroker gRPC API 可用于以您选择的语言读取和写入车辆信号数据。这意味着您可以使用您喜欢的工具快速构建依赖于真实车辆信号数据的应用程序。给定一个简单的配置和信号数据库文件,您可以立即使用记录的数据或在具有实时数据的物理车辆内开始工作。
无论您使用的是记录数据还是实时数据,都可以使用相同的 API,编写一次应用程序,然后在桌面和车辆内进行测试!您可以重复使用以前记录的驾驶周期,例如在确定性 ECU 测试设置中或在原型设计图形用户界面时。一旦您对自己的工作感到满意,您就可以本着真正的左移精神,将其带到测试台或实体车辆上,因为您知道代码已经过测试。
与我们的协作平台RemotiveCloud配对,您可以使用多个虚拟化 RemotiveBrokers 快速扩大您的开发力度!
使用三行代码启动RemotiveBroker:
$ git clone https://github.com/remotivelabs/remotivebroker-bootstrap.git $ cd remotivebroker-bootstrap $ docker-compose up -d
试用我们免费的 3 分钟演示或查看我们在 Github 上的一些内容,例如API 、简单示例、 ProtoPie 集成),然后转到 repo 以在您的桌面上运行引导 RemotiveBroker 。
RemotiveBroker 是一款灵活的开发工具,适用于大多数设置。它通过发布/订阅 gRPC API 公开车辆信号数据。我们支持最常见的车辆网络,如 CAN、Flexray、LIN 和汽车以太网 - 由 .dbx、.xml (fibex)、.ldf 和 .arxml 启用。我们还证明了 E2E 保护。
我们为包装器和存根提供了一个公共存储库。任何人都可以使用他们喜欢的语言提交带有包装器的拉取请求,开始使用我们的 gRPC 原型文件。我们的目标是让每个人都可以使用包装器和存根/客户端。
只需进行简单的配置,RemotiveBroker 就会公开一个 gRPC API,让您掌控一切。借助 gRPC 提供的广泛语言支持,您可以使用自己喜欢的语言,例如 Node.js、Ruby、C# 或 Kotlin。gRPC 利用 HTTP/2 和二进制消息格式,这有助于减少网络带宽并降低延迟。这使我们的 RemotiveBroker 能够实时发送大量数据,例如高速 CAN 和 CAN-FD 或 FlexRay 的情况。
我们为RemotiveBroker API 的一个子集提供了 Python 包装器 API,使构建应用程序变得更加容易。它还可通过Python 包索引轻松安装。此包装器 API 使执行常见操作(如连接到 RemotiveBroker 和设置车辆信号数据订阅)变得更加容易。
连接到 RemotiveBroker 并设置信号订阅:
# Connect to RemotiveBroker client = Client() client.on_connect = lambda c: print(f"Yay! - connected as {c.client_id} to {c.url}") client.on_signals = lambda signals: print(signals.to_json()) client.connect(url="http://localhost:50051") subscription = client.subscribe( signal_names=["Vehicle.Speed"], namespaces=["vss"], changed_values_only=False)
由于我们在 Web 客户端中使用 gRPC-web,因此我们为 grpc-web 提供了 Typescript 和 Javascript 存根/客户端。它也可以通过npm/yarn获得。虽然不如适当的包装器 API 那么有用,但在使用 gRPC 时,存根/客户端是必需的。但是,在探索 API 时,仅查看存根就很有帮助。
订阅帧频率分布:
// Setup request const config = new FramesDistributionConfig() const namespace = new NameSpace()namespace.setName(namespaceName) config.setNamespace(namespace) // Subscribe this._frameDistributionStream = this._networkServiceClient.subscribeToFramesDistribution(config)
我们的工具和 API 在不断发展。
在GitHub和LinkedIn上关注我们,不要错过更多有用的开发人员内容。
如果您对我们下一步应该开发什么有任何愿望或想法,请不要成为陌生人!