ros仿真笔记之——gazebo配置velodyne(代码片段)

gwpscut gwpscut     2023-01-04     539

关键词:

之前博客《ROS仿真笔记之——基于gazebo的event camera仿真(dvs gazebo)》介绍了在gazebo里面配置dvs sensor,本博文将velodyne也加上,并且在dvs camera里面加入image,使得仿真的event camera在输出event stream的同时,也可以输出图片。

首先把需要用到的so文件放在一个文件夹中,方便使用

然后更改机器人的.urdf.xacro文件,把VLP-16 sensor加进去

<!-- 加入激光雷达 -->
    <xacro:include filename="/home/kwanwaipang/gazebo_so/VLP_16_model/VLP-16.urdf.xacro"/>
  <xacro:VLP-16 parent="base_link" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="$gpu">
    <origin xyz="0 0 0.2" rpy="0 0 0" />
  </xacro:VLP-16>

注意:对应的VLP-16.urdf.xacro文件里面的路径需要更改

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="VLP-16">
  <xacro:property name="M_PI" value="3.1415926535897931" />
  <xacro:macro name="VLP-16" params="*origin parent:=base_link name:=velodyne topic:=/velodyne_points hz:=10 lasers:=16 samples:=1875 collision_range:=0.3 min_range:=0.9 max_range:=130.0 noise:=0.008 min_angle:=-$M_PI max_angle:=$M_PI gpu:=false">

    <joint name="$name_base_mount_joint" type="fixed">
      <xacro:insert_block name="origin" /> 
      <parent link="$parent"/>
      <child link="$name_base_link"/>
    </joint>

    <link name="$name_base_link">
      <inertial>
        <mass value="0.83"/>
        <origin xyz="0 0 0.03585"/>
        <inertia ixx="$(0.83 * (3.0*0.0516*0.0516 + 0.0717*0.0717)) / 12.0" ixy="0" ixz="0"
          iyy="$(0.83 * (3.0*0.0516*0.0516 + 0.0717*0.0717)) / 12.0" iyz="0"
          izz="$0.5 * 0.83 * (0.0516*0.0516)"/>
      </inertial>
      <visual>
        <geometry>
          <mesh filename="/home/kwanwaipang/gazebo_so/VLP_16_model/meshes/VLP16_base_1.dae" />
        </geometry>
      </visual>
      <visual>
        <geometry>
          <mesh filename="//home/kwanwaipang/gazebo_so/VLP_16_model/meshes/VLP16_base_2.dae" />
        </geometry>
      </visual>
      <collision>
        <origin rpy="0 0 0" xyz="0 0 0.03585"/>
        <geometry>
          <cylinder radius="0.0516" length="0.0717"/>
        </geometry>
      </collision>
    </link>

    <joint name="$name_base_scan_joint" type="fixed" >
      <origin xyz="0 0 0.0377" rpy="0 0 0" />
      <parent link="$name_base_link" />
      <child link="$name"/>
    </joint>

    <link name="$name">
      <inertial>
        <mass value="0.01"/>
        <origin xyz="0 0 0"/>
        <inertia ixx="1e-7" ixy="0" ixz="0" iyy="1e-7" iyz="0" izz="1e-7"/>
      </inertial>
      <visual>
        <origin xyz="0 0 -0.0377" />
        <geometry>
          <mesh filename="//home/kwanwaipang/gazebo_so/VLP_16_model/meshes/VLP16_scan.dae" />
        </geometry>
      </visual>
    </link>

    <!-- Gazebo requires the velodyne_gazebo_plugins package -->
    <gazebo reference="$name">
      <xacro:if value="$gpu">
        <sensor type="gpu_ray" name="$name-VLP16">
          <pose>0 0 0 0 0 0</pose>
          <visualize>false</visualize>
          <update_rate>$hz</update_rate>
          <ray>
            <scan>
              <horizontal>
                <samples>$samples</samples>
                <resolution>1</resolution>
                <min_angle>$min_angle</min_angle>
                <max_angle>$max_angle</max_angle>
              </horizontal>
              <vertical>
                <samples>$lasers</samples>
                <resolution>1</resolution>
                <min_angle>-$15.0*M_PI/180.0</min_angle>
                <max_angle> $15.0*M_PI/180.0</max_angle>
              </vertical>
            </scan>
            <range>
              <min>$collision_range</min>
              <max>$max_range+1</max>
              <resolution>0.001</resolution>
            </range>
            <noise>
              <type>gaussian</type>
              <mean>0.0</mean>
              <stddev>0.0</stddev>
            </noise>
          </ray>
          <plugin name="gazebo_ros_laser_controller" filename="/home/kwanwaipang/gazebo_so/libgazebo_ros_velodyne_gpu_laser.so">
            <topicName>$topic</topicName>
            <frameName>$name</frameName>
            <min_range>$min_range</min_range>
            <max_range>$max_range</max_range>
            <gaussianNoise>$noise</gaussianNoise>
          </plugin>
        </sensor>
      </xacro:if>
      <xacro:unless value="$gpu">
        <sensor type="ray" name="$name-VLP16">
          <pose>0 0 0 0 0 0</pose>
          <visualize>false</visualize>
          <update_rate>$hz</update_rate>
          <ray>
            <scan>
              <horizontal>
                <samples>$samples</samples>
                <resolution>1</resolution>
                <min_angle>$min_angle</min_angle>
                <max_angle>$max_angle</max_angle>
              </horizontal>
              <vertical>
                <samples>$lasers</samples>
                <resolution>1</resolution>
                <min_angle>-$15.0*M_PI/180.0</min_angle>
                <max_angle> $15.0*M_PI/180.0</max_angle>
              </vertical>
            </scan>
            <range>
              <min>$collision_range</min>
              <max>$max_range+1</max>
              <resolution>0.001</resolution>
            </range>
            <noise>
              <type>gaussian</type>
              <mean>0.0</mean>
              <stddev>0.0</stddev>
            </noise>
          </ray>
          <plugin name="gazebo_ros_laser_controller" filename="/home/kwanwaipang/gazebo_so/libgazebo_ros_velodyne_laser.so">
            <topicName>$topic</topicName>
            <frameName>$name</frameName>
            <min_range>$min_range</min_range>
            <max_range>$max_range</max_range>
            <gaussianNoise>$noise</gaussianNoise>
          </plugin>
        </sensor>
      </xacro:unless>
    </gazebo>

  </xacro:macro>
