rslidar_sdk的安装编译
可以参考官方提供的方法:rslidar_sdk
1.1 通过Git下载
git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git
cd rslidar_sdk
git submodule init
git submodule update
1.2 直接下载.tar.gz
可以从 rslidar_sdk_release 下载最新的 rslidar_sdk
。 应该下载对应的 rslidar_sdk.tar.gz
,而非 source code
源码,源码不带子模块 rs_driver
。
2.1 安装和编译
- 安装依赖
libyaml、libpcap、protobuf
sudo apt-get update
sudo apt-get install -y libyaml-cpp-dev
sudo apt-get install -y libpcap-dev
sudo apt-get install -y libprotobuf-dev protobuf-compiler
这里通过 catkin_ws
来编译:
- 修改
CMakeLists.txt
:
#=======================================
# Compile setup (ORIGINAL,CATKIN,COLCON)
#=======================================
set(COMPILE_METHOD CATKIN)
- 编译
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
3.1. 编译遇到的错误
主要是 libyaml
相关的一系列未定义的引用:
具体如下(部分,方便他人报错检索):
CMakeFiles/rslidar_sdk_node.dir/node/rslidar_sdk_node.cpp.o:在函数‘YAML::TypedBadConversion<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~TypedBadConversion()’中:
rslidar_sdk_node.cpp:(.text._ZN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED2Ev[_ZN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED5Ev]+0xf):对‘YAML::BadConversion::~BadConversion()’未定义的引用
CMakeFiles/rslidar_sdk_node.dir/node/rslidar_sdk_node.cpp.o:在函数‘YAML::TypedBadConversion<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~TypedBadConversion()’中:
rslidar_sdk_node.cpp:(.text._ZN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED0Ev[_ZN4YAML18TypedBadConversionINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEED5Ev]+0x13):对‘YAML::BadConversion::~BadConversion()’未定义的引用
CMakeFiles/rslidar_sdk_node.dir/node/rslidar_sdk_node.cpp.o:在函数‘YAML::TypedBadConversion<int>::~TypedBadConversion()’中:
rslidar_sdk_node.cpp:(.text._ZN4YAML18TypedBadConversionIiED2Ev[_ZN4YAML18TypedBadConversionIiED5Ev]+0xf):对‘YAML::BadConversion::~BadConversion()’未定义的引用
CMakeFiles/rslidar_sdk_node.dir/node/rslidar_sdk_node.cpp.o:在函数‘YAML::TypedBadConversion<int>::~TypedBadConversion()’中:
rslidar_sdk_node.cpp:(.text._ZN4YAML18TypedBadConversionIiED0Ev[_ZN4YAML18TypedBadConversionIiED5Ev]+0x13):对‘YAML::BadConversion::~BadConversion()’未定义的引用
CMakeFiles/rslidar_sdk_node.dir/node/rslidar_sdk_node.cpp.o:在函数‘YAML::TypedBadConversion<bool>::~TypedBadConversion()’中:
rslidar_sdk_node.cpp:(.text._ZN4YAML18TypedBadConversionIbED2Ev[_ZN4YAML18TypedBadConversionIbED5Ev]+0xf):对‘YAML::BadConversion::~BadConversion()’未定义的引用
CMakeFiles/rslidar_sdk_node.dir/node/rslidar_sdk_node.cpp.o:rslidar_sdk_node.cpp:(.text._ZN4YAML18TypedBadConversionIbED0Ev[_ZN4YAML18TypedBadConversionIbED5Ev]+0x13): 跟着更多未定义的参考到 YAML::BadConversion::~BadConversion()
3.2. 解决问题
- 问题的核心是
catkin
没有找到 libyaml
:
- 修改
CMakeLists.txt
如下:
主要是重新链接libyaml
target_link_libraries(rslidar_sdk_node yaml-cpp)
在CMakeLists.txt
中具体如下:
#========================
# Build Setup
#========================
#Protobuf#
if(NOT PROTOC MATCHES "NOTFOUND" AND Protobuf_FOUND)
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
)
target_link_libraries(rslidar_sdk_node yaml-cpp) ## 增加的内容
target_link_libraries(rslidar_sdk_node
${PCL_LIBRARIES}
${YAML_CPP_LIBRARIES}
${PROTOBUF_LIBRARY}
${rs_driver_LIBRARIES}
)
else(NOT PROTOC MATCHES "NOTFOUND" AND Protobuf_FOUND)
add_executable(rslidar_sdk_node
node/rslidar_sdk_node.cpp
src/manager/adapter_manager.cpp
)
target_link_libraries(rslidar_sdk_node yaml-cpp) ## 增加的内容
target_link_libraries(rslidar_sdk_node
${PCL_LIBRARIES}
${YAML_CPP_LIBRARIES}
${rs_driver_LIBRARIES}
)
结果编译成功
- 若仍然报错,可以下载
yaml-cpp
进行编译
首先下载yaml-cpp
, 链接地址如下: yaml-cpp
然后进入解压,进入文件夹编译:
mkdir build
cd build
cmake .. DYAML_BUILD_SHARED_LIBS=ON
make -j8
sudo make install
最后重新按照 3.2
来编译即可