機器人系統仿真(十六)——攝像頭和kinect信息仿真以及顯示


參考視頻:【奧特學園】ROS機器人入門課程《ROS理論與實踐》零基礎教程_嗶哩嗶哩_bilibili

參考文檔:http://www.autolabor.com.cn/book/ROSTutorials/

一、攝像頭信息仿真以及顯示

通過 Gazebo 模擬攝像頭傳感器,並在 Rviz 中顯示攝像頭數據。

實現流程:

攝像頭仿真基本流程:

  1. 已經創建完畢的機器人模型,編寫一個單獨的 xacro 文件,為機器人模型添加攝像頭配置;

  2. 將此文件集成進xacro文件;

  3. 啟動 Gazebo,使用 Rviz 顯示攝像頭信息。

1.Gazebo 仿真攝像頭

1.1 新建 Xacro 文件,配置攝像頭傳感器信息

<robot name="my_sensors" xmlns:xacro="http://wiki.ros.org/xacro">
  <!-- 被引用的link -->
  <gazebo reference="camera">
    <!-- 類型設置為 camara -->
    <sensor type="camera" name="camera_node">
      <update_rate>30.0</update_rate> <!-- 更新頻率 -->
      <!-- 攝像頭基本信息設置 -->
      <camera name="head">
        <horizontal_fov>1.3962634</horizontal_fov>
        <image>
          <width>1280</width>
          <height>720</height>
          <format>R8G8B8</format>
        </image>
        <clip>
          <near>0.02</near>
          <far>300</far>
        </clip>
        <noise>
          <type>gaussian</type>
          <mean>0.0</mean>
          <stddev>0.007</stddev>
        </noise>
      </camera>
      <!-- 核心插件 -->
      <plugin name="gazebo_camera" filename="libgazebo_ros_camera.so">
        <alwaysOn>true</alwaysOn>
        <updateRate>0.0</updateRate>
        <cameraName>/camera</cameraName>
        <imageTopicName>image_raw</imageTopicName>
        <cameraInfoTopicName>camera_info</cameraInfoTopicName>
        <frameName>camera</frameName>
        <hackBaseline>0.07</hackBaseline>
        <distortionK1>0.0</distortionK1>
        <distortionK2>0.0</distortionK2>
        <distortionK3>0.0</distortionK3>
        <distortionT1>0.0</distortionT1>
        <distortionT2>0.0</distortionT2>
      </plugin>
    </sensor>
  </gazebo>
</robot>

1.2 xacro 文件集成

將步驟1的 Xacro 文件集成進總的機器人模型文件,代碼示例如下:

<robot name="my_base" xmlns:xacro="http://www.ros.org/wiki/xacro">
    <!--包含慣性矩陣文件-->
    <xacro:include filename="head.xacro" />
    <!--包含底盤、攝像頭與雷達的 xacro 文件-->
    <xacro:include filename="demo05_car_base.urdf.xacro" />
    <xacro:include filename="demo06_car_camera.urdf.xacro" />
    <xacro:include filename="demo07_car_laser.urdf.xacro" />

    <!--運動控制-->
    <xacro:include filename="gazebo/move.xacro" />

    <!--雷達-->
    <xacro:include filename="gazebo/laser.xacro" />
    <!--攝像頭-->
    <xacro:include filename="gazebo/camera.xacro" />


</robot>

1.3啟動仿真環境

啟動 gazebo

cys@ubuntu:~/demo05_ws$ source ./devel/setup.bash
cys@ubuntu:~/demo05_ws$ roslaunch urdf02_gazebo demo03_env.launch 
cys@ubuntu:~/demo05_ws$ source ./devel/setup.bash
cys@ubuntu:~/demo05_ws$ roslaunch urdf02_gazebo demo04_sensor.launch 

2.Rviz 顯示攝像頭數據

執行 gazebo 並啟動 Rviz,在 Rviz 中添加攝像頭組件。

打開新的命令行,更改角速度,轉動攝像頭

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.5" 

二、kinect信息仿真以及顯示

通過 Gazebo 模擬kinect攝像頭,並在 Rviz 中顯示kinect攝像頭數據。

實現流程:

kinect攝像頭仿真基本流程:

  1. 已經創建完畢的機器人模型,編寫一個單獨的 xacro 文件,為機器人模型添加kinect攝像頭配置;

  2. 將此文件集成進xacro文件;

  3. 啟動 Gazebo,使用 Rviz 顯示kinect攝像頭信息。

1.Gazebo仿真Kinect

1.1 新建 Xacro 文件,配置 kinetic傳感器信息

這里,用機器小車 support 作為 kinect link名稱

<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>
1.2 xacro 文件集成

將步驟1的 Xacro 文件集成進總的機器人模型文件,代碼示例如下:

<robot name="my_base" xmlns:xacro="http://www.ros.org/wiki/xacro">
    <!--包含慣性矩陣文件-->
    <xacro:include filename="head.xacro" />
    <!--包含底盤、攝像頭與雷達的 xacro 文件-->
    <xacro:include filename="demo05_car_base.urdf.xacro" />
    <xacro:include filename="demo06_car_camera.urdf.xacro" />
    <xacro:include filename="demo07_car_laser.urdf.xacro" />

    <!--運動控制-->
    <xacro:include filename="gazebo/move.xacro" />

    <!--雷達-->
    <xacro:include filename="gazebo/laser.xacro" />
    <!--攝像頭-->
    <xacro:include filename="gazebo/camera.xacro" />
    <!--kinect-->
    <xacro:include filename="gazebo/kinect.xacro" />


</robot>
1.3啟動仿真環境

啟動 gazebo

cys@ubuntu:~/demo05_ws$ source ./devel/setup.bash
cys@ubuntu:~/demo05_ws$ roslaunch urdf02_gazebo demo03_env.launch 
cys@ubuntu:~/demo05_ws$ source ./devel/setup.bash
cys@ubuntu:~/demo05_ws$ roslaunch urdf02_gazebo demo04_sensor.launch 

2 Rviz 顯示 Kinect 數據

啟動 rviz,添加攝像頭組件查看數據

讓攝像頭轉動

rostopic pub -r 10 /cmd_vel geometry_msgs/Twist "linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.5" 

補充:kinect 點雲數據顯示

在kinect中也可以以點雲的方式顯示感知周圍環境,在 rviz 中操作如下:

問題:在rviz中顯示時錯位。

原因:在kinect中圖像數據與點雲數據使用了兩套坐標系統,且兩套坐標系統位姿並不一致。

解決:

1.在插件中為kinect設置坐標系,修改配置文件的<frameName>標簽內容:

<frameName>support_depth</frameName>

2.發布新設置的坐標系到kinect連桿的坐標變換關系,在啟動rviz的launch中,添加:

<node pkg="tf2_ros" type="static_transform_publisher" name="static_transform_publisher" args="0 0 0 -1.57 0 -1.57 /support /support_depth" />

3.啟動rviz,重新顯示。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM