欢迎光临
我们一直在努力

Ubuntu22.04在ROS2环境配置Livox-Mid70激光雷达

        最近在做激光雷达方面的工作时,发现网上关于Mid-70在ROS2环境里配置的文档教程很少,于是在琢磨了半天后总算配置好了。第一次发博客,这方面的知识也不充足,如有错误之处还望指出。

一、连接上激光雷达

        首先将自己的电脑静态IP改为与激光雷达同一局域频段下。

        

        点击有线右边的“设置”按钮,选择“IP4”,然后点击“手动”,然后将地址和子网掩码改成这样的形式,地址192.168.1.是激光雷达的局域频段,我这里选的是50(注意不能与自己的激光雷达的静态IP一致)。网关不需要设置,我这里随便设置了一下。

        

        设置好之后点击“应用”就行。

        除此之外还有一种方法,就是使用ifconfig来设置电脑IP。

ifconfig

        然后选择属于自己的网口名称

        我这里是enp7s0,使用的时候需要改成自己的网口名称。

sudo ifconfig enp7s0 192.168.1.50

        改好之后的效果如下

                

        接下来再连接雷达,看能不能接收到

ping 192.168.1.100

        这里要填的地址是雷达的静态地址,格式是192.168.1.1XX,将XX改为自己雷达的SN码,具体的SN码需要查看激光雷达背后右下角二维码的那一串数字的最后两位(不过我当时到这一步花了很久的时间,因为雷达上的SN码明明是09,但怎么都ping不上,结果最后改成00就ping上了)

        出现这种情况就代表能够连接到激光雷达了。

二、Livox-ros2-driver驱动安装

        首先需要将官方的驱动克隆到工作空间的src目录下

cd ~/livox_ws/src
git clone https://github.com/Livox-SDK/livox_ros2_driver.git

        在克隆到仓库之后,再对其中的livox-ros2-driver包里的CMakeLists.txt进行修改,由于不知道为什么cmake配置文件找不到我的Livox-SDK,所以我只能手动设置路径。

CMakeLists.txt:

# Copyright(c) 2020 livoxtech limited.

cmake_minimum_required(VERSION 3.5)
project(livox_ros2_driver)

# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic -Wno-unused-parameter)
endif()

# 启用政策以消除PCL_ROOT警告
cmake_policy(SET CMP0074 NEW)

# Printf version info
include(cmake/version.cmake)
project(${PROJECT_NAME} VERSION ${LIVOX_ROS_DRIVER_VERSION} LANGUAGES CXX)
message(STATUS "${PROJECT_NAME} version: ${LIVOX_ROS_DRIVER_VERSION}")

# 恢复ament_cmake_auto依赖
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()

# 关键修正:查找编译后的接口包名 livox_interfaces(而非源码包名)
find_package(livox_interfaces REQUIRED)

find_package(PCL REQUIRED)

# 手动指定Livox SDK的路径和库文件
set(LIVOX_SDK_INCLUDE_DIRS /usr/local/include)
set(LIVOX_SDK_LIBRARIES /usr/local/lib/liblivox_sdk_static.a)

# 检查apr
find_package(PkgConfig)
pkg_check_modules(APR apr-1)
if (APR_FOUND)
message(${APR_INCLUDE_DIRS})
message(${APR_LIBRARIES})
endif (APR_FOUND)

# PCL library
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

# livox ros2 driver target
ament_auto_add_library(${PROJECT_NAME} SHARED
livox_ros2_driver/lvx_file.cpp
livox_ros2_driver/ldq.cpp
livox_ros2_driver/lds.cpp
livox_ros2_driver/lds_lvx.cpp
livox_ros2_driver/lds_lidar.cpp
livox_ros2_driver/lds_hub.cpp
livox_ros2_driver/lddc.cpp
livox_ros2_driver/livox_ros2_driver.cpp
timesync/timesync.cpp
timesync/user_uart/user_uart.cpp
common/comm/comm_protocol.cpp
common/comm/sdk_protocol.cpp
common/comm/gps_protocol.cpp
)

