ROS:三维激光点云转二维激光pointcloud-to-laserscan

环境

ubuntu20.04
ros-noetic

一、安装库

sudo apt-get install ros-noetic-pointcloud-to-laserscan

二、构建ros-package

# 创建并初始化工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src

# 创建 ROS 包
catkin_create_pkg my_pointcloud2laser roscpp rospy sensor_msgs laser_geometry tf2_ros

三、在 my_pointcloud2laser 包中创建 launch 目录,并添加 pointcloud_to_laserscan.launch 文件:


  
  
    
    
    
    
    
      target_frame: laser  # 输出激光扫描的坐标系
      transform_tolerance: 0.01
      min_height: 0.       # 过滤高度范围
      max_height: 0.9
      angle_min: -3.1415926  # 扫描角度范围
      angle_max: 3.1415926
      angle_increment: 0.003 # 角度分辨率
      scan_time: 0.1         # 扫描时间
      range_min: 0.4         # 最小探测距离
      range_max: 50         # 最大探测距离
      use_inf: true          # 超出最大距离的点标记为 inf
      inf_epsilon: 1.0
      concurrency_level: 1   # 并发级别
    
  

编译package,回到catkin_ws目录下执行:

catkin_make

四、添加pointclound到scan的tf变换,这里用 python实现发布,python文件命名为 :tf.py

#!/usr/bin/env python3
import rospy
import tf2_ros
from geometry_msgs.msg import TransformStamped

def publish_static_laser_tf():
    rospy.init_node('static_laser_tf_publisher', anonymous=True)

    # 创建静态 TF 广播器
    static_broadcaster = tf2_ros.StaticTransformBroadcaster()

    # 定义 base_link → laser 的静态变换
    static_transform = TransformStamped()
    static_transform.header.stamp = rospy.Time.now()
    static_transform.header.frame_id = 'lidar'  # 父坐标系
    static_transform.child_frame_id = 'laser'       # 子坐标系

    # 激光雷达在 base_link 中的安装位置(单位:米)
    static_transform.transform.translation.x = 0.0   # 无侧向偏移
    static_transform.transform.translation.y = 0.0   # 无侧向偏移
    static_transform.transform.translation.z = 0.0   # 无侧向偏移

    # 旋转(单位:弧度,此处无旋转)
    static_transform.transform.rotation.x = 0.0
    static_transform.transform.rotation.y = 0.0
    static_transform.transform.rotation.z = 0.0
    static_transform.transform.rotation.w = 1.0

    # 发布静态 TF
    static_broadcaster.sendTransform(static_transform)
    rospy.loginfo("Published static TF: lidar -> laser")

    # 保持节点运行
    rospy.spin()

if __name__ == '__main__':
    try:
        publish_static_laser_tf()
    except rospy.ROSInterruptException:
        pass

五、运行脚本

#开启新终端:
roslaunch my_pointcloud2laser pointcloud_to_laserscan.launch

#开启新终端
python tf.py

#开启新终端 
rviz

六、可视化效果

ROS:三维激光点云转二维激光pointcloud-to-laserscan_第1张图片

ROS:三维激光点云转二维激光pointcloud-to-laserscan_第2张图片

你可能感兴趣的:(机器人-Robot,机器人,laserscan,ros,三维激光点云转二维激光)