【ROS2】3D LiDARのPointCloud2をLaserScanに変換してみた

スポンサーリンク

3D LiDARデータの表示はカッコいいけど、直近で使いたいのはLaserScan形式。
いずれ実現したいと思っているナビに必要なのも、LaserScan形式。
(しばし沈黙)
というわけで、PointCloud2をLaserScanにリアルタイム変換してみました。
といっても、pointcloud-to-laserscanパッケージを使っただけです。

こんなの簡単だろうと思っていたら、rviz2の表示で少しハマりました。。。

環境

PC: TRIGKEY Green G5
OS: Ubuntu 22.04.3
ROS2 : Humble
LiDAR: Livox Mid-360
livox_ros_driver2: ユーザーによる修正版 (公式版でも問題ないはず。)
livox独自形式からPointCloud2形式への変換: livox_to_pointcloud2

インストール

$ sudo apt install ros-humble-pointcloud-to-laserscan -y


launchファイルの例

起動できるようにlaunchファイルを作成。
ファイル名は何でもいいけど、例として ros2_pointcloud_to_laserscan.launch.py で作成。
中身は次のとおり。
Mid-360用にアレンジしましたが、ほとんどこちらパクリました参考にさせて頂きました。

from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.actions import ExecuteProcess
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='pointcloud_to_laserscan', executable='pointcloud_to_laserscan_node',
            remappings=[('cloud_in', '/converted_pointcloud2'),
                        ('scan', '/scan')],
            parameters=[{
                'target_frame': '',
                'transform_tolerance': 0.01,
                'min_height': -0.2, # -20cm
                'max_height': 0.2,  #  20cm
                'angle_min': -3.1415,  # - M_PI
                'angle_max': 3.1415,  # M_PI
                'angle_increment': 0.0174,  # M_PI * 2 / 360.0 = 1 degree
                'scan_time': 0.1,# 10Hz
                'range_min': 0.1, # 10cm
                'range_max': 70.0, # 70m
                'use_inf': True,
                'inf_epsilon': 1.0
            }],
            name='pointcloud_to_laserscan'
        )
    ])


launchファイルを使って起動

$ ros2 launch ros2_pointcloud_to_laserscan.launch.py 


rviz2でLaserScanを表示する方法と注意点

前回のrviz2でのPointCloud2表示と同様で、rviz2のFixed Frameと表示したいフレームの関連には注意が必要。
表示されない場合の手軽な対処方法は、riz2のFixed Frameにlivox_frameを設定。


あとは同じようにLaserScanのtopicを指定して追加。


これで表示できる・・・と思ってたけど表示されなかった。
Reliability Policy を Best Effort に変える必要がある。
(センサーデータだとわかりきっているのに、なぜBest Effortではないのか謎)


ここまで設定して、ようやく表示。 白色がLaserScan。

リンク

pointcloud_to_laserscan
[ROS 2] pointcloud_to_laserscanパッケージの使い方