</robot>

更改对应的gazebo.xacro文件,把该加进去的sensor.so文件加进去

 <!-- camera -->
  <gazebo reference="camera_rgb_frame">
    <sensor type="camera" name="camera1">
      <!-- <update_rate>30.0</update_rate> -->
      <camera name='__default__'>
        <horizontal_fov>1.8</horizontal_fov>
        <image>
          <width>128</width>
           <height>128</height>
          <!-- <format>R8G8B8</format> -->
        </image>
        <clip>
          <near>0.1</near>
          <far>100</far>
        </clip>
        <!-- <noise>
          <type>gaussian</type>
          <mean>0.0</mean>
          <stddev>0.007</stddev>
        </noise> -->
      </camera>
      <update_rate>60</update_rate>
        <alwaysOn>1</alwaysOn>
         <visualize>0</visualize>
      <plugin name="camera_controller" filename="/home/kwanwaipang/catkin_ws/devel/lib/libgazebo_dvs_plugin.so">
        <!-- <alwaysOn>true</alwaysOn> -->
        <!-- <alwaysOn>1</alwaysOn> -->
        <!-- <update_rate>60</update_rate> -->
         <!-- <visualize>0</visualize> -->
        <!-- <updateRate>0.0</updateRate> -->
        <eventThreshold>8</eventThreshold>
        <cameraName>camera1</cameraName>
        <robotNamespace>/</robotNamespace>
        <!-- <imageTopicName>image_raw</imageTopicName> -->
        <eventsTopicName>events</eventsTopicName>
        <cameraInfoTopicName>camera_info</cameraInfoTopicName>
        <!-- <frameName>camera_rgb_optical_frame</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>

<!-- 把普通的camera也加入 -->
       <plugin name="camera_controller" filename="libgazebo_ros_camera.so">
        <cameraName>camera1</cameraName>
        <imageTopicName>rgb/image_raw</imageTopicName>
        <cameraInfoTopicName>rgb/camera_info</cameraInfoTopicName>
        <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>