target_compile_options(${PROJECT_NAME}
PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wno-missing-field-initializers -fPIC>
)

# 使用手动指定的头文件路径
target_include_directories(${PROJECT_NAME} PRIVATE ${LIVOX_SDK_INCLUDE_DIRS})

# include file directory
target_include_directories(${PROJECT_NAME} PUBLIC
${PCL_INCLUDE_DIRS}
${APR_INCLUDE_DIRS}
${livox_interfaces_INCLUDE_DIRS} # 接口包头文件路径
common
common/rapidjson
common/rapidxml
common/comm
timesync
timesync/user_uart
livox_ros2_driver
)

# 链接库时添加interfaces依赖
target_link_libraries(${PROJECT_NAME}
${LIVOX_SDK_LIBRARIES}
${Boost_LIBRARY}
${PCL_LIBRARIES}
${APR_LIBRARIES}
${livox_interfaces_LIBRARIES} # 接口包库文件
usb-1.0
)

# 声明依赖关系(确保编译顺序)
ament_target_dependencies(${PROJECT_NAME}
livox_interfaces
)

rclcpp_components_register_node(${PROJECT_NAME}
PLUGIN "livox_ros::LivoxDriver"
EXECUTABLE ${PROJECT_NAME}_node
)

if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()

ament_auto_package(INSTALL_TO_SHARE
config
launch
)

三、安装Livox-SDK

        其实这一步应该写在第二步之前的,但是我的Livox-SDK是安装在前面的驱动里,所以就先把安装驱动写出来了,还有就是需要在驱动文件夹livox-ros2-driver里面的克隆官方的SDK仓库

git clone https://github.com/Livox-SDK/Livox-SDK.git

        之后进入到build文件夹下编译一下cmake再安装就行,这里的cmake需要添加-fPIC后续ROS编译才能过(当然可能是我太菜了,没发现原因)

cmake -DCMAKE_CXX_FLAGS="-fPIC" \\
-DCMAKE_C_FLAGS="-fPIC" \\
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \\
..

make -j8

sudo make install

        但是当我在make的时候出现了一个缺失头文件的报错

        检查之后发现是sdk_core/src/base/thread_base.h和sdk_core/src/base/thread_base.cpp里缺少了memory头文件,直接在这两个文件里添加上#include <memory>就行了。

        顺便提一嘴卸载Livox-SDK的方法,直接删除掉安装在/usr/local/里的文件就行了

# 删除库文件
sudo rm -f /usr/local/lib/liblivox_sdk_static.a
sudo rm -f /usr/local/lib/liblivox_sdk_shared.so*

# 删除头文件
sudo rm -rf /usr/local/include/livox/
sudo rm -rf /usr/local/include/livox_sdk/

四、运行驱动包里launch内置的rviz文件来显示点云

        先将工作空间里的livox_interfaces和livox_sdk_vendor编译完成后再编译剩下的livox-ros2-driver驱动包就行了。

cd ~/livox_ws
colcon build –packages-select livox_interfaces
colcon build –packages-select livox_sdk_vendor
colcon build –packages-select livox_ros2_driver

        注意这里我是将source install/setup.bash这一步写在了环境变量里,所以不需要运行,不过好像直接编译全部包就行了,没必要这么麻烦了。

        这里不知道为什么不像Mid-360一样把可以运行的雷达型号写在文件名里,查了一下发现是这四个文件可以启动Mid-70。

                livox_lidar_launch.py                 仅启动激光雷达驱动(默认 Pointcloud2 格式)
                livox_lidar_msg_launch.py                 启动驱动(自定义点云格式)
                livox_lidar_rviz_launch.py                 启动驱动 + Rviz 可视化(默认格式)
                livox_template_launch.py                 启动驱动 + Rviz(默认格式,含退出联动)

        然后在选择的文件里将广播码修改为自己雷达的就行了,在确保连接好了雷达之后运行程序应该就可以显示出画面了。

赞(0)
未经允许不得转载:171主机测评 » Ubuntu22.04在ROS2环境配置Livox-Mid70激光雷达
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址