我正在尝试创建一个单线激光传感器来投射到一个物体中,并且能够在Gazebo模拟环境下通过摄像机图像将激光可视化,但我无法使它工作。
我在互联网上找到的唯一例子是Gazebo上的这,但不幸的是,它没有工作,甚至没有生成一些错误日志。有没有人已经为Gazebo制作了一台线上可见的激光?
下面是上面链接上的例子。
<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>发布于 2020-08-19 17:15:37
我想办法解决这个问题。
我正在使用一个叫投影的凉亭传感器作为下面的代码,但是当你调用纹理时,你必须将它添加到凉亭的根文件中。当我使用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>发布于 2020-08-18 15:17:05
也许您应该尝试添加一个新的连接并链接到您的URDF文件,如这里所解释的gzplugins。之后,您必须将插件添加到gazebo文件中,以便它可以导入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教程所提到的,在扫描区域内可以看到半透明的激光射线。
不知道您是否希望测量距离,但是如果您要测量距离,如果障碍物在激光视场前面,您应该在ranges[]数组的LaserScan中打印中间值,如下所示:
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()发布于 2021-04-18 13:28:15
在/usr/share/ gazebo -11/ world中有一个projector.world gazebo world文件,它显示了所有内容。
有趣的是,投影是为物体的“两边”工作的,而不仅仅是在投影仪的一侧。
为了创建一个“线性激光”(我的意思是,它创建了一条普通的,而不是一条直线),我制作了一个大小为1024x1024的黑色png图像,上面有1像素高的水平红线。我把它命名为"red_line.png“,并放入red_line.png中。

事实上,红线是垂直的露台世界,但投影机可以滚动。
你可以在屏幕截图上看到红线在相机的屏幕上可见。
https://stackoverflow.com/questions/63401355
复制相似问题