对应的davis_mono.launch如下

<launch>
  <!-- camera driver -->
  <node name="davis_ros_driver" pkg="davis_ros_driver" type="davis_ros_driver" />

  <!-- visualization -->
  <node name="dvs_renderer" pkg="dvs_renderer" type="dvs_renderer">
    <!-- <param name="display_method" value="grayscale"/> -->
    <param name="display_method" value="red-blue"/>
    <!-- <remap from="events" to="/dvs/events" /> -->
    <remap from="events" to="/camera1/events" />
    <!-- <remap from="image" to="/dvs/image_raw" /> -->
     <remap from="image" to="/camera1/rgb/image_raw" />
    <!-- <remap from="camera_info" to="/dvs/camera_info" /> -->
      <remap from="camera_info" to="/camera1/rgb/camera_info" />
  </node>

  <!-- display -->
  <node name="image_view" pkg="rqt_image_view" type="rqt_image_view">
  	<remap from="image" to="dvs_rendering"/>
  </node>

  <!-- configure -->
  <node name="rqt_reconfigure" pkg="rqt_reconfigure" type="rqt_reconfigure" />

</launch>

然后运行(注意xacro里面有中文可能会导致运行不了~)

roslaunch turtlebot3_navigation dvs_test.launch
rosrun turtlebot3_teleop turtlebot3_teleop_key
rostopic echo camera1/event1
roslaunch dvs_renderer davis_mono.launch
rosrun rviz rviz

图片效果:

视频效果:

dvs

ros学习笔记之——gazebo仿真(代码片段)

本博文是本人学习gazebo的学习记录。 Gazebo是一款3D仿真器,支持机器人开发所需的机器人、传感器和环境模型,并且通过搭载的物理引擎可以得到逼真的仿真结果。Gazebo是近年来最受欢迎的三维仿真器之一,并被选... 查看详情

ros仿真笔记之——基于gazebo的多机器人探索环境仿真(代码片段)

...绍过一个名为explore_lite的机器人的包本博文对其进行gazebo仿真分析 目录实验修改地方的说明参考资料 实验首先在包clone下来(这个包设置为私密了,想下载的读者可以直接下载源包https://github.com/hrnr/m-explore然后再做相... 查看详情

ros实验笔记之——evo(代码片段)

...lyingroom"·Issue#4·uzh-rpg/rpg_dvs_evo_open·GitHub之前博客《ROS仿真笔记之——基于gazebo的eventcamera仿真(dvsgazebo)》介绍了DVS的gazebo仿真。博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了ESVO以及事件相 查看详情

ros2+gazebo+opencv之mobot仿真视觉传感器(代码片段)

...xff08;2021共6套) 其中:使用机器人操作系统ROS2和仿真软件Gazebo9服务进阶实战(八)-mobot 查看详情

ros仿真笔记之——基于rrt_exploration的单个机器人自主探索建图(代码片段)

...SLAMmapmerage《ROS学习笔记之——多机器人探索环境》《ROS仿真笔记之——基于gazebo的多机器人探索环境仿真》《ROS仿真笔记之——多移动机器人SLAM地图融合》《ROS仿真笔记之——移动机器人自主探索式地图构建》之前的都是基于... 查看详情

ros和gazebo进行机器人仿真

Gazebo是一种多机器人仿真器,可用于室内外机器人仿真。Gazebo在ROS中有良好的接口,包含ROS和Gazebo的所有控制。若要实现ROS到Gazebo的通信,我们必须安装ROS-Gazebo接口。应该安装以下软件包:$sudoaptinstallros-melodic-gazebo-ros-pkgs ro... 查看详情

ros实验笔记之——px4仿真

...搭建了px4开发环境。本博文在ubuntu下对PX4进行一些基本的仿真学习~之前在做无人机仿真开发时《ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》,已经安装了px4了~为此不需要 查看详情

ros之gazebo

<?xmlversion="1.0"?><launch><!--thesearetheargumentsyoucanpassthislaunchfile,forexamplepaused:=true--><argname="paused"default="true"/><argname="use_sim_time"default="false" 查看详情

