激光雷达+imu的数据读取

本文以robosense Helios 16和YESENSE YIS510为例,进行雷达采集和IMU数据读取。本系统以ubuntu 20.04版本

1. robosense Helios 16

a. 安装驱动

在github上找到官方的雷达驱动rslidar_sdk: https://github.com/RoboSense-LiDAR/rslidar_sdk

下载驱动文件

git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git

下载后在download处可以看见文件夹,打开rslidar_sdk文件夹,并且在此目录打开终端,由于包含rs_driver子模块 ,使用 git submodule 下载,运行如下初始代码

git submodule init
git submodule update

依据自身使用的雷达类型,修改rslidar_sdk文件夹中的配置文件夹config中的config.yaml,将lidar_type修改为RSHELIOS_16P,如图

通过如下代码下载驱动的依赖:

sudo apt-get update
sudo apt-get install -y libyaml-cpp-dev (distro版本)
sudo apt-get install -y  libpcap-dev

新建一个文件夹,命名为1,在1文件夹中新建一个文件夹命名为src,将rslidar_sdk文件夹放置进入src文件夹。在src文件夹的路径下,运行终端,输入如下代码进行编译

catkin_make
source devel/setup.bash
roslaunch rslidar_sdk start.launch

2. YESENSE YIS510

a. 安装驱动

惯导通过USB连接主机,第一步下载驱动文件,通过github官网文件:GitHub - HViktorTsoi/yesense_ros_driver: ROS driver for yesense imu.

git clone https://github.com/HViktorTsoi/yesense_ros_driver.git

 安装依赖:

sudo apt install ros-noetic-serial-utils ros-noetic-serial

记住自己的ubuntu版本修改代码, 用lsb_release -a 命令查看系统版本,此步骤如果出现报错,serial是一个集成包,请直接下载sudo apt install ros-noetic-serial

文件下载到download本地后,同样新建一个文件夹2,在文件夹2中新建一个文件夹src, 将下载的文件夹yesense_ros_driver放置到文件夹src中,在src文件夹目录下打开终端进行编译:

catkin_make
source devel/setup.bash
roslaunch yesense_imu yesense.launch

如果报错,检查串口设置,执行下列命令:

sudo chmod 777 /dev/ttyUSB0

惯导的波特率设置过低,可能会导致数据无法完全输出 ,导致配置不成功。这里使用惯导官方配置的上位机连接惯导,修改波特率使其足够大。

修改完毕后在终端输入如下代码rostopic list查看话题确定连接成功

使用命令rostopic echo /imu/data查看惯导数据

3. 安装cloudcompare

1. sudo apt install flatpak
2. flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
3. flatpak install flathub org.cloudcompare.CloudCompare

4. 录制包

rosbag record -a    //录制 -a表示录制了所有节点发布的话题
rosbag record <topic_name1> <topic_name2> <topic_name3> ...
rosbag record  -O <bagname> <topic_name1> <topic_name2> <topic_name3> ...

 

 

A:在MATLAB中,可以使用 Robotics System Toolbox™ 和 Sensor Fusion and Tracking Toolbox™ 来对激光雷达IMU进行融合。 以下是一个简单的示例,展示如何使用 Robotics System Toolbox™ 和 Sensor Fusion and Tracking Toolbox™ 来融合激光雷达IMU数据: ```matlab % 创建激光雷达IMU sensor objects laserSensor = lidarSensor; imuSensor = imuSensor; % 读取数据文件 laserData = load('lidarData.mat'); imuData = load('imuData.mat'); % 创建ROS消息 rosLaserMsg = lidarScan(laserData.scanData); rosIMUMsg = imuSensor(); % 创建激光雷达IMU数据流 laserStream = rostime(laserData.time, 'system'); imuStream = rostime(imuData.time, 'system'); % 创建IMU滤波器 imuFilter = imufilter; % 建立激光雷达IMU之间的时序对齐 [laserStream, imuStream] = synchronize(laserStream, imuStream, 'union'); % 针对每个时间步长执行融合 for i = 1:length(laserStream) % 获取当前时间戳 currentTime = laserStream(i).Time; % 从每个传感器获取当前数据 laserData = readBinaryPointCloud(laserSensor, rosLaserMsg(i)); imuData = imuFilter(rosIMUMsg(i)); % 将激光雷达点云和IMU数据进行融合 [pose, vel] = laserImuFuse(laserData, imuData, 'TransmitTransform', true); % 输出融合后的姿态和速度信息 disp(['Fused Pose: ' num2str(pose')]); disp(['Fused Velocity: ' num2str(vel')]); end ``` 在这个示例中,我们首先创建了激光雷达IMU的 sensor objects,然后读取它们的数据文件。接着,我们创建了 ROS 消息并创建了数据流,并使用 ```synchronize``` 函数将它们对齐。接下来,我们使用 ```laserImuFuse``` 函数将激光雷达点云和IMU数据进行融合,并输出融合后的姿态和速度信息。 需要注意的是,这只是一个简单的示例。实际的应用程序可能需要更复杂的算法和融合技术。同时,需要注意的是,数据的处理和融合可能需要一定的时间和计算资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值