Skip to content

LIDAR

Bridge lidar system between gazebo to ros lidar sensor send two topics

  • /lidar (sensor_msgs/msg/LaserScan) use for 2D lidar
  • /lidar/points (sensor_msgs/msg/PointCloud2) use for 3D lidar

Gazebo

Add sensor plugin to world

add sensor plugin to world
1
2
3
4
5
<plugin
  filename="gz-sim-sensors-system"
  name="gz::sim::systems::Sensors">
  <render_engine>ogre2</render_engine>
</plugin>
sensor
<sensor name='gpu_lidar' type='gpu_lidar'>
    <topic>lidar</topic>
    <update_rate>10</update_rate>
    <lidar>
    <scan>
        <horizontal>
        <samples>640</samples>
        <resolution>1</resolution>
        <min_angle>-1.396263</min_angle>
        <max_angle>1.396263</max_angle>
        </horizontal>
        <vertical>
        <samples>16</samples>
        <resolution>1</resolution>
        <min_angle>-0.261799</min_angle>
        <max_angle>0.261799</max_angle>
        </vertical>
    </scan>
    <range>
        <min>0.08</min>
        <max>10.0</max>
        <resolution>0.01</resolution>
    </range>
    </lidar>
    <alwaysOn>1</alwaysOn>
    <visualize>true</visualize>
</sensor>
gz
gz topic --echo -t /lidar

alt text


ROS

cli

ros2 run ros_gz_bridge parameter_bridge /lidar@sensor_msgs/msg/LaserScan[gz.msgs.LaserScan
#

bridge file

1
2
3
4
5
- ros_topic_name: "/lidar"
  gz_topic_name: "/lidar"
  ros_type_name: "sensor_msgs/msg/LaserScan"
  gz_type_name: "gz.msgs.LaserScan"
  direction: GZ_TO_ROS

launch

imu_bridge.launch.py
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch_ros.actions import Node
from pathlib import Path

PKG_BRINGUP = 'turtlebot_bringup'
BRIDGE_CONFIG = "gz_bridge.yaml"
CONFIG_FOLDER = "config"

def generate_launch_description():
    ld = LaunchDescription()

    bridge_file = Path(get_package_share_directory(PKG_BRINGUP)) \
        .joinpath(CONFIG_FOLDER) \
        .joinpath(BRIDGE_CONFIG) \
        .as_posix()

    ros_gz_bridge = Node(
        package="ros_gz_bridge",
        executable="parameter_bridge",
        arguments=[
            '--ros-args',
            '-p',
            f"config_file:={bridge_file}"
        ],
        parameters=[
            {'use_sim_time': True},
            {'qos_overrides./imu.publisher.reliability': 'best_effort'}
        ],
    )

    ld.add_action(ros_gz_bridge)


    return ld