一、概述
1. 简介
Pandar40P是一款机械旋转式40线激光雷达,其内部包含40个激光器,通过360°旋转实现3D成像。Pandar40P独特的角度分布,使其更加适用于自动驾驶。
Pandar40P不仅经过严格的精度、测距等出厂性能测试,还通过了振动、跌落、温度、湿度、老化、电气等多维度可靠性测试,产品稳定性得到充分保证。目前已在国内外自动驾驶、高精地图、仓储物流等场景下广泛使用。
2. 应用场景
3. 点云方向
- 禾赛激光雷达的坐标系与传统的REP105不同,其XYZ分别代表左/后/上方向
- 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
参考:
Compiling ROS2 branch with ROS2 Humble fails · Issue #78
禾赛PandarXT-16/阿努比LpmsIG1运行lio-sam
