rslidar_SDK二次开发

news2024/11/16 11:56:58

rslidar_SDK代码二开注意事项

文章目录

  • rslidar_SDK代码二开注意事项
    • 0.下载地址
    • 1.CMakeLists.txt
      • 1.1 Cmake里面,首先选择编译方式,原始ORIGINAL还是CATKIN,还是COLCON
      • 1.2 增加新增cpp文件位置
      • 1.3 如果选择ORIGINAL模式,需要额外增加ROS包
      • 1.4 由于rslidar_sdk项目中包含子模块驱动内核rs_driver, 因此在执行git clone 后还需要执行相关指令初始化并更新子模块。
      • 1.5 **直接编译**
      • 1.6 增加自定义点字段的点类型
      • 1.7 若使用PCL点云,增加PCL库
    • 2.隐藏功能
      • 2.1 pcap重复播报参数配置
      • 2.2 坐标转换功能(点云标定)
    • 3. 1.3.10版本结构
      • rslidar-类关系
      • 初始化流程
      • 创建适配器
      • 创建传输器
      • 读取pcap过程

0.下载地址

【github】https://github.com/RoboSense-LiDAR/rslidar_sdk

1.CMakeLists.txt

1.1 Cmake里面,首先选择编译方式,原始ORIGINAL还是CATKIN,还是COLCON

#=======================================
# Compile setup (ORIGINAL, CATKIN, COLCON)
#=======================================
set(COMPILE_METHOD CATKIN)

#Catkin#
if(${COMPILE_METHOD} STREQUAL "CATKIN")

add_definitions(-DRUN_IN_ROS_WORKSPACE)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  sensor_msgs
  roslib
  pcl_ros
  pcl_conversions)

catkin_package(CATKIN_DEPENDS 
  sensor_msgs 
  roslib
  pcl_ros
  pcl_conversions)

endif(${COMPILE_METHOD} STREQUAL "CATKIN")

1.2 增加新增cpp文件位置

aux_source_directory(src/utility/ APP_DIR_SRCS)

# add_executable 增加对应文件夹
  add_executable(rslidar_sdk_node
              node/rslidar_sdk_node.cpp
              src/manager/adapter_manager.cpp
              ${PROTO_FILE_PATH}/packet.pb.cc
              ${PROTO_FILE_PATH}/scan.pb.cc
              ${PROTO_FILE_PATH}/point_cloud.pb.cc
              ${APP_DIR_SRCS}
              )

1.3 如果选择ORIGINAL模式,需要额外增加ROS包

if(${COMPILE_METHOD} STREQUAL "ORIGINAL")
  add_definitions(-DRUN_IN_ORIGINAL)
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      sensor_msgs
      roslib
      pcl_ros
      pcl_conversions)
  endif(${COMPILE_METHOD} STREQUAL "ORIGINAL")

1.4 由于rslidar_sdk项目中包含子模块驱动内核rs_driver, 因此在执行git clone 后还需要执行相关指令初始化并更新子模块。

git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git
cd rslidar_sdk
git submodule init
git submodule update

下载完毕之后,rs_driver文件夹下会有对应的代码,CMakeLists.txt中添加啦rs_dirver作为子模块添加到工程内。

使用find_package()指令找到rs_driver,然后链接相关库

add_subdirectory(${PROJECT_SOURCE_DIR}/rs_driver)
find_package(rs_driver REQUIRED)
include_directories(${rs_driver_INCLUDE_DIRS})
target_link_libraries(project ${rs_driver_LIBRARIES})

1.5 直接编译

按照如下指令即可编译运行程序。 直接编译也可以使用ROS相关功能(不包括ROS2),但需要在程序启动前手动启动roscore,启动后手动打开rviz才能看到可视化点云结果。

cd rslidar_sdk
mkdir build && cd build
cmake .. && make -j4
./rslidar_sdk_node

1.6 增加自定义点字段的点类型

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

在 /src/msg/rs_msg/lidar_point_cloud_msg.h 文件中,新增点类型

struct RandyPointXYZITD
{
  PCL_ADD_POINT4D;
  uint8_t intensity;
  double timestamp = 0;
  uint8_t id = '0';
  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
} EIGEN_ALIGN16;
POINT_CLOUD_REGISTER_POINT_STRUCT(RandyPointXYZITD, 
                                  (float, x, x)
                                  (float, y, y)
                                  (float, z, z)
                                  (uint8_t, intensity, intensity)
                                  (double, timestamp, timestamp)
                                  (uint8_t, id, id))
    
#ifdef POINT_TYPE_XYZI
typedef pcl::PointXYZI PointT;
#elif POINT_TYPE_XYZIRT

typedef PointXYZIRT PointT;
#elif POINT_TYPE_XYZITD

typedef RandyPointXYZITD PointT;
#endif

1.7 若使用PCL点云,增加PCL库

