首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gazebo模拟上投影摄像机传感器上可见的线激光器

在Gazebo模拟上投影摄像机传感器上可见的线激光器
EN

Stack Overflow用户
提问于 2020-08-13 18:41:23
回答 3查看 822关注 0票数 3

我正在尝试创建一个单线激光传感器来投射到一个物体中,并且能够在Gazebo模拟环境下通过摄像机图像将激光可视化,但我无法使它工作。

我在互联网上找到的唯一例子是Gazebo上的,但不幸的是,它没有工作,甚至没有生成一些错误日志。有没有人已经为Gazebo制作了一台线上可见的激光?

下面是上面链接上的例子。

代码语言:javascript
复制
    <gazebo reference="your_link">
        <projector name="projector_wg6802418">
            <pose>0 0 0 0 0 ${pi/2}</pose>
            <texture>your_img.png</texture>
            <fov>0.5</fov>
            <near_clip>1</near_clip>
            <far_clip>10</far_clip>
         </projector>
    </gazebo>
    <gazebo>
         <plugin name="projector" filename="libgazebo_ros_projector.so">
             <projector>projector_wg6802418</projector>
             <alwaysOn>true</alwaysOn>
             <updateRate>10.0</updateRate>
             <!-- Apparently the 2 lines below does not affect anything -->
             <textureName></textureName>
             <filterTextureName></filterTextureName>
             <!-- end -->
             <textureTopicName>/projector/image</textureTopicName>
             <projectorTopicName>/projector/projector</projectorTopicName>
         </plugin>
    </gazebo>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-19 17:15:37

我想办法解决这个问题。

我正在使用一个叫投影的凉亭传感器作为下面的代码,但是当你调用纹理时,你必须将它添加到凉亭的根文件中。当我使用Gazebo 7时,我创建了一个纹理,并将它移动到文件夹/usr/share/gazebo-7/media/materials/textures中,它可以正常工作。

我能够投射在物体表面的纹理,并能够看到这种纹理投射在相机传感器。

代码语言:javascript
复制
    <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>
票数 0
EN

Stack Overflow用户

发布于 2020-08-18 15:17:05

也许您应该尝试添加一个新的连接并链接到您的URDF文件,如这里所解释的gzplugins。之后,您必须将插件添加到gazebo文件中,以便它可以导入URDF和xacro文件。

插件:

代码语言:javascript
复制
  <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>

凉亭档案:

代码语言:javascript
复制
<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教程所提到的,在扫描区域内可以看到半透明的激光射线。

不知道您是否希望测量距离,但是如果您要测量距离,如果障碍物在激光视场前面,您应该在ranges[]数组的LaserScan中打印中间值,如下所示:

代码语言:javascript
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2021-04-18 13:28:15

在/usr/share/ gazebo -11/ world中有一个projector.world gazebo world文件,它显示了所有内容。

有趣的是,投影是为物体的“两边”工作的,而不仅仅是在投影仪的一侧。

为了创建一个“线性激光”(我的意思是,它创建了一条普通的,而不是一条直线),我制作了一个大小为1024x1024的黑色png图像,上面有1像素高的水平红线。我把它命名为"red_line.png“,并放入red_line.png中。

事实上,红线是垂直的露台世界,但投影机可以滚动。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63401355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档