在WSL2上搞定Unitree Z1机械臂仿真:从Gazebo图形修复到ROS Noetic完整配置

张开发
2026/4/19 22:03:54 15 分钟阅读

分享文章

在WSL2上搞定Unitree Z1机械臂仿真:从Gazebo图形修复到ROS Noetic完整配置
在WSL2上搞定Unitree Z1机械臂仿真从Gazebo图形修复到ROS Noetic完整配置当你在Windows系统上通过WSL2运行Ubuntu进行机器人开发时是否遇到过Gazebo或RViz窗口一片空白、机械臂模型无法显示的尴尬情况这可能是许多机器人开发者转向WSL2环境时遇到的第一个拦路虎。本文将带你深入解决这个图形显示问题并完整配置Unitree Z1机械臂的仿真环境。1. WSL2图形显示问题的根源与诊断WSL2虽然提供了接近原生Linux的性能但在图形显示方面仍存在一些限制。Gazebo和RViz依赖OpenGL进行3D渲染而WSL2默认的OpenGL实现存在兼容性问题。要确认是否是这个问题可以尝试以下诊断步骤在终端运行glxinfo | grep OpenGL version检查输出中OpenGL版本是否低于3.3尝试运行Gazebo观察是否出现黑屏或模型缺失常见症状包括Gazebo窗口打开但显示空白RViz中机械臂模型无法加载3D视图区域显示异常或闪烁2. 解决WSL2图形显示问题2.1 强制使用软件渲染最直接的解决方案是强制使用CPU进行软件渲染虽然这会牺牲一些性能但能确保图形正常显示export LIBGL_ALWAYS_SOFTWARE1 export LIBGL_ALWAYS_INDIRECT0可以将这两行命令添加到你的~/.bashrc文件中这样每次打开终端都会自动设置。2.2 安装Mesa3D库另一种方法是安装更新的Mesa3D库来改善OpenGL支持sudo apt install mesa-utils libgl1-mesa-glx libgl1-mesa-dri安装完成后运行glxgears测试图形性能。2.3 配置X服务器确保你的Windows系统上安装了合适的X服务器如VcXsrv或X410。配置时需要注意允许公共网络访问禁用访问控制启用OpenGL支持在WSL2中设置DISPLAY环境变量export DISPLAY$(cat /etc/resolv.conf | grep nameserver | awk {print $2}):03. Unitree Z1 SDK环境配置3.1 安装系统依赖首先安装基础依赖包sudo apt update sudo apt install -y \ libboost-all-dev \ libeigen3-dev \ liburdfdom-dev \ cmake \ git \ build-essential创建必要的符号链接sudo ln -s /usr/include/eigen3/Eigen /usr/local/include/Eigen sudo ln -s /usr/include/eigen3/unsupported /usr/local/include/unsupported3.2 安装pybind11git clone https://github.com/pybind/pybind11.git cd pybind11 mkdir build cd build cmake .. -DPYBIND11_TESTOFF make -j$(nproc) sudo make install3.3 安装ROS Noetic MoveItsudo apt install -y \ ros-noetic-moveit-* \ ros-noetic-joint-trajectory-controller \ ros-noetic-trac-ik-kinematics-plugin3.4 安装Pinocchiogit clone --recursive https://github.com/stack-of-tasks/pinocchio cd pinocchio mkdir build cd build cmake .. \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local \ -DBUILD_PYTHON_INTERFACEOFF \ -DBUILD_TESTINGOFF make -j$(nproc) sudo make install配置环境变量将以下内容添加到~/.bashrcexport 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_PATH4. 获取并编译Unitree Z1 SDK4.1 下载SDKgit clone https://github.com/Lya-M1RA/Unitree-Z1_SDK.git --recursiveSDK包含以下主要组件组件功能描述z1_controller直接控制机械臂的源码z1_sdk控制机械臂的接口unitree_ros机械臂仿真文件z1_rosROS Noetic MoveIt支持4.2 编译z1_controllercd Unitree-Z1_SDK/z1_controller mkdir build cd build cmake .. make4.3 编译z1_sdkcd ../z1_sdk mkdir build cd build cmake .. make4.4 安装unitree_roscd ../../z1_ws catkin_make source devel/setup.bashARM64架构特殊处理cd src/unitree_ros/unitree_legged_control/lib rm libunitree_joint_control_tool.so mv libunitree_joint_control_tool_arm64.so libunitree_joint_control_tool.so4.5 安装z1_roscd ../../../z1_moveit_ws rosdep install --from-paths src --ignore-src -yr --rosdistro noetic catkin_make --pkg unitree_legged_msgs catkin_make source devel/setup.bash同样处理ARM64架构cd src/z1_ros/unitree_ros/unitree_legged_control/lib rm libunitree_joint_control_tool.so mv libunitree_joint_control_tool_arm64.so libunitree_joint_control_tool.so5. 运行Unitree Z1仿真5.1 启动Gazebo仿真首先确保设置了软件渲染export LIBGL_ALWAYS_SOFTWARE1 export LIBGL_ALWAYS_INDIRECT0启动Gazeboroslaunch unitree_gazebo z1.launch如果不使用末端夹爪roslaunch unitree_gazebo z1.launch UnitreeGripperYN:false5.2 启动虚拟控制器在新终端中cd Unitree-Z1_SDK/z1_controller/build ./sim_ctrl5.3 运行SDK演示在另一个新终端中cd Unitree-Z1_SDK/z1_sdk/build ./highcmd_basic此时你应该能在Gazebo窗口中看到机械臂开始运动。6. 在MoveIt中使用机械臂6.1 启动MoveIt对于仿真环境roslaunch z1_bringup sim_arm.launch rviz:true对于实机连接roslaunch z1_bringup real_arm.launch rviz:true6.2 启动控制器对于仿真环境cd Unitree-Z1_SDK/z1_controller/build ./sim_ctrl对于实机./z1_ctrl现在你可以在RViz中使用MoveIt进行路径规划并控制机械臂运动了。

更多文章