zoukankan      html  css  js  c++  java
  • 机器人系统仿真(十六)——摄像头和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,重新显示。

     

  • 相关阅读:
    Asp.Net Core使用Nginx实现反向代理
    在Liunx上搭建FTP并配置用户权限
    Asp.Net Core 使用Docker进行容器化部署(二)使用Nginx进行反向代理
    Asp.Net Core 使用Docker进行容器化部署(一)
    .Net Core On Liunx 环境搭建之 Docker 容器和Nginx
    .Net Core On Liunx 环境搭建之安装Mysql8
    .NET Core On Liunx环境搭建之MongoDB
    canvas图像处理汇总
    mysql数据库高并发处理
    nginx 重发机制导致的重复扣款问题
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/15062299.html
Copyright © 2011-2022 走看看