Unitree Z1 机械臂 SDK 使用方法整理

Author: Mira Yang
Last update: 2024/03/05


当前存在的问题

  • (Not Critical)Gazebo与Moveit(RViz)等程序似乎在WSL2中运行的Ubuntu上存在图形错误,这应该是由于使用GPU时WSL使用的OpenGL版本过旧导致的。详见:Unitree Z1 机械臂 SDK 使用指南

1. 引言

(待完善……)

2. 安装依赖

  • 首先安装libboost-all-devlibeigen3-devliburdfdom-dev
    sudo apt install -y libboost-all-dev libeigen3-dev liburdfdom-dev
    sudo ln -s /usr/include/eigen3/Eigen /usr/local/include/Eigen
    sudo ln -s /usr/include/eigen3/unsupported /usr/local/include/unsupported
    
  • 接着安装pybind11
    # Install pybind11
    git clone https://github.com/pybind/pybind11.git
    cd pybind11
    mkdir build && cd build
    cmake .. -DPYBIND11_TEST=OFF
    make -j
    sudo make install
    
  • 确保系统已安装moveit
    sudo apt install -y ros-noetic-moveit-*
    sudo apt install -y ros-noetic-joint-trajectory-controller ros-noetic-trac-ik-kinematics-plugin
    
  • 再安装pinocchio
    # Install pinocchio
    git clone --recursive https://github.com/stack-of-tasks/pinocchio
    cd pinocchio && mkdir build && cd build
    cmake .. \
    		-DCMAKE_BUILD_TYPE=Release \
    		-DCMAKE_INSTALL_PREFIX=/usr/local \
    		-DBUILD_PYTHON_INTERFACE=OFF \
    		-DBUILD_TESTING=OFF 
    
    make
    sudo make install
    
    配置PATH,将下面三行加入~/.bashrc
    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    export CMAKE_PREFIX_PATH=/usr/local:$CMAKE_PREFIX_PATH
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    

3. 下载SDK并编译

  • 首先下载所有的SDK,我已将相关仓库整合到个人GitHub仓库中方便下载。

    git clone https://github.com/Lya-M1RA/Unitree-Z1_SDK.git --recursive
    

    其整合了相关的四个仓库:

    • z1_controller 存储着直接控制机械臂的源码。
    • z1_sdk 包含了用于控制机械臂的一些接口,用户在创建自己的程序使用z1机械臂时需要包含该文件夹。
    • unitree_ros 用于机械臂仿真,其中包含了宇树四足产品Go1, A1, Aliengo, Laikago和机械臂产品Z1的仿真文件。
    • z1_ros(包含unitree_ros), 提供noetic moveit1支持
    Unitree-Z1_SDK/
    ├── z1_controller        # 存储着直接控制机械臂的源码
    ├── z1_moveit_ws         # 存放在z1_ros的工作空间
    │   └── src
    │       └── z1_ros       # 提供ROS Noetic Moveit1支持
    ├── z1_sdk               # 包含了用于控制机械臂的一些接口
    └── z1_ws                # 存放unitree_ros的工作空间
    	└── src
        	└── unitree_ros  # 用于机械臂仿真 (Gazebo)
    
    • 需要注意的是,关于ROS的两个包z1_rosunitree_ros存在冲突,不能放入同一个ROS工作空间中一起编译。
    • 并且注意z1_ros中也包含z1_controllerz1_sdk,提供的接口可以直接发送UDP结构体进行通信,与上述 z1_sdkz1_controller 不兼容也不是相同的内容。
  • 编译z1_controller

    cd z1_controller
    mkdir build && cd build
    cmake ..
    make
    
  • 编译z1_sdk

    cd z1_sdk
    mkdir build && cd build
    cmake ..
    make
    
  • 安装unitree_ros

    cd z1_ws 
    catkin_make 
    # 使用前执行source
    source devel/setup.bash
    

    注意如果平台为ARM64架构,则需要在./src/unitree_ros/unitree_legged_control/lib中用libunitree_joint_control_tool_arm64.so替换libunitree_joint_control_tool.so,即删去后者并将前者重命名为后者。

  • 配置并安装z1_ros

    cd z1_moveit_ws
    # 使用rosdep安装所需依赖
    rosdep install --from-paths src --ignore-src -yr --rosdistro noetic
    # 先编译 unitree_legged_msgs
    catkin_make --pkg unitree_legged_msgs
    catkin_make
    # 使用前执行source
    source devel/setup.bash
    

    类似的,注意如果平台为ARM64架构,则需要在./src/z1_ros/unitree_ros/unitree_legged_control/lib中用libunitree_joint_control_tool_arm64.so替换libunitree_joint_control_tool.so,即删去后者并将前者重命名为后者。

