0 引言
本文将介绍扩散模型算法在Franka机械臂上的部署与应用,包括环境配置、空间鼠标控制操作、数据采集以及数据训练等环节的详细说明。
1 实验条件
电脑配置:拯救者Y7000P笔记本、显卡 4060、CPU 14700
机械臂硬件:Franka机械臂(Franka Research 3)机器人系统版本5.6.0
系统环境:ubuntu20.04、实时内核PREEMPT_RT、anaconda环境(ubuntu22.04也可以)
2 实验环境配置
将diffusion-policy算法部署至franka机械臂上的实验环境包括ubuntu系统与实时内核环境、polymetis环境(基于pytorch的franka实时控制器)和robodiff环境(diffusion-policy模型依赖环境)。
2.1 ubuntu20.04系统与实时内核环境安装
ubuntu20.04系统安装可参考笔者博客。
2.2 polymetis环境安装
polymetis是基于pytorch的franka实时控制器,核心控制franka机械臂依旧依托libfranka底层代码来开发机械臂的接口,能够完成对franka的实时控制策略。polymetis环境安装的步骤如下:
①在终端下通过git方式克隆github远程仓库的源码(一定要通过git的方式将源码拷贝下来)
git clone git@github.com:facebookresearch/fairo
注意:在git克隆的过程中可能出现无法读取远程仓库问题,原因可能是密钥设置不正确。解决方法可以参考其他博客。
②进入fairo/polymetis目录下,通过项目作者提供的环境yml文件配置polymetis环境。
cd fairo/polymetis
conda env create -f ./polymetis/environment.yml
conda activate polymetis-local
③成功创建conda虚拟环境后,在虚拟环境下pip下载polymetis包。
pip install -e ./polymetis
④通过脚本安装libfranka的依赖,这是驱动franka机械臂硬件的关键。但脚本安装下来的libfranka是0.9.0版本的,此版本显然与Franka Research 3(5.6.0)所需版本不匹配,后续将重新安装正确的libfranka 0.13.3版本。
./scripts/build_libfranka.sh
⑤对polymetis项目进行编译,生成可执行文件。
mkdir -p ./polymetis/build
cd ./polymetis/build
cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_FRANKA=[OFF/ON] -DBUILD_TESTS=[OFF/ON] -DBUILD_DOCS=[OFF/ON]
make -j
注意:make-j是可能会出现报错:
libtorch_cpu.so: undefined reference to `iJIT_IsProfilingActive'
libtorch_cpu.so: undefined reference to `iJIT_GetNewMethodID'libtorch_cpu.so: undefined reference to `iJIT_NotifyEvent'
原因可能是pytorch版本与conda版本存在冲突,重新pip安装torch依赖。
pip install --force-reinstall torch==1.13.1 --index-url https://download.pytorch.org/whl/cpu
按照上述①~⑤步后就完成在anaconda下创建了一个polymetis-local虚拟环境,并且下载了需要的依赖。
注意:连接机械臂硬件通过launch_robot.py启动franka控制服务器会出现如下问题:
libfranka: Incompatible library version (server version: x, library version: x)
此问题出现的原因是libfranka的版本与机械臂版本不配对,Franka Research 3(5.6.0)对应是libfranka 0.13.3版本。解决方法重新安装libfranka,步骤如下:
①进入libfranka源码的目录,将0.9.0版本的libfranka删除或者重命名。
/home/xx/fairo/polymetis/polymetis/src/clients/franka_panda_client/third_party
②在third_party文件夹下git克隆libfranka0.13.3版本或在github上手动下载。
git clone --recursive https://github.com/frankaemika/libfranka --branch 0.13.3
③根据如下操作完成libfranka 0.13.3版本安装。
cd libfranka
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF ..
cmake --build .
④成功安装libfranka 0.13.3源码后,重新编译polymetis项目,参考前面的步骤⑤。
2.3 robodiff环境安装
robodiff环境是diffusion-policy项目运行所需要的环境,主要参考github社区diffusion-policy项目的README。非常感谢大佬们的开源。
①克隆或手动下载Diffusion_Policy _vila项目源码。
GitHub - Yingdong-Hu/diffusion_policy_vila: [RSS 2023] Diffusion Policy Visuomotor Policy Learning via Action Diffusion[RSS 2023] Diffusion Policy Visuomotor Policy Learning via Action Diffusion - Yingdong-Hu/diffusion_policy_vilahttps://github.com/Yingdong-Hu/diffusion_policy_vila②安装Mujoco 机器人模拟库所需的依赖。
sudo apt install libosmesa6-dev libgl1-mesa-glx libglfw3 patchelf
③安装realsense的SDK,可参考其他博客。
④根据作者提供的yml文件创建conda虚拟环境并且下载相应的依赖,适用于真实机械臂环境。
conda env create -f conda_environment_real.yaml
⑤安装spacemouse相关依赖。
sudo apt install libspnav-dev spacenavd; sudo systemctl start spacenavd
3 实验操作
实验操作部分将记录笔者和伙伴们在franka硬件平台复现Diffusion-policy模型所完成的实验。
3.1 (实验一)使用polymetis控制器控制franka机械臂
①模拟机械臂平台
进入launch_robot.py文件所在的目录下,打开终端,并进入polymetis-local虚拟环境。
launch_robot.py文件目录:/home/xx/fairo/polymetis/polymetis/python/scripts
在终端内运行python文件,并且添加相关配置文件。运行后,机械臂服务器正常启动,并且会弹出pybullet物理实时模拟平台,franka机械臂模型会出现在界面内。
launch_robot.py robot_client=franka_sim use_real_time=false gui=true
启动模拟机器人服务器后,运行polymetis包含的运动例程,例如执行1_set_ee_pose.py文件。
运动例程所在的路径:
/home/zh/fairo/polymetis/examples
打开终端进入上述路径,运行机器人运动python文件。
python 1_set_ee_pose.py
注意:运行后可能出现port已经被占用的问题,解决方法是释放默认的port(50051)占用。
第一步:找到占用端口的进程ID。
sudo lsof -i :50051
第二步:杀掉占用端口的进程。
sudo kill -9 PID
第三步:如果端口被防火墙占用,可以关闭防火墙。
sudo ufw disable
如果上述方法不行,可以重新启动计算机清除存在的进程占用。
②真实机械臂平台
与上述模拟平台一样,进入launch_robot.py文件所在的目录下,打开终端,并进入polymetis-local虚拟环境。在终端内运行python文件,并且添加相关配置文件。运行后,机械臂服务器正常启动,终端中会显示已经连接。
launch_robot.py robot_client=franka_hardware
启动真实机器人服务器后,运行polymetis包含的运动例程,例如执行1_set_ee_pose.py文件。
运动例程所在的路径:
/home/xx/fairo/polymetis/examples
打开终端进入上述路径,运行机器人运动python文件,机器人开始运动。
python 1_set_ee_pose.py
3.2(实验二)使用spacemouse来控制franka机械臂
实验条件:两台PC电脑,一台必须包含polymetis环境,另一台必须包含robodiff环境。
按照如图关系连接两个PC电脑与franka机械臂控制柜。
①PC电脑一
搭建好硬件平台后,首先在polymetis环境下启动机械臂的服务器。
launch_robot.py robot_client=franka_hardware
然后依旧在polymetis环境下进入scripts_real目录下启动FrankaInterface 服务器。
/home/xx/diffusion_policy_vila/scripts_real
python scripts_real/launch_franka_interface_server.py
②PC电脑二
启动spacemouse控制机械臂相关文件,就能使用空间鼠标来控制机械臂。
python demo_real_franka.py -o data/demo_pusht_real --robot_ip 10.7.5.2
spacemouse操作提醒:
只使用spacemose的遥感旋钮可以实现X Y轴平面下的移动;
长按MENU按钮,能够允许Z轴运动,再遥感旋钮上拉或下拉,控制Z轴方向的运动;
长按EFI按钮,是进行旋转运动,再遥感旋钮可以更改机械臂末端姿态。
3.3(实验三)使用spacemouse来控制franka机械臂采集数据
—待更新