ROS深度相机集成

1 使用带ROS的gazebo深度摄像头

介绍

在本教程中,您将学习如何将gazebo深度摄影机连接到ROS。教程包括三个主要步骤:

  1. 创建一个包括ROS深度相机插件的露台模型
  2. 在gazebo上安装深度摄影机
  3. 在RViz中查看深度摄影机的输出。

这是一个独立的教程;它不使用在其他Gazebo ROS教程中开发的RRBot。它的目的是帮助你在ROS和gazebo上 迅速使用电脑视觉。

先决条件

你应该安装gazebo_ros_pkgs在学习本教程之前。

2 创建一个带有深度相机插件的露台模型

因为Gazebo和ROS是独立的项目,互不依赖。默认情况下,来自gazebo_models存储库(如深度摄影机)的传感器不包括ROS插件。这意味着您必须根据Gazebo模型存储库中的自定义摄影机,然后添加自己的摄影机标记使深度摄影机数据将点云和图像发布到ROS主题。

你应该从gazebo上提供的相机中选择一个景深相机。本教程将使用Microsoft Kinect,但此过程应与列表中其他深度摄影机的过程相同。

首先,获取深度摄影机并修改其名称。我们从gazebo_models你要做的就是下载然后把它打开。

或者,您可以按照model contribution tutorial从头开始制作自己的相机,或者可以克隆gazebo_models从那里复制一个传感器。

无论你得到它,复制kinect文件夹到你的~/.gazebo/models目录。然后,将模型的名称改为有意义的名称,比如kinect_ros。若要更改模型的名称,应更新文件夹名称存储在.config文件,和型号名称model.sdf文件。

现在您需要添加ROS插件来发布深度相机信息并输出到ROS主题。ROS插件列表和示例代码可以在插件教程 .

在本教程中,您将使用通用的“opennikinect”插件。你可以(也应该)将此插件用于Kinect之外的其他类型的深度摄影机(它是一个较旧的插件,因此它保留了原来的名称)。

打开model.sdf新模型目录中的文件。将以下SDFmarkup添加到在结束后立即标记标签:

        
          0.2
          true
          
          0.0
          camera_ir
          /camera/color/image_raw
          /camera/color/camera_info
          /camera/depth/image_raw
          /camera/depth/camera_info
          /camera/depth/points
          camera_link
          0.5
          3.0
          0
          0
          0
          0
          0
          0
          0
          0
          0
          0
        

正如您所看到的,这个插件允许您对如何将信息传递给ROS有很多细粒度的控制。注意以下几点:

  • 这个updateRate参数应设置为0,这将导致plugin以与父SDF相同的速率发布深度信息传感器。如果UpdateRate不是0,它将在父级上执行其他限制sensor的更新率。
  • 主题名称和frameName可以设置为任何您想要的,但是上面显示的主题与常用的dros包发布的默认主题相匹配,例如 openni2_launch。保持主题名称相同有助于在真实和模拟相机之间切换。
  • 这个distortionX参数应符合母相机的标签。如果没有标记,然后对所有distortionX的值取0。
  • pointCloudCutoff PointCloudCutoffMax分别是点的最小和最大距离。超过此距离的点将不显示。在任何一个传感器上都设置了一个附加的限制。

重命名模型后,将上面的代码添加到.sdf文件,并保存了您的更改,您应该准备好了!

3 在gazebo上安装深度摄影机

启用ROS支持的开放式gazebo(例如。roslaunch gazebo_ros empty_world.launch)。使用“插入”面板查找您的“Kinect ROS”模型,并将其插入到世界中。

重要提示:你还应该在场景中添加一些其他对象,否则你的相机可能没有任何东西可以看到!添加一些立方体、球体或其他物体,确保它们位于摄像机的可见范围内,如下面的屏幕截图所示。

ROS深度相机集成_第1张图片

 

4 RViz中的景深摄影机输出

现在相机在gazebo场景中,它应该发布图像和点云到ROS主题。您可以通过在一个新的终端里运行

rostopic list

来检查正在发布的主题。您应该会看到您在SDF插件代码中指定的主题。

你也可以运行RViz(

rosrun rviz rviz

)。首先,在左面板的“全局选项”部分设置RViz固定框架,以匹配您为其设置的值在插件XML代码中。然后,向RViz添加PointCloud2和/或一个image显示。对于图像,请将图像主题设置为在中使用的值标签。对于PointCloud2,将主题设置为在标签。请参阅下面的屏幕截图,以获取与上面示例传感器XML中的值相匹配的示例:

ROS深度相机集成_第2张图片

 

在设置了正确的主题和固定框架后,您应该会从PointCloud2中看到类似于以下内容的内容:

ROS深度相机集成_第3张图片 

 图像显示将显示深度摄影机结果的灰度版本。如果您有Gazebo 8或更新版本,可以将这些RViz结果与Gazebo Topic Visualizer中的depthimage结果进行比较。

故障排除

问题:

rostopic list

不显示相机主题。

解决方案:确保在露台中添加了正确的模型。确保Gazebo模拟正在运行,而不是暂停。检查model.sdf归档并确保标记在文件中的正确位置。在冗长模式下试运行gazebo(

rosrun gazebo_ros gazebo --verbose

)并查看是否有任何有用的警告或错误消息可以帮助查明问题。

问题:ROS主题已经列出,但我在Rviz中没有看到任何内容。

解决方案:确保在露台上有摄像头可以看到的物体。确保在RViz中添加了图像或PointCloud2显示。检查您的图像或PointCloud2显示是否设置为显示正确的主题。检查是否未禁用图像或PointCloud2显示(复选框)。确保RViz固定框架与frameName你在里面指定的标签。确保传感器剪裁参数没有设置为所有点都被剪裁。

你可能感兴趣的:(linux)