激光雷达—禾赛Pandar40P

一、概述

1. 简介

Pandar40P是一款机械旋转式40线激光雷达,其内部包含40个激光器,通过360°旋转实现3D成像。Pandar40P独特的角度分布,使其更加适用于自动驾驶。

Pandar40P不仅经过严格的精度、测距等出厂性能测试,还通过了振动、跌落、温度、湿度、老化、电气等多维度可靠性测试,产品稳定性得到充分保证。目前已在国内外自动驾驶、高精地图、仓储物流等场景下广泛使用。

2. 应用场景

3. 点云方向

  1. 禾赛激光雷达的坐标系与传统的REP105不同,其XYZ分别代表左/后/上方向
  2. X方向并不是线束的正前方,而是90度位置

4. 技术参数

*注:其他参数详见Pandar40P_产品手册

 

二、准备工作

1. 雷达SDK与ROS包

1.1 ROS1
# 配置ros源(ustc的源最好最快)
sudo sh -c '. /etc/lsb-release && echo "deb [arch=$(dpkg --print-architecture)] http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
# 添加公钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 安装ros桌面版
sudo apt update
sudo apt install ros-noetic-desktop-full
# 设置环境
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 准备源码
mkdir -p ~/catkin_ws/src
cd catkin_ws/src/
git clone --recursive https://github.com/HesaiTechnology/HesaiLidar_General_ROS.git

# 安装依赖
sudo apt install libpcap-dev libyaml-cpp-dev

# 编译
cd ~/catkin_ws
catkin_make

# source
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
echo $ROS_PACKAGE_PATH
1.2 ROS2
# 准备源码 
mkdir -p ~/ros2_40p/src && cd ~/ros2_40p/src/ 
git clone --recursive https://github.com/yanjingang/HesaiLidar_ROS_2.0.git

# 安装依赖
sudo apt install libpcl-dev libpcap-dev libboost-all-dev libpcl-conversions-dev libeigen3-dev
sudo apt install ros-humble-tf2-geometry-msgs ros-humble-message-tf-frame-transformer ros-humble-eigen3-cmake-module
sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen

# 配置
vim src/HesaiLidar_ROS_2.0/config/config.yaml
    device_ip_address: 192.168.1.201 #host_ip_address
    pcap_path: "/home/work/Pandar40P.pcap" #The path of pcap file

# 编译
cd ~/ros2_40p
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
rm -rf install build log
source /opt/ros/humble/setup.bash
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

# run
source ./install/setup.bash
ros2 launch hesai_ros_driver start.py

# check
ros2 topic hz /sensors/lidar/points
   average rate: 10HZ
ros2 topic echo /sensors/lidar/points 

2. 雷达连线

连接Lemo连接器:

物理连线:(gps模块可选)

3. 网络配置

插上雷达网线后,在Network-Wired里新建一个名为Pandar40P的有线网络,IPv4手动设置为192.168.20.100(新雷达默认192.168.1.x网段,因为我拿到的这个雷达IP被改为192.168.20.14了,所以PC也要设置在20网段才能通信),子网掩码设置为255.255.255.0,保存后点击连接。

查看ip配置是否生效,并ping 192.168.20.14雷达ip看能否ping通。(如果你是新雷达,应该ping雷达默认IP:192.168.1.201)

ping通过,可以直接访问雷达内部后台:http://192.168.20.14/setting.html(雷达的ip我在这里改回了192.168.1.200)

如果旧件不知道IP,可以新建个Wired网络随便写个IP接上网线,通过sudo tcpdump -i xxx来抓包看它的IP:

ifconfig    # 找到Lidar接入网络的名字,例如eno2

sudo tcpdump -n -i eno2  # 抓取指定网络上的网络报文

 

三、雷达调试

1. 修改ros配置

