一、问题描述
运行kinetc_v2包,显示模型节点
roslaunch kinect_v2 display.launch
报错:
问题1:无法找到 robot_state_publishe
问题2:URDF 文件中存在未定义的链接
Rviz显示模型失败界面如下:
二、问题1解决
1.确保 robot_state_publisher
包已安装
使用以下命令确保 robot_state_publisher 包已安装:
sudo apt-get install ros-noetic-robot-state-publisher
发现机器人状态发布这个包是存在的,还是存在报错1:[robot_state_publisher/state_publisher]: Cannot locate node of type
2.确保 state_publisher
节点路径正确
使用以下命令来检查:
ls -l /opt/ros/noetic/lib/robot_state_publisher/
3.检查节点路径执行权限
使用以下命令来检查:
sudo chmod +x /opt/ros/noetic/lib/robot_state_publisher/state_publisher
2.3运行结果:
user@user-virtual-machine:~/桌面$ ls -l /opt/ros/noetic/lib/robot_state_publisher/
总用量 48
user@user-virtual-machine:~/桌面$ sudo chmod +x /opt/ros/noetic/lib/robot_state_publisher/state_publisher
chmod: 无法访问'/opt/ros/noetic/lib/robot_state_publisher/state_publisher':
没有那个文件或目录
分析:/opt/ros/noetic/lib/robot_state_publisher/
目录下确实存在一个可执行文件 robot_state_publisher
,但没有找到 state_publisher
。
这表明在 Noetic 版本中,robot_state_publisher
节点的名称可能已经改变或整合到了一个单一的可执行文件中。
原因:在 ROS Noetic 中,robot_state_publisher
节点通常直接使用 robot_state_publisher
而不是 state_publisher
。
因此,需要在 display.launch
文件中更新节点的类型。
4.在 display.launch
文件中更新节点的类型
打开 display.launch
文件,找到启动 robot_state_publisher
节点的部分,确保使用正确的节点名称
修改前第16到20行代码:
<node
name="robot_state_publisher"
pkg="robot_state_publisher"
type="state_publisher" />
<node
修改后第16到20行代码
<node
name="robot_state_publisher"
pkg="robot_state_publisher"
type="robot_state_publisher" />
<node
5.重新编译和运行
保存修改后的 display.launch
文件。重新编译工作空间,问题1得到解决。
三、问题2解决
URDF 文件中存在未定义的链接 world
。这个错误导致 robot_state_publisher
节点无法正确构建机器人模型的树结构,从而导致节点启动失败
1.修改 URDF 文件
打开 kinect_v2_standalong.urdf.xacro
文件,确保所有链接和关节都已正确定义。特别是确保 world
链接存在
修改前:
<?xml version="1.0"?>
<robot name="kinect_v2_standalong" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find kinect_v2)/urdf/kinect_v2.urdf.xacro" />
<!--link name="root"/1.57-->
<xacro:kinect_v2 parent="world">
<origin xyz="0.4 0 1.57"
rpy="0 1.57 0" />
</xacro:kinect_v2>
</robot>
问题在于 world
链接没有被正确定义。 URDF 文件中,使用了 parent="world"
,但没有定义 world
链接
解决方法:
在 URDF 文件中添加一个 world
链接。修改 kinect_v2_standalong.urdf.xacro
文件,确保 world
链接存在
修改后:
<?xml version="1.0"?>
<robot name="kinect_v2_standalong" xmlns:xacro="http://ros.org/wiki/xacro">
<link name="world" />
<xacro:include filename="$(find kinect_v2)/urdf/kinect_v2.urdf.xacro" />
<xacro:kinect_v2 parent="world">
<origin xyz="0.4 0 1.57" rpy="0 1.57 0" />
</xacro:kinect_v2>
</robot>
2.保存后重新编译和运行
roslaunch kinect_v2 display.launch
四、Rviz与Gazebo中显示结果
五、写在最后
第一次写博客,用于记录学习Ros机器人过程中遇到的问题,便于回头再看,技术萌新水平有限,欢迎交流。