🎮 模型部署
1. AGX ORIN运行环境配置
- 首先检查上位机AGX是否已经安装
py310kuavomimc
虚拟环境,如果可以source ~/py310kuavomimic/bin/activate
,则已安装 pip show lerobot
和pip show kuavo
检查是否有输出,有则已安装依赖- 终端输入
python
回车,输入import torch;torch.cuda.is_available()
,如果结果是true则安装arm版本已torch已经安装 source ~/kuavo-il-opensource/kuavo/kuavo_3deploy/utils/kuavo_ws/devel/setup.bash
,如果成功则已编译消息。如果没有这个文件夹,可以source~/kuavobrain/devel/setup.bash
。如果都没有,请把下位机的相关的kuavo_msgs
包拷贝到上位机编译。 如果以上环境缺失,可以根据以下方法安装:
# 创建虚拟环境
cd ~
python3.10 -m venv py310kuavomimic
source ~/py310kuavomimic/bin/activate
# 安装依赖
git clone https://gitee.com/leju-robot/kuavo-il-opensource.git
cd kuavo-il-opensource
pip install -e lerobot
pip install -e kuavo
# 替换arm版本torch(来源: https://pypi.jetson-ai-lab.dev/jp5/cu114, 挂梯子更快)
cd ~
wget https://pypi.jetson-ai-lab.dev/jp5/cu114/+f/8b3/cd6e6090269bd/torch-2.2.0-cp310-cp310-linux_aarch64.whl#sha256=8b3cd6e6090269bd5f0ed3e1f7412f8616097b3493a08e1955b3d5f7f3481a44
wget https://pypi.jetson-ai-lab.dev/jp5/cu114/+f/a23/9d8b8b13c337e/torchvision-0.17.2+c1d70fe-cp310-cp310-linux_aarch64.whl#sha256=a239d8b8b13c337e742124669438e4152b4ead04c72486db330141b312404e86
如果上面两个连接失效,可以从以下地址下载:http://120.55.169.67/downloads/
wget http://120.55.169.67/downloads/torch-2.2.0-cp310-cp310-linux_aarch64.whl
wget http://120.55.169.67/downloads/torchvision-0.17.2+c1d70fe-cp310-cp310-linux_aarch64.whl
如果太慢,可以从以下地址下载:
curl -o torchvision-0.17.2%2Bc1d70fe-cp310-cp310-linux_aarch64.whl "https://kuavo.ks3-cn-shanghai.ksyuncs.com/datahub/aarch_torch/torchvision-0.17.2%2Bc1d70fe-cp310-cp310-linux_aarch64.whl?AccessKeyId=TEMPb44a9a1HuBH0hYUBMuxcT96mUmQ7%2FD7eyBdpYJSfZpWiP9hqT3t3WVEi9bHbUjxPBr0rYfjzvbegtzdSd7%2BBAXe%2B6myw5n2FeB6evorDqjsn1XxFOg%2BbGQ9vogizdonKYSBUOrEwq9a0r79jX%2BUpOv1oQg%3D%3D&Expires=3902114989&Signature=tYXMJJMDKQ%2BfqAY73i4jHIfw%2B6o%3D"
curl -o torch-2.2.0-cp310-cp310-linux_aarch64.whl "https://kuavo.ks3-cn-shanghai.ksyuncs.com/datahub/aarch_torch/torch-2.2.0-cp310-cp310-linux_aarch64.whl?AccessKeyId=TEMPb44a9a1HuBH0hYUBMuxcT96mUmQ7%2FD7eyBdpYJSfZpWiP9hqT3t3WVEi9bHbUjxPBr0rYfjzvbegtzdSd7%2BBAXe%2B6myw5n2FeB6evorDqjsn1Xym1b6PvXWZhOrskAmexxsUAAkqLx5l%2F73Ikb4takUi1g%3D%3D&Expires=3902115231&Signature=eYdanbb4KtP00eDvYLXAabhaF8M%3D"
pip install torch-2.2.0-cp310-cp310-linux_aarch64.whl torchvision-0.17.2+c1d70fe-cp310-cp310-linux_aarch64.whl
# 安装完终端输入python,import torch;torch.cuda.is_available(),如果结果是true则安装arm版本torch成功
# 编译消息类型
cd ~/kuavo-il-opensource/kuavo/kuavo_3deploy/utils/kuavo_ws/
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 -DCMAKE_POLICY_VERSION_MINIMUM=3.5
source ~/py310kuavomimic/bin/activate
source ~/kuavo-il-opensource/kuavo/kuavo_3deploy/utils/kuavo_ws/devel/setup.bash
# 其他工具
sudo apt install direnv # 可以在项目目录下激活环境变量或者加载其他配置
部署配置
注
:若未采集头部关节信息,尽量保证头部与头部摄像机视角与采集数据时一致(头部关节和机器人站位)。
Zed
: 如果使用Zed相机,将head_cam_h: &head_cam_h_obs ["/cam_h/color/image_raw/compressed", "CompressedImage", 30, [640, 480]]
修改为:head_cam_l: &head_cam_h_obs ["/zedm/zed_node/left/image_rect_color/compressed", "CompressedImage", 30, [640, 480]]
配置部署参数 (kuavo/kuavo_3deploy/resources/deploy_config.yaml
):
deploy_config.yaml(kuavo/kuavo_3deploy/resources/deploy_config.yaml), 与数据转换的配置文件对应
- policy:
act
- ckpt_path:
pretrained_model
所在文件路径 - which_arm:
left
orright
orboth
- eef_type:
dex_hand
orleju_claw
- frequency:
10
or30
or ..., 这里与数据转换时候train_hz
对齐 - go_bag_path: 录制到达工作位置的bag,起始为0位,结束为数据集开始的位置
### ATTENTION: 根据模型训练的配置修改以下参数
policy: "act" # 策略类型
ckpt_path: /home/leju_kuavo/model/Task26_waic_dex/model_preview # 模型路径
which_arm: "both" # 使用手臂:left/right/both
eef_type: "dex_hand" # 末端执行器:dex_hand/leju_claw
frequency: 10 # 训练时采样的频率,默认是10hz(相机raw数据是30hz, 训练时采样频率是10hz)
go_bag_path: "/home/leju_kuavo/kuavo_il/go_final.bag" # 用数采平台采集数据时录制的到达工作位置的bag包,即到达数据集开始位置的包
use_temporal_ensembler: True # 是否使用时域集成,用于平滑轨迹,但是轨迹输出频率会降低。若速度慢可以设置为False但是牺牲平滑度。
### ATTENTION: 灵巧手通常视为二值(抓/放),若需测试全自由度可将qiangnao_slice部分修改为left: [0, 6], right: [6, 12]
kuavo_arm_of_sensors_data_raw_slice: ### len(/sensors_data_raw.joint_data.joint_q) == 28,
left: [12, 19] # [12, 19]是左臂7个关节,
right: [19, 26] # [19, 26]是右臂
qiangnao_slice: ### len(/dexhand/state.position) == 12, 左右手各6个关节
left: [0, 1] # [0, 1]是左手指第一个关节
right: [6, 7] # [6, 7]指右手指第一个关节
leju_claw_slice: ### len(/leju_claw_state.position) == 2, 左右夹爪各1个关节
left: [0, 1] # [0, 1]是左手夹爪
right: [1, 2] # [1, 2]指右手夹爪- policy:
example.py(kuavo/kuavo_3deploy/example/example.py)
arm.kuavo_interface.control_head(yaw=-40, pitch=0)
, 头部控制,尽可能保证头部姿态与数据采集时相同- 任务设置
task = "go_run" # go_run, here_run, back_to_zero
task_map = {
"go_run": arm.go_run, # 到达工作位置直接运行模型
"here_run": arm.here_run, # 从go_bag的最后一帧状态开始运行
"back_to_zero": arm.back_to_zero, # 中断模型推理后,倒放bag包回到0位
"run": arm.run, # 从当前位置直接运行模型
"go": arm.go # 到达工作位置
}运行下位机程序使机器人站立(命令行启动或者遥控器启动都可以)
启动相机节点 上位机AGX终端执行:
```bash
cd ~/kuavo_data_pilot/src/kuavo_data_pilot_bin/scripts/
./start_camera.sh
```另开终端运行
example.py
(建议初次使用调试运行,并查看模型输出关节角度是否合理,以免出现问题)source ~/py310kuavomimic/bin/activate
source ~/kuavo-il-opensource/kuavo/kuavo_3deploy/utils/kuavo_ws/devel/setup.bash
python kuavo/kuavo_3deploy/examples/example.py --task go
python kuavo/kuavo_3deploy/examples/example.py --task run任务类型 说明 go
到达工作位置 run
从当前位置直接运行模型 go_run
到达工作位置直接运行模型 here_run
从go_bag的最后一帧状态开始运行 back_to_zero
中断模型推理后,先插值回bag最后一帧的位置,然后倒放bag包回到0位
常见问题
1. 问题描述
若模型部署运行一段时间后终端出现:
ERROR: 执行任务 run 时发生错误:传感器间未同步: 时间戳array:
2. 分析解决
打开~/kuavo-il-opensource/sync_time_according_to_master.sh
先按注释在本地机器上生成SSH密钥和将本地公钥复制到服务器的authorized_keys文件,然后执行此脚本。