vim ~/catkin_ws/src/HesaiLidar_General_ROS/launch/hesai_lidar.launch
        ...
        <arg name="server_ip" default="192.168.20.14"/>
        <arg name="lidar_type" default="Pandar40P"/>
        <arg name="frame_id" default="Pandar40P"/>
        <arg name="lidar_correction_file"  default="$(find hesai_lidar)/config/Pandar40P.csv"/>
        ...

2. 点云测试

启动雷达驱动:

# ros1
roslaunch hesai_lidar hesai_lidar.launch
rosrun rviz rviz
# ros2
ros2 launch hesai_ros_driver start.py

修改rviz配置,即可看到扫描的点云:

  • Global配置中FixedFrame:修改为Pandar40P(上边launch文件里配置的frame_id)
  • Add一个PointCloud2:Topic选择/hesai/pandar

四、PTP时钟同步

我们查看40P点云输出的时间戳,是1970-07-14,在和IMU一起建图时,需要对齐时间。

0. 直接使用系统时间

一个简单粗暴的方法:都用操作系统时间,精度没有来自同一个时钟源的精度高,但在系统负载不高时可以满足基本的LIO-SAM要求。

vim src/HesaiLidar_General_ROS/src/main.cc
    void lidarCallback(boost::shared_ptr<PPointCloud> cld, double timestamp, hesai_lidar::PandarScanPtr scan){ // the timestamp from first point cloud of cld
      if(m_sPublishType == "both" || m_sPublishType == "points"){
        //pcl_conversions::toPCL(ros::Time(timestamp), cld->header.stamp);
        pcl_conversions::toPCL(ros::Time().now(), cld->header.stamp);   // 直接使用系统时间
        sensor_msgs::PointCloud2 output;
        pcl::toROSMsg(*cld, output);
        lidarPublisher.publish(output);
        ...

1. 设置雷达Clock Source为PTP时钟同步模式

http://192.168.1.200/setting.html

2. PTP master软件

虽然禾赛官方用户手册中称需要额外的PTP master设备来获取绝对时间,但是在Ubuntu系统中可以安装一个linuxptp软件模拟实现第三方PTP master功能。

2.1 安装PTP master软件
# depend
sudo apt-get install linuxptp ethtool
2.2 查看禾赛激光雷达链接的网口是否支持PTP

*注意:此处显示的hardware或software表示网卡对时间同步具备那些功能。其中,硬件同步能够达到微秒量级,软件同步额外误差在1-2ms

sudo ethtool -T eth0
    Time stamping parameters for eth0:
    Capabilities:
	hardware-transmit
	software-transmit
	hardware-receive
	software-receive
	software-system-clock
	hardware-raw-clock
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
	off
	on
	onestep-sync
Hardware Receive Filter Modes:
	none
	ptpv1-l4-sync
	ptpv1-l4-delay-req
	ptpv2-l4-sync
	ptpv2-l4-delay-req
	ptpv2-l2-sync
	ptpv2-l2-delay-req
	ptpv2-event
2.3 启用网卡PPT同步
# 启动网卡1588v2协议时钟同步
sudo vim /etc/linuxptp/ptp4l.conf
    boundary_clock_jbod 1
# sudo ptp4l -m -4 -i eth0 -s
sudo ptp4l -m -4 -i eth0

# 启动驱动用于同步时间
ros2 launch hesai_ros_driver start.py

时间同步后,等待一段时间,使激光雷达进行PTP时间同步,可通过网页查看同步状态:

http://192.168.1.200/setting.html

 

下一次,我将带大家使用Pandar40P在室外进行SLAM地图构建和自动导航。如果你对什么感兴趣可以告诉我~

 

yan 24.3.4

 

参考:

Pandar40P_产品手册

禾赛40M如何成功在rviz中显示点云数据

禾赛激光雷达调试

Compiling ROS2 branch with ROS2 Humble fails · Issue #78

PTP同步(1588协议与802.1区别)

Hesai激光雷达使用PTP时间同步

禾赛PandarXT-16/阿努比LpmsIG1运行lio-sam

欢迎关注下方“非著名资深码农“公众号进行交流~

发表评论

邮箱地址不会被公开。