Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 --SLAM不学无术小问题

2023-11-08

Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据

新款驱动支持RS16、RS32、RSBP、RS128、RS80、RSM1-B3、RSHELIOS等型号

注意!!!!!! 该教程旨在引导安装,可能现在已经不具时效性了,建议官网查看官方教程

背景

   笔者在尝试新的多传感器融合算法LIO-SAM时惊异于其优异的性能,准备上手一试,跑源码作者给出的数据集时没有丝毫问题,效果也非常惊艳,但是适配自己的数据包时出现了问题,原作者对激光雷达的数据格式有要求,考虑到与IMU时间同步问题,源码中会检查激光雷达的ring通道和时间戳是否符合要求。但是笔者使用的激光雷达支持的格式是XYZI,即( x, y, z,intensity),为了解决这一问题,笔者登录了速腾聚创的官网寻求帮助。发现速腾聚创开发了一款新的激光雷达驱动rslidar_sdk,并停止了对旧驱动rs_driver的维护(仍然可用),其实旧的驱动已经集成到了新的SDK中,新的SDK功能更加强大,并且解决了笔者的问题。
   新款驱动支持两种激光雷达点云格式,即 XYZI (x, y, z, intensity)格式和 XYZIRT(- x, y, z, intensity, ring, timestamp)格式,其中后一种就包含了ring通道和timestamp时间戳数据,并且时间戳可以在配置文件中选择是使用雷达时间戳还是使用ROS时间戳。这很可以,准备安装。

一、下载rslidar_sdk

新建workspace下载sdk

mkdir  -p  RS_SDK/src

手动打开workspace进入src文件夹下将下面的文件解压到此处,先不要编译
然后打开: https://github.com/RoboSense-LiDAR/rslidar_sdk/releases.
请下载 rslidar_sdk.tar.gz 压缩包, 不要下载Source code。 因为Source code压缩包内不包含子模块rs_driver的代码, 用户还需自行下载rs_driver的代码放入其中才行。
在这里插入图片描述

二、添加依赖

1.Yaml (必需)

版本号: >= v0.5.2
若已安装ROS desktop-full, 可跳过
安装方式:

sudo apt-get update
sudo apt-get install -y libyaml-cpp-dev
2.Pcap (必需)

版本号: >=v1.7.4
安装方式:

sudo apt-get install -y  libpcap-dev
3. Protobuf (可选)

   protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库(类似Json),但相比于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。但这个库目前还不是太流行。(官网注明可选,实际使用中会在CMakeLists.txt中链接进行编译,如果没有此库将会报错 )如果不需要此库的功能,也可以打开CMakeLists.txt文件中有关编译protobuf部分注释掉也可编译成功(注释掉以下部分)

