1- # Robot.cpp
1+ # 🤖 Robot.cpp
22
33【demo 位置】
44
5+ ![ 1783392980125] ( image/README_zh/1783392980125.png )
6+
57Robot.cpp是一个轻量化的on-device机器人模型推理框架,在llama.cpp的基础上进行开发,继承了其零依赖、轻量化的哲学,无需python相关的依赖配置,即可完成机器人模型推理,这使得其在跨平台尤其是环境配置复杂的边缘设备上具有优势。
68
79具体而言,robot.cpp最核心的概念是 [ ` model-server ` ] ( robot_server/README_zh.md ) ,其为最主要的统一模型接口。在实际工作,仅需要启动 ` model-server ` ,其会监听机器人发送的推理请求,即接受机器人传来的observation,在下层model进行forward计算,返回model生成的action。整体通信设计上为了轻量化零依赖采用手写TCP协议的方式。
@@ -12,12 +14,14 @@ Robot.cpp是一个轻量化的on-device机器人模型推理框架,在llama.cp
1214* ` policy ` :实际使用 ` model-client ` ,与具体的机器人系统或者仿真系统连接的一层抽象,policy负责接受机器人平台给的observation,对其进行处理,然后交给 ` model-client ` ,获得action的最终输出,在这一层看不到通信细节,使用更加友好。
1315* ` platform ` :不同的机器人平台,负责传感器管理,以及机器人控制。
1416
15- 工具上,我们亦都提供了两种工具帮助更好地对机器人模型进行开发
17+ 工具上,我们亦都提供了两种工具帮助更好地对机器人模型进行开发:
18+
19+ * [ ` hf2gguf ` ] ( tools/hf2gguf/README_zh.md ) :用来将safetensor格式的checkpoint转化成项目所需的gguf格式。
20+ * [ ` quant ` ] ( tools/quant/README_zh.md ) :对模型的任意tensor族群进行选择性quant的工具,用户仅需要调整yaml进行需求配置即可完成量化gguf的生成。
1621
17- * [ ` hf2gguf ` ] ( tools/hf2gguf/README_zh.md ) :用来将safetensor格式的checkpoint转化成项目所需的gguf格式
18- * [ ` quant ` ] ( tools/quant/README_zh.md ) :对模型的任意tensor族群进行选择性quant的工具,用户仅需要调整yaml进行需求配置即可完成量化gguf的生成
22+ ---
1923
20- ## 快速使用
24+ ## 🚀 快速使用
2125
2226``` bash
2327git clone https://github.com/Robot-cpp/robot.cpp
@@ -27,30 +31,29 @@ git submodule update --init --recursive
2731
2832我们介绍三类使用案例来帮助你快速了解本仓库:
2933
30- * model-server的启动,其与最小dummy model-client通信的案例
31- * model-server在仿真平台上的使用(以LIBERO为例)
32- * model-server在真机平台上的使用(以SO-101为例)
34+ * model-server的启动,其与最小dummy model-client通信的案例。
35+ * model-server在仿真平台上的使用(以LIBERO为例)。
36+ * model-server在真机平台上的使用(以SO-101为例)。
3337
34- ### model-server的启动与连接dummy client
38+ ### 🔌 model-server的启动与连接dummy client
3539
36- 我们以smolvla的gguf为例,教您快速使用model-server
40+ 我们以smolvla的gguf为例,教您快速使用model-server。
3741
38- #### step0: 下载gguf model
42+ #### Step 0: 下载gguf model
3943
4044在hugging-face上下载一份gguf示例:[ huggingface.co/rrobottt/smolvla-so101-fp32] ( https://huggingface.co/rrobottt/smolvla-so101-fp32 )
4145
42- #### step1 :model-server的启动
46+ #### Step 1 :model-server的启动
4347
44- 我们提供了两种方式来完成model-server的启动
48+ 我们提供了两种方式来完成model-server的启动。
4549
4650##### 方法1:直接下载
4751
48- 对于特定的一些平台与设定,我们已经预编译了一些` model-server ` 的二进制文件,可以直接在release page下载下来直接用
52+ 对于特定的一些平台与设定,我们已经预编译了一些` model-server ` 的二进制文件,可以直接在release page下载下来直接用。
4953
50- 下载之后,可以直接用下面的方式运行` model-server `
51-
52- ```
54+ 下载之后,可以直接用下面的方式运行` model-server ` :
5355
56+ ``` bash
5457./model-server \
5558 --model-type smolvla\
5659 --llm /path/to/smolvla-llm-f32.gguf \
@@ -73,22 +76,22 @@ git submodule update --init --recursive
7376
7477启动成功后会显示:
7578
76- ```
79+ ``` text
7780[model-server] listening on 127.0.0.1:5555 model=smolvla
7881```
7982
80- #### step2 :完成一次对model-server的dummy请求
83+ #### Step 2 :完成一次对model-server的dummy请求
8184
8285server启动过后,会监听请求,我们提供了一份最小示例来进行一个随机的observation请求。可以使用python或者c++的方式来进行请求。
8386
84- ##### python最小例子
87+ ##### Python最小例子
8588
86- ```
89+ ``` bash
8790pip install numpy
8891python robot_client/examples/python/minimal_example.py
8992```
9093
91- ##### cpp最小例子
94+ ##### C++最小例子
9295
9396我们提供了一个从编译到运行的例子(` robot_client/shell/cpp_client_example.sh ` ),按需修改以下环境变量:
9497
@@ -102,37 +105,42 @@ python robot_client/examples/python/minimal_example.py
102105
103106然后运行下面的bash:
104107
105- ```
108+ ``` bash
106109bash robot_client/shell/cpp_client_example.sh
107110```
108111
109- ### model-server在仿真平台上的使用(以LIBERO为例)
112+ ### 🧪 model-server在仿真平台上的使用(以LIBERO为例)
110113
111114详见 [ LIBERO 仿真评测说明] ( eval/libero/README_zh.md ) ([ English] ( eval/libero/README.md ) )。
112115
113- ### model-server在真机平台上的使用(以SO-101为例)
116+ ### 🦾 model-server在真机平台上的使用(以SO-101为例)
114117
115118详见link,亦可参考视频教程(bilibili link)
116119
117- ## 性能
120+ ---
121+
122+ ## ⚡ 性能
118123
119124我们在不同的平台测试了我们的实现性能,我们对模型进行5次warmup,100次loop,取其从收到图片开始包括process,forward,到输出可用action chunk的latency平均值(单位:ms)。所有state projector均保持f32精度。
120- 其中,对libero设定,输入为两张256x256的图片,输入的state维度为8;对so101的真机设定,输入为一张224x224的图片,输入的state维度为6
121125
122- 其中对于smolvla的preprocess设定,参考官方的基本设定,即首先会将图片变成512* 512
126+ 其中,对libero设定,输入为两张256x256的图片,输入的state维度为8;对so101的真机设定,输入为一张224x224的图片,输入的state维度为6。
127+
128+ 其中对于smolvla的preprocess设定,参考官方的基本设定,即首先会将图片变成512* 512。
123129
124130| Model | Mac M4 Pro (CPU) | Mac M4 Pro (Metal) | RTX 4090 | RTX 3060 | A100 |
125- | ---------------------- | ---------------- | ------------------ | -------- | -------- | ---- |
126- | smolvla@libero (bf16* ) | 555 | 216 | 28 | | 43 |
127- | smolvla@libero (f32) | 577 | 236 | 32 | | 41 |
128- | smolvla@so-101 (bf16* ) | 339 | 145 | 23 | | 35 |
129- | smolvla@so-101 (f32) | 396 | 158 | 24 | | 33 |
130- | pi0@libero (f32) | 1839 | 710 | 83 | | 79 |
131- | pi0@libero (bf16* ) | 1976 | 635 | 57 | | 70 |
131+ | ---------------------- | ---------------: | -----------------: | -------: | -------: | ---: |
132+ | smolvla@libero (bf16* ) | 555 | 216 | 28 | | 43 |
133+ | smolvla@libero (f32) | 577 | 236 | 32 | | 41 |
134+ | smolvla@so-101 (bf16* ) | 339 | 145 | 23 | | 35 |
135+ | smolvla@so-101 (f32) | 396 | 158 | 24 | | 33 |
136+ | pi0@libero (f32) | 1839 | 710 | 83 | | 79 |
137+ | pi0@libero (bf16* ) | 1976 | 635 | 57 | | 70 |
132138
133139> ` bf16* ` :在 Mac上使用 f16 结果替代 bf16,因为当前 Mac对 bf16 的支持不够好。
134140
135- ## 仓库架构
141+ ---
142+
143+ ## 🗂️ 仓库架构
136144
137145关键目录如下:
138146
@@ -172,7 +180,9 @@ robot.cpp/
172180 └── lerobot/ # LeRobot 相关依赖或参考代码
173181```
174182
175- ## 扩展与贡献
183+ ---
184+
185+ ## 🌱 扩展与贡献
176186
177187robot.cpp 欢迎社区贡献新的模型 runtime、平台适配、评测流程、模型转换工具与性能优化。我们希望保持核心推理框架轻量、跨平台、易于复现,同时让不同机器人模型和平台能够以统一接口接入。
178188
@@ -183,9 +193,17 @@ robot.cpp 欢迎社区贡献新的模型 runtime、平台适配、评测流程
183193
184194欢迎通过 issue 讨论设计,也欢迎提交 PR。对于较大的模型结构、协议变更或平台抽象调整,建议先开 issue 对齐接口边界。
185195
186- ## License
196+ ---
197+
198+ ## 📄 License
199+
200+ robot.cpp 源码使用 Apache License, Version 2.0 开源。完整协议文本见[ LICENSE] ( LICENSE ) 。
201+
202+ 本仓库也包含若干第三方开源组件,它们遵循各自的开源协议;具体请参考` third_party/ ` 下对应组件自带的 license 文件。
203+
204+ ---
187205
188- ## Acknowledgements
206+ ## 🙏 Acknowledgements
189207
190208robot.cpp 的设计与实现受益于多个优秀的开源项目:
191209
0 commit comments