find_package(PCL QUIET REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

target_link_libraries(randylife                   
                      ${PCL_LIBRARIES}
                      ${YAML_CPP_LIBRARIES}
                      ${rs_driver_LIBRARIES}
                      ${PROTOBUF_LIBRARY}
                      ${catkin_LIBRARIES}
                      ${rosbag_LIBRARIES}
                      yaml-cpp)

2.隐藏功能

隐藏功能可参考代码中说明文档:doc/intro/hiding_parameters_intro_cn.md

2.1 pcap重复播报参数配置

yaml中默认没有`pcap_repeat = true`配置项,需要手工添加,代码中默认true
common:
  msg_source: 1                                         
  send_packet_ros: false                                
  send_point_cloud_ros: false                           
  send_packet_proto: false                              
  send_point_cloud_proto: false                         
  pcap_path: /home/robosense/lidar.pcap                 
  pcap_repeat: true									    
  pcap_rate: 1  		

pcap_rate – 默认值为1,点云频率约为10hz。 用户可调节此参数来控制pcap播放速度,设置的值越大,pcap播放速度越快。

2.2 坐标转换功能(点云标定)

提供了内置的坐标变换功能,可以直接输出经过坐标变换后的点云,显著节省了对点云进行坐标变换的操作耗时,可输出经过坐标变换后的点云。

默认参数也是不显示,需要手动添加

x, y, z, roll, pitch, yaw -- 坐标变换参数,若启用了内核的坐标变换功能,将会使用此参数输出经过变换后的点云。x, y, z, 单位为, roll, pitch, yaw, 单位为弧度。

common:
  msg_source: 1                                       
  send_packet_ros: false                                
  send_point_cloud_ros: true                            
  send_packet_proto: false                              
  send_point_cloud_proto: false                         
  pcap_path: /home/QCJ/lidar.pcap     
lidar:
  - driver:
      lidar_type: RSM1           
      frame_id: /randylidar           
      msop_port: 0213              
      difop_port: 0122             
      start_angle: 0               
      end_angle: 360             
      min_distance: 0.2            
      max_distance: 200           
      use_lidar_clock: false      
      # 增加标定参数
	    x: 1.8
	    y: 0.8
	    z: 2.8
	    roll: 0.8
	    pitch: 0.8
	    yaw: 1.58
	  ros:
      ros_recv_packet_topic: /randylidar_packets          #Topic used to receive lidar packets from ROS
      ros_send_packet_topic: /randylidar_packets          #Topic used to send lidar packets through ROS
      ros_send_point_cloud_topic: /randylidar_points         #Topic used to send point cloud through ROS

具体使用方式可以参考 坐标变换功能(``…/howto/how_to_use_coordinate_transformation_cn.md`) 。

编译时需要增加编译参数:

  cmake -DENABLE_TRANSFORM=ON ..
  make -j4

3. 1.3.10版本结构

rslidar-类关系

初始化流程

创建适配器

创建传输器

读取pcap过程


最新版本增加了读取 速腾M2雷达pcap数据功能,敬请后续更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabView中数组的使用2-1

在LabView中,数组用来管理相同类型的数据。 1 在前面板中创建数组 1.1 创建空数组 在前面板中创建数组时,首先在前面板中点击鼠标右键,弹出“控件”对话框,之后选择“新式->数组、矩阵与簇->数组”,在前面板中…

硬盘格式化工具,强烈推荐这个!

案例:硬盘格式化工具推荐 【我的电脑已经用了好几年了,硬盘存储容量严重不够了,最近想把它格式化,但却不知道怎么操作,大家有什么比较好的硬盘格式化工具可以推荐吗?】 硬盘作为存储设备,我们…

薄膜热电化学电池性能测试中的半导体制冷片高精度度温度控制解决方案

摘要:电化学热电池(electrochemical thermcells)作为用于低品质热源的热电转换技术,是目前可穿戴电子产品的研究热点之一,使用中要求具有一定的温差环境。电化学热电池相应的性能测试就对温度和温差形成提出很高要求&a…

11、HOOK原理上

一、HOOK 1.1 HOOK简介 HOOK,中文译为“挂钩”或“钩子”.在iOS逆向中是指改变程序运行流程的一种技术.通过hook可以让别人的程序执行自己所写的代码. 在逆向中经常使用这种技术重点要了解其原理,这样能够对恶意代码进行有效的防护. 1.2 Hook的应用场景 描述一个HOOK实用技…

由表及里的解读数据仓库

数据仓库作为商业智能BI系统中的一部分,已经成长为了企业信息化建设中必不可少的重要支撑,在可见的未来,数据仓库还会随着信息化、数字化技术、理念、应用的落地,继续成长。 数据仓库是一个面向主题的、集成的、随时间变化但信息…

jd侧边栏以及模态框样式设置

点击图像出现模态框&#xff0c;点击按钮叉叉模态框消失 html css样式&#xff1a; <style> * { padding: 0; margin: 0; } html, body { height: 100%; width: 100%; } li { list-style: none; } .box { position: fixed; bottom: 120px; right: -10px; width: 200px; }…

看完这篇 HTTPS,和面试官扯皮就没问题了

看完这篇 HTTPS&#xff0c;和面试官扯皮就没问题了 下面我们来一起学习一下 HTTPS &#xff0c;首先问你一个问题&#xff0c;为什么有了 HTTP 之后&#xff0c;还需要有 HTTPS &#xff1f;我突然有个想法&#xff0c;为什么我们面试的时候需要回答标准答案呢&#xff1f;为什…

零成本教你部署一个ChatGPT网站

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

BPMN绘制流程的项目推荐

项目简介 Vite Vue Bpmn流程编辑器&#xff0c;基于Bpmn.js&#xff0c; Vite&#xff0c; Vue.js 3.x, Naiveui 实现了 Bpmn.js 和 Diagram.js 的 typescript 类型声明&#xff0c;typescript 可以用来在编辑器中编写代码。 整合项目地址&#xff1a; https://github.com/m…

【JavaScript】4.JavaScript对象

JavaScript 对象 1. 对象 在 JavaScript 中&#xff0c;对象是一组无序的相关属性和方法的集合&#xff0c;所有的事物都是对象&#xff0c;例如字符串、数值、数组、函数等 对象是由属性和方法组成的。 属性&#xff1a;事物的特征&#xff0c;在对象中用属性来表示&#x…

浅谈兼容性测试

兼容性测试的概念 兼容性测试是一种软件测试&#xff0c;用于确保构建的系统/应用程序/网站与其他各种对象&#xff08;如其他网络浏览器、硬件平台、用户、操作系统等&#xff09;的兼容性。这种类型的测试有助于了解产品在特定环境中的表现。 为了方便理解&#xff0c;可以…

java String 和ArrayList转换 换化

[Ljava.lang.String; cannot be cast to java.util.List 原因&#xff1a; Map<String, Object> parameters (Map<String, Object>) jsonResult.getData(); parameters 参数中refrenceIds 是个string &#xff08;比如&#xff1a;"refrenceIds": [&…

媒体查询神器:掌握 CSS3 变革性技术

媒体查询是 CSS3 中的一项重要功能&#xff0c;它使得我们可以针对不同设备和屏幕尺寸应用不同的样式。本文将深入介绍媒体查询的使用方法&#xff0c;以及如何利用媒体查询优化响应式设计。 什么是媒体查询&#xff1f; 媒体查询是 CSS3 的一项新特性&#xff0c;允许我们根据…

聚类算法:Kmeans和Kmeans++算法精讲

前言 其实Kmesns聚类算法在YOLOv2&#xff08;【YOLO系列】YOLOv2论文超详细解读&#xff08;翻译 &#xff0b;学习笔记&#xff09;&#xff09;中我们就见到了&#xff0c;那时候只是简单地了解了一下。后来在这学期的数据挖掘课程的期末汇报中&#xff0c;我又抽中了这个算…

1 分钟给 Siri 升个级!从智Z变身 ChatSiri!

原文链接&#xff1a;https://forum.laf.run/d/79/17 众所周知&#xff0c;Siri 是一个智 Z&#xff01;那么如果能接入大火的 chatGPT&#xff0c;是不是就会从智 Z 变成人工智能&#xff1f;&#xff01; 众所周知&#xff0c;Laf 是一个集函数、数据库、存储为一体的云开发…

opencv-LSD线特征库文件

OpenCv-LSD线特征库使用 下载线特征库文件在工程源码中引入线特征头文件 下载线特征库文件 下面是阿里云盘链接 https://www.aliyundrive.com/s/rPxrmusTNPM 我们需要删掉build文件夹&#xff0c;并重新创建build文件夹。 并在build文件夹打开终端执行以下命令&#xff1a; …

Redis高可用之哨兵挂了,主从库还能切换吗

通过部署多个实例&#xff0c;就形成了一个哨兵集群&#xff0c;哨兵集群中的多个实例共同判断&#xff0c;可以降低对主库下线的误判率。 考虑一个问题&#xff1a;如果有哨兵实例在运行时发生了故障&#xff0c;主从库还能正常切换吗&#xff1f; 实际上&#xff0c;一旦多…

【Java 数据结构】二叉树的经典面试题 (图解)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

【力扣-206】反转链表

&#x1f58a;作者 : Djx_hmbb &#x1f4d8;专栏 : 数据结构 &#x1f606;今日分享 : ----------“覆蕉寻鹿”: 有的人把假的当成真的&#xff0c;而又有人把明明是真的事情当成假的&#xff0c;前者可以说是“黄粱美梦”&#xff0c;后面这种就是“覆蕉寻鹿”。以前有个樵夫…

清理C盘的几种方法,帮你解决C盘爆红的烦恼

目录 C盘空间不足的原因&#xff1a; 清理方法 一、利用Windows自己附带的磁盘清理工具 二、存储设置清理 三、开启自动清理 四、将系统文件夹进行转移 五、清理系统缓存 六、利用清理软件进行清理 C盘空间不足的原因&#xff1a; 我们使用电脑时&#xff0c;c盘总是不知不觉…