robotoperatingsystem(ros)学习笔记2---使用smartcar进行仿真

搭建环境:XMWare Ubuntu14.04 ROS(indigo)转载自古月居 转载连接:http://www.guyuehome.com/248 一、模型完善  文件夹urdf下,创建gazebo.urdf.xacro、smartcar.urdf.xacro、smartcar_body.urdf.xacro三个文件1、机器人主体smartcar_bod 查看详情

ros学习笔记之——基于qgc的px4仿真

之前博客《ROS实验笔记之——PX4仿真》已经介绍了PX4编译及QGC的安装,本博文进一步的基于QGC进行仿真控制QGC里有很多的参数控制首先打开虚拟的遥控器是实现遥控控制就可以在QGC用模拟手柄控制无人机(左边的遥感是... 查看详情

ros仿真笔记之——基于frontier_exploration的机器人自主探索

...客也尝试了不同的自主探索包,如rrt_exploration包《ROS仿真笔记之——基于rrt_exploration的单个机器人自主探索建图》与explore_lite包《ROS仿真笔记之——移动机器人自主探索式地图构建》。本博文尝试一下frontier_exploration包关于... 查看详情

ur5仿真学习笔记(代码片段)

UR5仿真学习笔记仿真环境搭建安装moveit安装UR5驱动启动Gazebo和rviz参考博客在ROS中完成UR5机械臂的仿真,记录学习过程仿真环境搭建安装moveit参考:Ubuntu18.04安装ros-melodic-moveitmoveit官方文档$sudoapt-getinstallros-melodic-moveit$source... 查看详情

ur5仿真学习笔记(代码片段)

UR5仿真学习笔记仿真环境搭建安装moveit安装UR5驱动启动Gazebo和rviz参考博客在ROS中完成UR5机械臂的仿真,记录学习过程仿真环境搭建安装moveit参考:Ubuntu18.04安装ros-melodic-moveitmoveit官方文档$sudoapt-getinstallros-melodic-moveit$source... 查看详情

ros从入门到精通2-5:gazebo插件制作案例(带碰撞属性的多行人场景)(代码片段)

...精通》1Gazebo插件在ROS从入门到精通2-2:机器人3D物理仿真——Gazebo中介绍过Gazebo是一款3D物理仿真器,支持机器人开发所需的机器人、传感器和环境模型,并通过其搭载的强大物理引擎产生高品质的图形画面,达... 查看详情

ros2学习笔记18-velodyne16雷达点云在ros2中可视化案例参考(代码片段)

环境:ubuntu20.04,ros-foxy,vscode,velodyne-16背景:练习如何将velodyne-16雷达点云数据在ros2中读取并可视化.折腾了很久,并没有找到类似案例,所以自己总结一下.1.修改电脑ip这里修改自己电脑ip,跟大多数... 查看详情

gazebo仿真时实时循环启动控制器失败问题解决(代码片段)

在进行机械臂仿真时,使用gazebo进行仿真,使用ROS控制器。在gazebo中启动ros控制器,命令如下$:roslaunchseven_dof_arm_gazeboseven_dof_arm_gazebo_control.launch gazebo中出现了机械臂的的模型,但是有些需要的话题没有生成。不能去控制机械... 查看详情

rosopenai和gazebo机器人与人工智能仿真与实践教研杂记安装配置(代码片段)

...8;1.0)1.14.3~1943+ROS  Crystal(2.0)0.6.1~541etc.仿真:Gazebo9.8.0+V-Rep3.6.1+Webots2019a.1etc.实物:Cozmo/Vector+LeapMotion+Joystick+Camera+Microphone+ Speaker+Phone(ios&android)+Arduinoetc.镜像࿱... 查看详情

gazebo+rviz仿真(代码片段)

...模型创建及键盘操控详见之前的博客gazebo小车模型(附带仿真环境)-zylyehuo-博客园使用键盘控制gazebo小车模型运动-zylyehuo-博客园参考链接Autolabor-ROS机器人入门课程《ROS理论与实践》Part1:里程计查看效果图step1:添加需要的文件src... 查看详情