ROS Noetic20.04 Rviz与Gazebo中打开kinect相机模型失败解决方法

一、问题描述

运行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机器人过程中遇到的问题,便于回头再看,技术萌新水平有限,欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值