在凉亭模拟中投射在相机传感器上可见的线激光

问题描述

我正在尝试创建一个单线激光传感器以投射到物体中,并能够在凉亭模拟环境中在摄像机图像上可视化激光,但是我无法使其工作。

我在互联网上找到的唯一示例是凉亭答案上的this,但不幸的是,它无法正常工作,甚至无法生成一些错误日志。是否有人已经在凉亭的相机图像上显示了行激光?

下面是在上面的链接中找到的示例。

SELECT COUNT(DISTINCT t.user_id)
FROM transactions t JOIN
     object_info oi
     ON t.object_id = oi.object_id
WHERE oi.object_name = 'chair';

解决方法

也许您应该尝试做的就是添加一个新的关节并链接到您的URDF文件,如此处http://gazebosim.org/tutorials?tut=ros_gzplugins所述。 之后,您必须将插件添加到凉亭文件中,以便它可以导入URDF和xacro文件。

插件:

  <joint name="hokuyo_joint" type="fixed">
    <axis xyz="0 1 0" />
    <origin xyz="0 0 ${height3 - axel_offset/2}" rpy="0 0 0"/>
    <parent link="link3"/>
    <child link="hokuyo_link"/>
  </joint>

  <!-- Hokuyo Laser -->
  <link name="hokuyo_link">
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
    <box size="0.1 0.1 0.1"/>
      </geometry>
    </collision>

凉亭文件:

<gazebo reference="hokuyo_link">
    <sensor type="gpu_ray" name="head_hokuyo_sensor">
      <pose>0 0 0 0 0 0</pose>
      <visualize>false</visualize>
      <update_rate>40</update_rate>
      <ray>
        <scan>
          <horizontal>
            <samples>720</samples>
            <resolution>1</resolution>
            <min_angle>-1.570796</min_angle>
            <max_angle>1.570796</max_angle>
          </horizontal>
        </scan>
        <range>
          <min>0.10</min>
          <max>30.0</max>
          <resolution>0.01</resolution>
        </range>
        <noise>
          <type>gaussian</type>
          <!-- Noise parameters based on published spec for Hokuyo laser
               achieving "+-30mm" accuracy at range < 10m.  A mean of 0.0m and
               stddev of 0.01m will put 99.7% of samples within 0.03m of the true
               reading. -->
          <mean>0.0</mean>
          <stddev>0.01</stddev>
        </noise>
      </ray>
      <plugin name="gazebo_ros_head_hokuyo_controller" filename="libgazebo_ros_gpu_laser.so">
        <topicName>/rrbot/laser/scan</topicName>
        <frameName>hokuyo_link</frameName>
      </plugin>
    </sensor>
  </gazebo>

您可以根据需要更改。 至于标签,如真则是“半透明的激光射线在扫描区域内可见”,如Gazebo教程所述。

不知道是否要测量距离,但是如果要测量,并且障碍物在激光视场前方,则应在LaserScan中打印range []数组的中间值,如下所示:

from sensor_msgs.msg import LaserScan

def callback(data):

   distance = data.ranges[360]
   print(distance)

def listener():

   rospy.init_node(node_nome)
   rospy.Subscriber('/scan',callback)
   rospy.spin()

if __name__ == '__main__':
   listener()
,

我找到了一种解决方法。

我正在使用称为 projection 的凉亭传感器,如下所示,但是调用纹理时,必须将其添加到凉亭根文件中。在使用Gazebo 7的过程中,我创建了一个纹理并将其移至文件夹 / usr / share / gazebo-7 / media / materials / textures ,它可以正常工作。

我能够在对象表面上投影纹理,并且能够看到在相机传感器上投影的纹理。

    <gazebo reference="projector_sensor_link">
        <!--sensor type="projector" name="projector_tester"-->
        <projector name="projector_test">
            <pose>0 0 0 0 0 0</pose>
            <texture>your_texture.png</texture>
            <fov>${fov}</fov>
            <near_clip>0.1</near_clip>
            <far_clip>10</far_clip>
        </projector>
    </gazebo>
,

/usr/share/gazebo-11/worlds 中有一个projector.world Gazebo 世界文件,它显示了一切。

有趣的是,投影适用于物体的“两侧”,而不仅仅是投影仪的一侧。

为了创建“线性激光”(我的意思是,它创建的是一个平面,而不是一条线),我制作了一个大小为 1024x1024 的黑色 png 图像,上面有一条 1 像素高度的水平红线。 我将它命名为“red_line.png”并放入/usr/share/gazebo-11/media/materials/textures。

enter image description here

其实凉亭世界里的红线是垂直的,但是投影仪是可以滚动的。

您可以在截图中看到相机屏幕上可见红线。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...