#Protobuf#
find_package(Protobuf QUIET)
find_program(PROTOC protoc)
if(NOT PROTOC MATCHES "NOTFOUND" AND Protobuf_FOUND)
  message(=============================================================)
  message("-- Protobuf Found, Protobuf Support is turned On!")
  message(=============================================================)
  add_definitions(-DPROTO_FOUND)
  include_directories(${PROTOBUF_INCLUDE_DIRS})
  SET(PROTO_FILE_PATH ${PROJECT_SOURCE_DIR}/src/msg/proto_msg)
 file(GLOB PROTOBUF_FILELIST ${PROTO_FILE_PATH}/*.proto)
  foreach(proto_file ${PROTOBUF_FILELIST})
    message(STATUS "COMPILING ${proto_file} USING ${PROTOBUF_PROTOC_EXECUTABLE}")
    execute_process(COMMAND ${PROTOBUF_PROTOC_EXECUTABLE}
                    --proto_path=${PROTO_FILE_PATH}
                    --cpp_out=${PROTO_FILE_PATH}
                    ${proto_file})
  endforeach()
else(NOT PROTOC MATCHES "NOTFOUND" AND Protobuf_FOUND)
  message(=============================================================)
  message("-- Protobuf Not Found, Protobuf Support is turned Off!")
  message(=============================================================)
endif(NOT PROTOC MATCHES "NOTFOUND" AND Protobuf_FOUND)

笔者使用时按照官网的安装方式无法正确安装,有需要安装此库朋友这里推荐按照以下方式安装
此处参考大佬 链接: protobuf 安装. (侵删)

// 下载 protoBuf:
$ git clone https://github.com/protocolbuffers/protobuf.git
//  安装依赖库
$ sudo apt-get install autoconf  automake  libtool curl make  g++  unzip libffi-dev -y
// 进入目录
$ cd protobuf/ 
// 自动生成configure配置文件:
$ ./autogen.sh 
// 配置环境:
$ ./configure
// 编译源代码(会很慢要有耐心!):
$ make 
// 安装
$ sudo make install
// 刷新共享库 (很重要的一步啊)
$ sudo ldconfig 
// 成功后需要使用命令测试
$ protoc -h 

这个效果就表示安装成功:
在这里插入图片描述

三、编译

1.打开工程内的CMakeLists.txt文件,将文件顶部的set(COMPILE_METHOD ORIGINAL)改为set(COMPILE_METHOD CATKIN)。
#=======================================
# Compile setup (ORIGINAL,CATKIN,COLCON)
#=======================================
set(COMPILE_METHOD ORIGINAL)
改为:
#=======================================
# Compile setup (ORIGINAL,CATKIN,COLCON)
#=======================================
set(COMPILE_METHOD CATKIN)

2.

将rslidar_sdk工程目录下的package_ros1.xml文件重命名为package.xml。

3.返回工作空间目录,执行以下命

catkin_make

source devel/setup.bash

四、修改config.yaml参数

    本工程只有一份参数文件 config.yaml, 储存于rslidar_sdk/config文件夹内。打开此文件,找到以下部分:

lidar:
  - driver:
  //此处修改激光雷达型号
      lidar_type: RS128           
      frame_id: /rslidar           
      msop_port: 6699             
      difop_port: 7788            
      start_angle: 0              
      end_angle: 360               
      min_distance: 0.2            
      max_distance: 200            
      use_lidar_clock: false        

激光雷达型号默认RS128,这非常难受,修改为自己的激光雷达型号即可
不修改就是这效果:报错:

RoboSense-LiDAR-Driver is running.....
ERRCODE_MSOPTIMEOUT
ERRCODE_MSOPTIMEOUT
ERRCODE_DIFOPTIMEOUT
ERRCODE_MSOPTIMEOUT
ERRCODE_DIFOPTIMEOUT
ERRCODE_MSOPTIMEOUT
ERRCODE_MSOPTIMEOU

在这里插入图片描述
修改激光雷达数据点云格式设置:
打开CMakeLists.txt,找到如下代码段

#=======================================
# Custom Point Type (XYZI, XYZIRT)
#=======================================
set(POINT_TYPE XYZIRT)

初始设置格式为:XYZI
需要XYZIRT格式可以修改为以下格式即可获得

#=======================================
# Custom Point Type (XYZI, XYZIRT)
#=======================================
set(POINT_TYPE XYZIRT)

五、配置IP

    使用网线将雷达与电脑或者工控机链接起来,激光雷达上电,点击右上角打开有线连接设置,使用IPV4设置本机静态IP如图示:

在这里插入图片描述
详细配置方式可参看速腾聚创官网给出的具体型号的使用参考手册

六、Fire

启动launch文件

source devel/setup.bash

roslaunch rslidar_sdk start.launch

正常情况可以下可以在RVIZ中看到扫描帧:
在这里插入图片描述
在这里插入图片描述

以上部分配置仅仅可使激光雷达显示正常,可以录制自己需要的的数据格式,具体参数还需自己调试。以上步骤只是笔者所遇问题的解决办法,不当之处欢迎大家交流指正。这只实现了测试算法的第一步---------拥有正确的数据集,后期调试好了LIO-SAM适配速腾激光雷达的步骤会与大家分享。

官方安装教程: https://github.com/RoboSense-LiDAR/rslidar_sdk/blob/v1.3.0/README_CN.md.

官方config.yaml参数配置说明:https://github.com/RoboSense-LiDAR/rslidar_sdk/blob/v1.3.0/doc/intro/parameter_intro_cn.md.

笔者另一篇博客实现:速腾聚创雷达点云格式转换为Velodyne雷达点云格式:
链接: Ubuntu18 安装ROS节点解决----速腾聚创雷达点云格式转换为Velodyne雷达点云格式 --SLAM不学无术小问题.

仅供速腾聚创品牌的雷达参考

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42141088/article/details/117123174

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04 安装速腾聚创最新驱动RSLidar_SDK采集XYZIRT格式的激光点云数据 --SLAM不学无术小问题 的相关文章

  • 在 shell 脚本中查找和替换

    是否可以使用 shell 在文件中搜索然后替换值 当我安装服务时 我希望能够在配置文件中搜索变量 然后在该值中替换 插入我自己的设置 当然 您可以使用 sed 或 awk 来完成此操作 sed 示例 sed i s Andrew James
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 如何用X11复制到剪贴板?

    使用 OS X 上的框架 我可以使用以下命令将 PNG 复制到粘贴板 在 C 中 显然我可以将 NSPasteboard 与 Cocoa 一起使用 include
  • gentoo crontab:为什么这个简单的 crontab 不起作用?

    我使用 GENTOO 发行版 crontab e 35 12 root php5 home www cron php 当我手动运行时 php5 php5 home www cron php 这有效 它向我发送了一封电子邮件 然后我检查日期
  • 无法执行'x86_64-conda_cos6-linux-gnu-gcc':没有这样的文件或目录(pysam安装)

    我正在尝试安装 pysam 执行后 python path to pysam master setup py build 这个错误的产生是 unable to execute x86 64 conda cos6 linux gnu gcc
  • Inotify linux 监视子目录

    是否可以以这种模式监视目录 storage data usernames Download gt storage data Download 我需要监视每个用户的下载文件夹中是否进行了更改 也许我需要创建所有路径的列表 将其放入数组中 并在
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A

随机推荐