WSL2部署Livox_ROS_SDK踩坑
WSL2部署Livox_ROS_SDK踩坑
环境
Windows 11, WSL2, Ubuntu 20.04, ROS Noetic, Livox SDK, Livox ROS Driver
ROS Noetic
使用一键安装脚本安装ROS Noetic
1 | wget http://fishros.com/install -O fishros && . fishros |
Livox SDK
1 | git clone https://github.com/Livox-SDK/Livox-SDK.git |
Livox ROS Driver
1 | git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src |
遇到的问题
- 问题:cmake报错c++: fatal error: Killed signal terminated program cc1plus
- 解决:限制并行编译数,使用单线程编译,降低内存峰值:
1
2
3make -j1
# 或者
cmake --build . -- -j1
Livox ROS Driver运行
1 | roslaunch livox_ros_driver livox_lidar_rviz.launch |
遇到的问题
- 问题:使用WSL2的Mirrors时,可能会出现无法连接到设备的问题,导致在RViz中无法显示点云数据,但是在Livox Viewer中可以正常显示。
- 解决:可能由于Livox_ROS_Driver1无法选择Lidar所在的子网,只扫描了默认网课loopback0。则修改为使用WSL2的Bridged桥接模式。
在Hyper-V管理器中添加虚拟交换机:
- 打开Hyper-V管理器
- 选择“虚拟交换机管理器”
- 选择“新建虚拟网络交换机”,选择“外部”,命名为
Livox_Bridged
- 选择要连接的物理网卡,点击“确定”
修改WSL2的c盘用户目录的配置文件
.wslconfig
,添加如下内容:1
2
3[wsl2]
networkingMode=bridged
vmSwitch=Livox_Bridged # 刚才设置的虚拟交换机重启WSL2
1
wsl --shutdown
在WSL中设置固定ip
1
sudo vim /usr/lib/systemd/network/wsl_external.network
1
2
3
4
5
6
7[Match]
Name=eth0
[Network]
Description=bridge
DHCP=false
Address=192.168.1.140/24
Gateway=192.168.1.1
livox_camera_lidar_calibration
参考官方安装教程
遇到的问题
问题:ceres版本不兼容,需要替换为apt源的ceres1.4
解决:
1
2
3
4
5
6
7
8
9
10
11
12
13# 1⃣ 彻底删除 /usr/local 下的旧痕迹
sudo rm -rf /usr/local/include/ceres
sudo rm -rf /usr/local/lib/libceres*
sudo rm -rf /usr/local/lib/cmake/Ceres
# 2⃣ 确保只装官方包(1.14)
sudo apt update
sudo apt install --reinstall libceres-dev
# 3⃣ 清理工作空间缓存再编
cd ~/ws_livox
rm -rf build devel
catkin_make -j$(nproc)问题:/usr/include/pcl-1.10/pcl/common/impl/io.hpp:73:7: note: no known conversion for argument 1 from ‘const pcl::PCLPointField’ to ‘const int&’
解决:
PCL字段索引错误1
2
3
4
5
6
7
8
9
10
11# 进入包源码目录
cd ~/ws_livox/src/livox_camera_lidar_calibration
# 用 sed 快速替换所有潜在写法
sed -i 's/getFieldIndex\s*(\s*cloud\.fields\[[^]]*\]/getFieldIndex(cloud.fields/' src/color_lidar_display.cpp
# 重新编译:
cd ~/ws_livox
rm -rf build devel # 清掉上次失败的中间文件
catkin_make -j$(nproc)问题:PCL 1.10 的很多内部实现(尤其是 pcl/common/io.hpp 里的 auto λ表达式)用到了 generic lambda,而 generic lambda 只在 C++14 及以后 才被支持。当前的 CMAKE_CXX_FLAGS = -std=c++11,于是编译器在替换模板时疯狂报「no match for call … const int&」。
解决:Generic Lambda 需要 C++14 或以上
在CMakeLists.txt
中加入:1
2set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)完整的
CMakeLists.txt
文件如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76cmake_minimum_required(VERSION 3.0.2)
project(camera_lidar_calibration)
## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)
#set(CMAKE_BUILD_TYPE "Release")
#set(CMAKE_CXX_FLAGS "-std=c++11")
#set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_compile_options(-O3 -Wall)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
pcl_conversions
pcl_ros
cv_bridge
)
find_package(PCL REQUIRED)
find_package(OpenCV)
find_package(Threads)
find_package(Ceres REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")
catkin_package(
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
${catkin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
add_executable(cameraCalib src/cameraCalib.cpp)
target_link_libraries(cameraCalib ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
add_executable(pcdTransfer src/pcdTransfer.cpp src/common.h)
target_link_libraries(pcdTransfer ${catkin_LIBRARIES} ${PCL_LIBRARIES})
add_executable(cornerPhoto src/corner_photo.cpp src/common.h)
target_link_libraries(cornerPhoto ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
add_executable(getExt1 src/cam_lid_external1.cpp src/common.h)
target_link_libraries(getExt1 ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${CERES_LIBRARIES})
add_executable(getExt2 src/cam_lid_external2.cpp src/common.h)
target_link_libraries(getExt2 ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${CERES_LIBRARIES})
add_executable(projectCloud src/projectCloud.cpp src/common.h)
target_link_libraries(projectCloud ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
add_executable(colorLidar src/color_lidar_display.cpp src/common.h)
target_link_libraries(colorLidar ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} ${CERES_LIBRARIES})
参考资料
- 鱼香 ROS 一键安装脚本
- Livox-SDK GitHub
- Livox-ROS-Driver GitHub
- WSL2 桥接网络并固定 IP 方法 (CSDN)
- ChatGPT o3 Model
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yrian's Blog!
评论