ROS2中配置SolidWorks导出的URDF机器人模型
在机器人开发过程中,使用SolidWorks设计的机械结构可通过插件导出为URDF格式文件,用于ROS2中的仿真与可视化。然而,默认导出的URDF是为ROS1设计的,需进行适配才能在ROS2环境中正常运行。本文介绍如何将SolidWorks生成的URDF模型集成到ROS2项目中,并解决常见问题。
安装SolidWorks to URDF插件
首先从官方渠道下载并安装SolidWorks URDF Exporter插件。安装完成后,在SolidWorks中完成机器人模型的构建,并添加必要的坐标系和关节原点。随后通过菜单栏的工具 > Export as URDF功能导出初始URDF文件。
创建ROS2功能包
在工作空间的src目录下创建一个新的ROS2功能包:
ros2 pkg create my_robot_description --build-type ament_cmake --license Apache-2.0
进入该包,创建以下子目录:
launch:存放启动文件urdf:存放URDF和XACRO文件meshes:存放STL等三维网格文件rviz:存放RViz配置文件
编写Launch启动文件
在launch目录中新建display.launch.py文件,内容如下:
from ament_index_python.packages import get_package_share_path
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.conditions import IfCondition, UnlessCondition
from launch.substitutions import Command, LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.parameter_descriptions import ParameterValue
def generate_launch_description():
pkg_path = get_package_share_path('my_robot_description')
model_path = pkg_path / 'urdf/robot.urdf'
rviz_config_path = pkg_path / 'rviz/config.rviz'
gui = DeclareLaunchArgument(
name='gui',
default_value='true',
choices=['true', 'false'],
description='启用图形化关节控制器'
)
model = DeclareLaunchArgument(
name='model',
default_value=str(model_path),
description='URDF文件路径'
)
rviz_cfg = DeclareLaunchArgument(
name='rvizconfig',
default_value=str(rviz_config_path),
description='RViz配置文件路径'
)
robot_desc = ParameterValue(Command(['xacro ', LaunchConfiguration('model')]), value_type=str)
robot_state_publisher = Node(
package='robot_state_publisher',
executable='robot_state_publisher',
parameters=[{'robot_description': robot_desc}]
)
joint_state_publisher = Node(
package='joint_state_publisher',
executable='joint_state_publisher',
condition=UnlessCondition(LaunchConfiguration('gui'))
)
joint_state_publisher_gui = Node(
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui',
condition=IfCondition(LaunchConfiguration('gui'))
)
rviz = Node(
package='rviz2',
executable='rviz2',
output='screen',
arguments=['-d', LaunchConfiguration('rvizconfig')]
)
return LaunchDescription([
gui,
model,
rviz_cfg,
joint_state_publisher,
joint_state_publisher_gui,
robot_state_publisher,
rviz
])
注意:请根据实际包名替换代码中的my_robot_description。
复制模型资源文件
将SolidWorks导出的URDF文件复制到urdf目录,同时将其依赖的所有STL网格文件放入meshes目录。
修改CMakeLists.txt
确保CMakeLists.txt包含以下安装指令,以便资源文件被正确部署:
install(
DIRECTORY launch meshes urdf rviz
DESTINATION share/${PROJECT_NAME}
)
更新package.xml依赖
为保证功能完整,需在package.xml中添加必要依赖项:
<exec_depend>robot_state_publisher</exec_depend>
<exec_depend>joint_state_publisher_gui</exec_depend>
<exec_depend>rviz2</exec_depend>
<exec_depend>xacro</exec_depend>
配置RViz显示参数
启动RViz2:
ros2 run rviz2 rviz2
在界面中添加RobotModel显示组件,并设置对应的描述参数(如robot_description)。保存配置至rviz/config.rviz文件。
编译与运行
返回工作空间根目录并编译:
colcon build --packages-select my_robot_description
source install/setup.bash
ros2 launch my_robot_description display.launch.py
处理常见错误
若出现类似以下错误:
[rviz_rendering:error] Error retrieving file [package://my_robot_description/meshes/base_link.STL]: Package not found
说明资源路径解析失败。虽然应使用package://协议,但在某些系统中可能因路径未注册而失效。临时解决方案是将URDF中的mesh路径改为绝对路径,例如:
<geometry>
<mesh filename="file:///home/user/ws_ros2/src/my_robot_description/meshes/base_link.STL"/>
</geometry>
更优做法是确认包资源路径已正确安装并被索引,避免硬编码路径。
查看TF树结构
安装tf分析工具:
sudo apt install ros-humble-rqt-tf-tree
运行后查看变换关系:
ros2 run tf2_tools view_frames
生成的frames.pdf将展示当前系统的坐标变换层级。
