官方网址:

https://github.com/RoboSense-LiDAR/rslidar_sdk/blob/main/README_CN.mdhttps://github.com/RoboSense-LiDAR/rslidar_sdk/blob/main/README_CN.md

参考文章:

https://blog.csdn.net/qq_59475883/article/details/130246497?fromshare=blogdetail&sharetype=blogdetail&sharerId=130246497&sharerefer=PC&sharesource=2201_76065173&sharefrom=from_linkhttps://blog.csdn.net/qq_59475883/article/details/130246497?fromshare=blogdetail&sharetype=blogdetail&sharerId=130246497&sharerefer=PC&sharesource=2201_76065173&sharefrom=from_link一下载ros:

ros推荐鱼香ros大佬的一键安装参考文章如下ROS的最简单安装——鱼香一键安装_鱼香ros-CSDN博客https://blog.csdn.net/m0_73745340/article/details/135281023?ops_request_misc=elastic_search_misc&request_id=4889802b2703e62895e880e32d6bdefb&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-3-135281023-null-null.142^v102^pc_search_result_base3&utm_term=%E9%B1%BC%E9%A6%99%E8%82%89%E4%B8%9Dros%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85&spm=1018.2226.3001.4187

二下载驱动包和依赖配置:

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

二、配置雷达类型,参数,话题等:

参考官网:

nullhttps://github.com/RoboSense-LiDAR/rslidar_sdk/blob/main/doc/intro/02_parameter_intro_CN.md

2.1:打开rslidar_sdk文件夹下的CMakeLists.txt文件,将变量POINT_TYPE改为XYZIRT

坐标XYZ;强度I;线束编号R;T时间戳;回波次数F

2.2打开rslidar_sdk/config/config.yaml文件

  1. rslidar_sdk读取配置文件 config.yaml,得到所有的参数。
  2. config.yaml遵循YAML格式。修改config.yaml之后,请确保每行开头的缩进仍保持一致!
  3. config.yaml包括两部分:common部分 和 lidar部分

修改send_packet_ros为true,lidar_type为RS32

三、编译

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

遇到编译失败:

Scanning dependencies of target rslidar_sdk_node
[ 33%] Building CXX object rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/src/manager/node_manager.cpp.o
[ 66%] Building CXX object rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/node/rslidar_sdk_node.cpp.o
In file included from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/input/input_factory.hpp:42:0,
                 from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/lidar_driver_impl.hpp:41,
                 from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/api/lidar_driver.hpp:35,
                 from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/source/source_driver.hpp:37,
                 from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/manager/node_manager.cpp:34:
/home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/input/input_pcap.hpp:43:18: fatal error: pcap.h: No such file or directory
compilation terminated.
rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/build.make:86: recipe for target 'rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/src/manager/node_manager.cpp.o' failed
make[2]: *** [rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/src/manager/node_manager.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
CMakeFiles/Makefile2:439: recipe for target 'rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/all' failed
make[1]: *** [rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

更新一下依赖库:

sudo apt-get update
sudo apt-get install libpcap-dev

编译遇到下面std::unordered_map 无法为自定义枚型 robosense::lidar::LidarType 自动生成哈希函数,导致模板实例化错误。同时初始化列表的写法也可能有语法问题


                                                     /usr/include/c++/5/bits/unordered_map.h:125:47: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
       typedef typename _Hashtable::size_type  size_type;
                                               ^
/usr/include/c++/5/bits/unordered_map.h:126:52: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
       typedef typename _Hashtable::difference_type difference_type;
                                                    ^
/usr/include/c++/5/bits/unordered_map.h:280:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
       operator=(initializer_list<value_type> __l)
       ^
/usr/include/c++/5/bits/unordered_map.h:379:2: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
  emplace(_Args&&... __args)
  ^
/usr/include/c++/5/bits/unordered_map.h:432:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
       insert(const value_type& __x)
       ^
/usr/include/c++/5/bits/unordered_map.h:439:2: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
  insert(_Pair&& __x)
  ^
/usr/include/c++/5/bits/unordered_map.h:499:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
       insert(initializer_list<value_type> __l)
       ^
/usr/include/c++/5/bits/unordered_map.h:645:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
       equal_range(const key_type& __x)
       ^
/usr/include/c++/5/bits/unordered_map.h:649:7: error: ‘value’ is not a member of ‘std::__not_<std::__and_<std::__is_fast_hash<std::hash<robosense::lidar::LidarType> >, std::__detail::__is_noexcept_hash<robosense::lidar::LidarType, std::hash<robosense::lidar::LidarType> > > >’
       equal_range(const key_type& __x) const
       ^
In file included from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/lidar_driver_impl.hpp:35:0,
                 from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/api/lidar_driver.hpp:35,
                 from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/source/source_driver.hpp:37,
                 from /home/alientek/RS_Helios_32/src/rslidar_sdk/src/manager/node_manager.cpp:34:
/home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/driver_param.hpp: In function ‘std::__cxx11::string robosense::lidar::lidarTypeToStr(const robosense::lidar::LidarType&)’:
/home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/driver_param.hpp:117:5: error: too many initializers for ‘const std::unordered_map<robosense::lidar::LidarType, std::__cxx11::basic_string<char> >’
     };
     ^
/home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/driver_param.hpp:119:28: error: ‘const class std::unordered_map<robosense::lidar::LidarType, std::__cxx11::basic_string<char> >’ has no member named ‘find’
     auto it = lidarTypeMap.find(type);
                            ^
/home/alientek/RS_Helios_32/src/rslidar_sdk/src/rs_driver/src/rs_driver/driver/driver_param.hpp:120:28: error: ‘const class std::unordered_map<robosense::lidar::LidarType, std::__cxx11::basic_string<char> >’ has no member named ‘end’
     if (it != lidarTypeMap.end()) {
                            ^
rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/build.make:86: recipe for target 'rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/src/manager/node_manager.cpp.o' failed
make[2]: *** [rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/src/manager/node_manager.cpp.o] Error 1
CMakeFiles/Makefile2:439: recipe for target 'rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/all' failed
make[1]: *** [rslidar_sdk/CMakeFiles/rslidar_sdk_node.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed
alientek@ubuntu16:~/RS_Helios_32$ 

解决方案:

将 std::unordered_map 替换为 std::map。因为 std::map 使用比较运算符(<)来排序元素,这对于枚举类型默认是有效的,不需要额外定义哈希函数。

更多推荐