4. 在ROS仿真(Gazebo)中使用机械臂

请注意你使用Ubuntu系统的环境,如果你在Windows上通过WSL2运行Ubuntu,请阅读这一部分。
Gazebo与Moveit(在RViz显示中)等程序在WSL2中运行的Ubuntu上可能会出现图形错误,具体表现为在Gazebo或RViz窗口中机械臂的模型不显示等。
这似乎是由于使用GPU时WSL使用的OpenGL版本过旧导致的,将程序转为纯CPU运行可以暂时解决这个问题。参考:Robot meshes not visible in rviz [Windows11, WSL2]
具体方法为在运行Gazebo或Moveit前在Terminal中执行export: LIBGL_ALWAYS_SOFTWARE=1 LIBGL_ALWAYS_INDIRECT=0

  • 首先启动Gazebo中的仿真机械臂。

    roslaunch unitree_gazebo z1.launch
    # 如果不使用末端夹爪,请使用下面的这行
    roslaunch unitree_gazebo z1.launch UnitreeGripperYN:=false
    

    请添加图片描述
    你应当能够看到像上面图片一样的界面。

  • 接着在一个新开的Termial会话中启动机械臂的虚拟控制器。

    cd z1_controller/build
    ./sim_ctrl
    
  • 最后在一个新开的Termial会话运行SDK中的demo,你应该能看到Gazebo窗口中的机械臂运动。

    cd z1_sdk/build
    ./highcmd_basic
    

    请添加图片描述

(待完善……)

5. 机械臂实机连接

(待完善……)

6. 在Moveit中使用机械臂

  • 首先启动moveit

    # 如果使用实机,运行下面这行
    roslaunch z1_bringup real_arm.launch rviz:=true
    # 如果使用Gazebo仿真机械臂,运行下面这行
    roslaunch z1_bringup sim_arm.launch rviz:=true
    

    上面的第一条指令会启动Moveit并打开RViz,如果使用第二条指令,则会额外启动Gazebo来提供仿真环境中的机械臂。

  • 接着启动机械臂控制器程序。

    cd z1_controller/build
    # 如果使用实机,运行下面这行
    ./z1_ctrl
    # 如果使用Gazebo仿真机械臂,运行下面这行
    ./sim_ctrl
    
  • 这样就可以使用Moveit来规划机械臂路径并控制机械臂了。下图是一个在Moveit中手动指定机械臂末端位置并控制机械臂运动的展示。
    请添加图片描述

(待完善……)

7. 自定义程序使用SDK接口控制机械臂

(待完善……)

  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要绘制六自由度机械臂的轨迹曲线,需要先确定机械臂的运动学模型和控制算法。这里提供一个简单的示例,使用MATLAB软件绘制直线轨迹。 1. 定义机械臂运动学模型 假设机械臂末端执行器的位置由三个坐标(x,y,z)表示,机械臂的关节角度分别为θ1,θ2,θ3,θ4,θ5,θ6,那么机械臂的正运动学模型可以表示为: ``` T06 = T01 * T12 * T23 * T34 * T45 * T56 ``` 其中,T01,T12,T23,T34,T45,T56分别表示机械臂各个连杆的变换矩阵,可以根据机械结构和几何关系计算得出。 2. 实现控制算法 在这个示例中,我们将采用简单的直线轨迹规划算法。假设机械臂的起始点为(x0,y0,z0),终点为(x1,y1,z1),那么我们可以将轨迹规划为多个线段,每个线段的起点和终点分别为: ``` (xi-1, yi-1, zi-1) -> (xi, yi, zi) ``` 对于每个线段,我们可以计算出机械臂末端执行器的位姿,然后通过逆运动学算法计算出机械臂的关节角度。 3. 绘制轨迹曲线 在MATLAB中,可以使用plot3函数绘制三维曲线。我们可以将机械臂末端执行器的位置作为数据点,然后将所有数据点连接起来,形成轨迹曲线。示例代码如下: ``` % 机械臂的起始点和终点 start_point = [x0; y0; z0]; end_point = [x1; y1; z1]; % 轨迹规划 trajectory = [start_point, point1, point2, ..., end_point]; % 计算机械臂关节角度 theta1 = ...; theta2 = ...; theta3 = ...; theta4 = ...; theta5 = ...; theta6 = ...; % 绘制轨迹曲线 plot3(trajectory(1,:), trajectory(2,:), trajectory(3,:)); ``` 注意,这里的逆运动学算法和轨迹规划算法需要根据具体的机械臂结构和运动要求进行设计和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值