ROS综合运动控制:kinect深度相机仿真

综合运动控制:kinect深度相机仿真

kinect:感知障碍物图像和距离信息

(1)新建文件kinect.xacro并通过include标签集成到car小车模型文件中

<xacro:include filename="my_sensors_kinect.urdf.xacro" />

(2)编写xacro文件

  需要修改的地方主要还是gazebo reference和frame name,修改为作用到哪个连杆的名字

<robot name="my_sensors" xmlns:xacro="http://wiki.ros.org/xacro">
    <gazebo reference="kinect link名称">  
      <sensor type="depth" name="camera">
        <always_on>true</always_on>
        <update_rate>20.0</update_rate>
        <camera>
          <horizontal_fov>${60.0*PI/180.0}</horizontal_fov>
          <image>
            <format>R8G8B8</format>
            <width>640</width>
            <height>480</height>
          </image>
          <clip>
            <near>0.05</near>
            <far>8.0</far>
          </clip>
        </camera>
        <plugin name="kinect_camera_controller" filename="libgazebo_ros_openni_kinect.so">
          <cameraName>camera</cameraName>话题命名空间
          <alwaysOn>true</alwaysOn>
          <updateRate>10</updateRate>
          <imageTopicName>rgb/image_raw</imageTopicName>图像信息采集话题
          <depthImageTopicName>depth/image_raw</depthImageTopicName>深度信息采集话题
          <pointCloudTopicName>depth/points</pointCloudTopicName>
          <cameraInfoTopicName>rgb/camera_info</cameraInfoTopicName>
          <depthImageCameraInfoTopicName>depth/camera_info</depthImageCameraInfoTopicName>
          <frameName>kinect link名称</frameName>
          <baseline>0.1</baseline>
          <distortion_k1>0.0</distortion_k1>
          <distortion_k2>0.0</distortion_k2>
          <distortion_k3>0.0</distortion_k3>
          <distortion_t1>0.0</distortion_t1>
          <distortion_t2>0.0</distortion_t2>
          <pointCloudCutoff>0.4</pointCloudCutoff>
        </plugin>
      </sensor>
    </gazebo>
</robot>

(3)roslaunch启动env.launch(gazebo环境)和sensor.launch(rviz环境)即可看到效果

  gazebo中的环境会显示出已经配置过的雷达信号,深度相机信息主要通过rviz查看,和添加普通的camera方法一样,在rviz中添加camera组件
在这里插入图片描述

  与添加查看普通相机不同的是,此时我们的话题里既有普通相机的话题,也有深度相机的话题,我们在这里选择depth相关话题即可查看深度相机的相关信息。

在这里插入图片描述
(4)kinect点云信息显示,在rviz中添加组件pointcloud2并设置topic话题camera/depth/points

在这里插入图片描述

  这时会发现在rviz中点云图像信息显示时错位,应该在前方的点云信息都跑到了上方,很奇怪的状态。这是因为在kinect中图像数据与点云数据使用了两套坐标系统,且两套坐标系统位姿并不一致。

在这里插入图片描述

解决方案:

  本来点云使用的是连杆的坐标系,需要修改一下,这里命名为support_depth

<frameName>support_depth</frameName>

  由于该坐标系在机器人模型配置文件中并不存在,所以需要在启动rviz的launch文件中手动配置静态坐标变换信息.

注意:这里的args参数分别是xyz位置偏移量,zyx角度偏移量和父级坐标系子级坐标系。

<!--添加support到连杆的坐标变换-->
<node pkg="tf2_ros" type="static_transform_publisher" name="static_transform_publisher" args="0 0 0 -1.57 0 -1.57 /support /support_depth"

  保存更改后的相机配置文件和rviz启动的launch文件,重新打开点云插件,即可正常显示点云图像数据如下。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45205599/article/details/129726545
今日推荐