在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

🚀 Fast-LIO 安装与运行指南

我之前已经创建并使用原有的工作空间 catkin_ws,如果没有创建一个。
使用环境 ubantu20.04 ros1 noetic版本

我作的是要在已有的 ~/catkin_ws 中编译 原版 FAST-LIO(来自 HKU-MARS 官方仓库)。

最终下载官方文档中的示例文件:建议安装前阅读一下

https://drive.google.com/drive/folders/1CGYEJ9-wWjr8INyan6q1BZz_5VtGB-fP

官方git地址:建议安装前阅读一下

https://github.com/hku-mars/FAST_LIO

下面是一份 基于你现有工作空间的完整安装步骤


🔹 在 ~/catkin_ws 中安装 FAST-LIO(原版)

1. 进入工作空间

cd ~/catkin_ws/src

2. 克隆 FAST-LIO

git clone https://github.com/hku-mars/FAST_LIO.git

此时 ~/catkin_ws/src 下会多出 FAST_LIO 文件夹。


3. 安装依赖

如果你已经装了 ROS,一般会自带 PCL 和 Eigen,无需重复安装。只需查看具体版本等,版本之间还有适配问题,编译fastlio时候出问题建议先看后面出现过的问题。一般pcl会要求eigen是3.3.10的或以上,这里第一部安装的或者原有的多半版本较低,后面如果报错在解决也可以。

(1) Eigen

sudo apt install libeigen3-dev

(2) PCL

Ubuntu 20.04 默认 PCL=1.10.0,一般满足需求:

sudo apt install libpcl-dev

(3) Sophus(必需)

cd ~/catkin_ws/src
git clone https://github.com/strasdat/Sophus.git
cd Sophus
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

(4) Livox-SDK & Livox ROS Driver

⚠️ 如果要用 Livox 激光雷达,必须安装。

# SDK
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install# ROS Driver
cd ~/catkin_ws/src
git clone https://github.com/Livox-SDK/livox_ros_driver.git
cd ~/catkin_ws
catkin_make

然后写入 ~/.bashrc,避免忘记 source:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

4. 编译 FAST-LIO

回到工作空间根目录:

cd ~/catkin_ws
catkin_make

5. 运行 FAST-LIO

(1) Source 环境变量

source ~/catkin_ws/devel/setup.bash

(2) 启动 FAST-LIO

假设你用 Livox Avia 激光雷达:

roslaunch sfast_lio mapping_avia.launch

在另一个终端播放 rosbag 数据:

rosbag play 你下载的或者自己的数据名字.bag

源码的测试数据下载地质:https://drive.google.com/drive/folders/1CGYEJ9-wWjr8INyan6q1BZz_5VtGB-fP 任意一个即可。


5. 注意事项

  1. 编译顺序

    • 先安装 Eigen / PCL
    • 再编译 Livox SDK + Livox ROS Driver
    • 最后编译 FAST-LIO
  2. 环境变量

    • 每次开新终端记得 source,建议写到 ~/.bashrc
  3. Sophus

    • 如果没有 Sophus,需要先安装:

      git clone https://github.com/strasdat/Sophus.git
      cd Sophus
      mkdir build && cd build
      cmake ..
      make
      sudo make install
      

📌 建议你按照我整理的步骤来操作,能大概率一次跑通。

Sophus版本问题、cmake版本问题、sim3问题

**

首先千万不要升级cmake,因为后面很多包都指定他的版本,贸然升级会带来很多麻烦。

**
看到了 👍,你这里 Sophus 报错:

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):CMake 3.24 or higher is required.  You are running version 3.16.3

这是因为 系统自带的 CMake (3.16.3, Ubuntu 20.04 默认版本) 太低,而 Sophus 的最新版要求 CMake ≥ 3.24


解决方案有两个方向:

✅ 方案 1:使用老版本的 Sophus(推荐)

FAST-LIO 并不需要 Sophus 的最新版,用旧版本即可。
~/catkin_ws/src 下删除原来的 Sophus,然后切换到合适的 tag:

cd ~/catkin_ws/src
rm -rf Sophus
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff  # 这个版本常用于 FAST-LIO,兼容 CMake 3.16
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

✅ 方案 2:升级 CMake(不太推荐)

如果你坚持用 Sophus 最新版,需要升级 CMake。Ubuntu 20.04 默认是 3.16,可以手动升级:

sudo apt purge cmake
sudo snap install cmake --classic
cmake --version   # 应该会显示 3.28+

然后重新编译 Sophus。


🚀 建议

我推荐 方案 1(换旧版 Sophus),这样不需要动 CMake,和 ROS/FAST-LIO 的兼容性最好。

要不要我帮你直接查一下 最适合 FAST-LIO 的 Sophus 版本号,然后你就按我给的版本去 git checkout

最后解决成功的方法是切换Sophus到旧版本,然后会报sim3的错误,不要注释和删除文件,将cmakelist中的 一行注释调。

#ADD_DEFINITIONS("-Wall -Werror -Wno-unused-variable

-Wno-unused-but-set-variable -Wno-unknown-pragmas ")

SET(PROJECT_NAME Sophus)PROJECT(${PROJECT_NAME})
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)SET (CMAKE_VERBOSE_MAKEFILE ON)IF( NOT CMAKE_BUILD_TYPE )SET( CMAKE_BUILD_TYPE Release )
ENDIF()IF (CMAKE_COMPILER_IS_GNUCXX )SET(CMAKE_CXX_FLAGS_DEBUG  "-O0 -g")SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG ")#ADD_DEFINITIONS("-Wall -Werror -Wno-unused-variable#                -Wno-unused-but-set-variable -Wno-unknown-pragmas ")
ENDIF()################################################################################
# Add local path for finding packages, set the local version first
set( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" )
list( APPEND CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules" )################################################################################
# Create variables used for exporting in SophusConfig.cmake
set( Sophus_LIBRARIES "" )
set( Sophus_INCLUDE_DIR ${PROJECT_SOURCE_DIR} )#################################################################################SET (INCLUDE_DIRS "../eigen3.1/")
find_package( Eigen3 REQUIRED )
INCLUDE_DIRECTORIES( ${EIGEN3_INCLUDE_DIR} )
SET( Sophus_INCLUDE_DIR ${Sophus_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIR} )SET (SOURCE_DIR "sophus")
SET (CLASSES  so2se2se3so3scso3sim3
)SET (SOURCES)FOREACH(class ${CLASSES})LIST(APPEND SOURCES ${SOURCE_DIR}/${class}.cpp ${SOURCE_DIR}/${class}.h)
ENDFOREACH(class)LINK_LIBRARIES (${PROJECT_NAME} ${LIBS})set( Sophus_LIBRARIES ${Sophus_LIBRARIES} ${LIBS} )INCLUDE_DIRECTORIES(${INCLUDE_DIRS})
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SOURCES})ADD_EXECUTABLE(test_so2 sophus/test_so2.cpp)
ADD_EXECUTABLE(test_se2 sophus/test_se2.cpp)
ADD_EXECUTABLE(test_so3 sophus/test_so3.cpp)
ADD_EXECUTABLE(test_scso3 sophus/test_scso3.cpp)
ADD_EXECUTABLE(test_se3 sophus/test_se3.cpp)
ADD_EXECUTABLE(test_sim3 sophus/test_sim3.cpp)
ENABLE_TESTING()ADD_TEST(test_so2 test_so2)
ADD_TEST(test_se2 test_se2)
ADD_TEST(test_so3 test_so3)
ADD_TEST(test_scso3 test_scso3)
ADD_TEST(test_se3 test_se3)
ADD_TEST(test_sim3 test_sim3)##############################################################################
# Get full library name
GET_TARGET_PROPERTY( FULL_LIBRARY_NAME ${PROJECT_NAME} LOCATION )
set( Sophus_LIBRARIES ${Sophus_LIBRARIES} ${FULL_LIBRARY_NAME} )
set( Sophus_LIBRARY_DIR ${PROJECT_BINARY_DIR} )################################################################################
# Create the SophusConfig.cmake file for other cmake projects.
CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/SophusConfig.cmake.in${CMAKE_CURRENT_BINARY_DIR}/SophusConfig.cmake @ONLY IMMEDIATE )
export( PACKAGE Sophus )INSTALL(DIRECTORY sophus DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" )
INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib )

Eigen 版本过低问题,与PCL不兼容

error: ‘Index’ is not a member of ‘Eigen’; did you mean ‘flann::Index’?
for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)

从新的错误日志来看,核心问题是 Eigen 版本与 PCL 版本不兼容,导致编译器无法识别 Eigen::Index 类型。以下是具体分析和分步解决方法:

一、错误原因解析

错误日志中关键信息:

error: ‘Index’ is not a member of ‘Eigen’; did you mean ‘flann::Index’?
for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)
  • Eigen::IndexEigen 3.3.9 及以上版本 才引入的类型(用于表示矩阵/向量的索引,替代传统的 int)。
  • 你的环境中可能安装了 低版本 Eigen(如 3.3.7 或更早),而当前使用的 PCL 1.10 版本依赖 Eigen::Index,导致类型未定义错误。

二、解决步骤(核心:升级 Eigen 到兼容版本)

步骤 1:检查当前 Eigen 版本

先确认系统中已安装的 Eigen 版本,执行命令:

# 查看 Eigen 版本文件
cat /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h | grep EIGEN_WORLD_VERSION -A 2
  • 输出格式如下,若 EIGEN_WORLD_VERSION=3EIGEN_MAJOR_VERSION=3EIGEN_MINOR_VERSION<9(如 7),则版本过低,需升级:
    #define EIGEN_WORLD_VERSION 3
    #define EIGEN_MAJOR_VERSION 3
    #define EIGEN_MINOR_VERSION 7  // 低于 9,需升级
    
步骤 2:卸载旧版本 Eigen(可选,避免冲突)

若旧版本 Eigen 安装在 /usr/local/include/eigen3,执行以下命令删除(注意:若其他软件依赖旧版本,需谨慎,可跳过此步直接覆盖安装):

sudo rm -rf /usr/local/include/eigen3
sudo rm -rf /usr/local/lib/cmake/eigen3  # 清除 CMake 配置
步骤 3:安装 Eigen 3.3.9(兼容 PCL 1.10 的稳定版本)
  1. 下载 Eigen 3.3.9 源码包:

    cd ~/Downloads  # 进入下载目录
    wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz
    
  2. 解压并编译安装:

    tar -zxvf eigen-3.3.9.tar.gz  # 解压
    cd eigen-3.3.9
    mkdir build && cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local  # 安装到系统默认路径
    sudo make install  # 安装(需管理员权限)
    
  3. 验证安装:
    再次执行步骤 1 的版本检查命令,确认版本已更新为 3.3.9:

    cat /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h | grep EIGEN_WORLD_VERSION -A 2
    

    正确输出应为:

    #define EIGEN_WORLD_VERSION 3
    #define EIGEN_MAJOR_VERSION 3
    #define EIGEN_MINOR_VERSION 9
    
步骤 4:清理 fast_lio 旧编译缓存并重新编译

由于之前编译残留了旧 Eigen 版本的配置,需先清理缓存,再重新编译:

# 进入工作空间,清理 fast_lio 的编译目录
cd ~/catkin_ws
rm -rf build/fast_lio devel/.private/fast_lio  # 删除旧编译文件和devel文件# 重新编译 fast_lio(或整个工作空间)
catkin build fast_lio  # 仅编译 fast_lio,速度更快
# 或 catkin build  # 编译整个工作空间

从执行的命令结果来看,当前系统安装的 Eigen 版本是 3.2.10(EIGEN_WORLD_VERSION=3, EIGEN_MAJOR_VERSION=2, EIGEN_MINOR_VERSION=10),这个版本远低于 PCL 1.10 所需的 Eigen 3.3.9 及以上版本,这正是导致 Eigen::Index 未定义错误的根本原因(Eigen::Index 是 Eigen 3.3 系列才引入的特性,3.2 版本完全不支持)。

需要按照以下步骤彻底替换为 Eigen 3.3.9 版本,才能解决编译错误:

一、彻底删除旧版本 Eigen 3.2.10

由于旧版本 Eigen(3.2.10)安装在系统默认路径 /usr/local/include/eigen3,必须先完全删除,避免新版本安装后仍被优先调用:

# 1. 删除 Eigen 头文件目录(核心步骤)
sudo rm -rf /usr/local/include/eigen3# 2. 删除 Eigen 的 CMake 配置文件(避免编译时引用旧配置)
sudo rm -rf /usr/local/lib/cmake/eigen3
sudo rm -rf /usr/local/share/eigen3# 3. 检查是否有其他残留(可选,确保彻底删除)
sudo find /usr/local -name "*eigen*" | grep -E "eigen3|Eigen"  # 查看残留文件
# 若输出其他与 Eigen 3.2.10 相关的路径,可手动删除(注意不要误删其他文件)

二、重新安装 Eigen 3.3.9(兼容 PCL 1.10 的稳定版本)

步骤 1:下载 Eigen 3.3.9 源码
# 进入下载目录(如 ~/Downloads,方便后续操作)
cd ~/Downloads# 下载 Eigen 3.3.9 源码包(通过官方链接,确保文件完整)
wget https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz
步骤 2:解压并编译安装
# 解压源码包
tar -zxvf eigen-3.3.9.tar.gz# 进入解压后的目录
cd eigen-3.3.9# 创建 build 目录并编译(Eigen 是头文件库,编译仅生成配置文件,无二进制文件)
mkdir build && cd build# 配置安装路径(默认安装到 /usr/local,与旧版本路径一致,确保后续能被找到)
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local# 执行安装(需管理员权限,将头文件和配置文件复制到系统路径)
sudo make install

三、验证 Eigen 版本是否正确更新

安装完成后,再次执行版本检查命令,确认已替换为 3.3.9:

cat /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h | grep EIGEN_WORLD_VERSION -A 2

正确输出应为(版本号需满足 3.3.9):

#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 9

若输出仍为 3.2.10,需重新检查步骤 1 是否彻底删除旧版本,或尝试重启终端后再检查(终端可能缓存了旧路径)。

四、清理 fast_lio 旧编译缓存并重新编译

由于之前的编译过程中已缓存了旧 Eigen 3.2.10 的配置,必须删除缓存后重新编译,否则仍会报错:

# 进入工作空间
cd ~/catkin_ws# 删除 fast_lio 的旧编译目录和 devel 目录(关键:清除缓存)
rm -rf build/fast_lio devel/.private/fast_lio# 重新编译 fast_lio(仅编译单个包,速度更快)
catkin build fast_lio

关键说明

Eigen 是头文件库(无 .so 等二进制文件,仅需头文件引用),因此“升级”的核心是用高版本头文件覆盖低版本。之前的错误本质是“3.2 版本头文件中没有 Eigen::Index 类型”,只要确保编译时引用的是 3.3.9 版本的头文件,Eigen::Index 相关错误就会消失。

若执行上述步骤后仍报错,可在编译时添加“查看头文件引用路径”的参数,确认是否正确引用了 3.3.9 版本:

# 编译时显示 Eigen 头文件的实际引用路径(用于排查问题)
catkin build fast_lio -DCMAKE_VERBOSE_MAKEFILE=ON | grep "Eigen/src/Core/util/Macros.h"

若输出路径包含 /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h,且版本为 3.3.9,则配置正确。

最终下载官方文档中的示例文件:

https://drive.google.com/drive/folders/1CGYEJ9-wWjr8INyan6q1BZz_5VtGB-fP

官方git文档地址

https://github.com/hku-mars/FAST_LIO
4. Rosbag Example
4.1 Livox Avia Rosbag

Files: Can be downloaded from google drive

Run:

roslaunch fast_lio mapping_avia.launch
rosbag play YOUR_DOWNLOADED.bag

4.2 Velodyne HDL-32E Rosbag
NCLT Dataset: Original bin file can be found here.

We produce Rosbag Files and a python script to generate Rosbag files: python3 sensordata_to_rosbag_fastlio.py bin_file_dir bag_name.bag

Run:

roslaunch fast_lio mapping_velodyne.launch
rosbag play YOUR_DOWNLOADED.bag
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 工具: Windows 带宽监控工具

Python 工具&#xff1a; Windows 带宽监控工具环境介绍会使用的库多线程关键代码&#xff1a;系统流量采集&#xff1a;用 psutil 获取网络数据概念&#xff1a;网络流量的“增量”与“总量”代码中的流量采集逻辑Flask Web框架&#xff1a;搭建后端服务前端部分交互逻辑&…

【Java】Redis(中间件)

一、对Redis的理解Reids是一种基于内存的数据库&#xff0c;对数据的读写操作都在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存、消息队列、分布式锁等场景。除此之外&#xff0c;Redis还支持事务、持久化、Lua脚本、多种集群方案&#xff08;主从复制模式…

【题解】洛谷P1776 宝物筛选 [单调队列优化多重背包]

二进制优化还是不够快&#xff0c;如果我们想时间复杂度为 &#xff0c;还得找新的方法。 &#xff08;W 为背包最大可承载量&#xff0c;N 为物品种类数&#xff09; 例题&#xff1a;P1776 宝物筛选 - 洛谷 原来的转移式很普通&#xff1a; 注意到对于每个 &#xff0c;有…

数据结构_循环队列_牺牲一个存储空间_不牺牲额外的存储空间 Circular Queue(C语言实现_超详细)

目录循环队列的引出区别普通队列和循环队列两种循环队列的概念循环队列深入理解题目&#xff1a;此题&#xff0c;分为牺牲一个额外空间和不牺牲一个额外空间不牺牲一个额外空间完成第一步完成第二步完成第三步完成第四步牺牲一个额外空间完成第一步完成第二步完成第三步完成第…

Linux_网络基础

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;LInux_st 小伞的主页&#xff1a;xiaosan_blog 制作不易&#xff01;点个赞吧&#xff01;&#xff01;谢谢喵&#xff01;&a…

Portainer:Docker可视化管理神器部署与使用攻略

Portainer是一款优秀的Docker可视化管理工具&#xff0c;它提供了简洁美观的Web界面&#xff0c;可以通过点击鼠标轻松管理Docker环境。 一、Portainer简介 Portainer是一个轻量级的Docker管理界面&#xff0c;具有以下特点&#xff1a; 可视化操作&#xff1a;通过Web界面管…

OVITO3.13.1_ Mac中文_材料科学、物理及化学领域设计的数据可视化和分析软件_安装教程

软件下载 【名称】&#xff1a;****OVITO3.13.1Mac中文 【大小】&#xff1a;****154M 【语言】&#xff1a;简体中文 【安装环境】&#xff1a;****mac 【网站下载链接】&#xff1a; https://a-xing.top/3008.html软件应用 软件应用 Ovito能做什么&#xff1f; Ovito的功能十…

MySQL 开发避坑:DROP TABLE 前你必须知道的几件事

MySQL 中删除表主要使用 DROP TABLE 语句。这是一个需要非常谨慎的操作&#xff0c;因为一旦执行&#xff0c;表结构和表中的所有数据都会被永久删除。1. 基本语法&#xff1a;删除单个表sqlDROP TABLE [IF EXISTS] table_name;* DROP TABLE: 核心命令&#xff0c;用于删除表…

浅谈人工智能之阿里云搭建coze平台

浅谈人工智能之阿里云搭建coze平台 一、部署环境准备 阿里云服务器配置要求 ○ 规格&#xff1a;最低2核CPU 4GB内存&#xff08;推荐4核8GB保障流畅运行&#xff09;&#xff0c;作者原先想要利旧&#xff0c;使用了2核2GB的服务器&#xff0c;但是跑不起来&#xff0c;后来自…

ego(2)---初始轨迹生成后的关键点采样

在初始的多项式轨迹生成后&#xff0c;是要经过一个关键点采样&#xff0c;使用关键点来进行后续的 B 样条曲线拟合的。即&#xff1a;初始多项式拟合->关键点采样->B样条拟合关键点采样的思路关键点采样使用时间步长 ts 来在初始轨迹方程中取点。在上一步的初始轨迹生成…

专项智能练习(信息安全防护措施)

3.以下属于网络安全威胁的是&#xff08;A &#xff09;。 A.非授权访问、病毒感染、信息泄露、拒绝网络服务 B.信息泄露、非授权访问、病毒感染、硬盘损坏 C.信息篡改、非授权访问、病毒感染、硬盘损坏 D.网络异常、非授权访问、信息篡改、病毒感染 解析本题考查网络安全威胁。…

ubuntu编译webrtc库

一. 前言 本文介绍在 ubuntu 下如何通过 webrtc 源码编译出指定版本 webrtc.lib 库&#xff08;以 m94 版本为例&#xff09;。 二. 编译步骤 1. 下载depot_tools工具 depot_tools 是 Google 用来管理大型项目代码&#xff08;例如 WebRTC&#xff09;的工具集&#xff0c;它…

基于ZooKeeper实现分布式锁(Spring Boot接入)及与Kafka实现的对比分析

在分布式系统中,多节点对共享资源的并发访问往往会引发数据一致性问题,分布式锁正是解决这一问题的核心组件。本文将从原理出发,详细讲解基于ZooKeeper实现分布式锁的完整流程,提供Spring Boot接入的可运行代码,并深入对比其与Kafka实现分布式锁的异同点及优缺点,帮助开发…

Shell 三剑客之 awk 命令详解(理论+实战)

目录 一、前言 二、工作流程总览 三、最常用内置变量 四、命令格式 五、20 个高频实战案例 5.1 基础打印 awk {print "hello"} < /etc/passwd 所有行打印成hello awk {print} test6.txt 打印test6.txt文件 awk {print $1} test6.txt 默认以空格为分割&am…

一个真正跨平台可用的免费PDF解决方案

在整理资料时&#xff0c;常需将不同格式的文件统一转为PDF格式&#xff0c;确保排版不乱、便于长期保存和打印 它的功能全面&#xff0c;支持批量操作&#xff0c;使用非常方便&#xff1a;只需把PDF文件拖进界面&#xff0c;选择目标格式&#xff0c;无论PDF转换成Word、PDF…

强化微调:以Swift框架进行GRPO多模态模型强化微调为例

一、TL&#xff1b;DR 整体介绍&#xff1a;强化微调RFT的原因、步骤、作用以及常见的rft方式dmeo举例&#xff1a;以Swift给的Qwen2.5-Math-7B-Instruct为例介绍了整个RFT的流程和代码细节实际强化微调&#xff1a;以qwen/internVL为例完成一次指令微调并且使用强化学习进一步…

时序数据:使用关系数据库 vs 时序数据库存储的核心区别是什么?

一、时序数据使用关系数据库 vs 时序数据库存储的核心区别 时序数据&#xff08;Time Series Data&#xff09;是指随时间连续产生的数据&#xff08;如传感器读数、服务器指标、交易记录等&#xff09;&#xff0c;其核心特点是高频写入、时间有序、量大且查询模式集中于时间范…

ansible判断

ansible判断 一、判断运算符 “” “!” “>” “<” “>” “<” “and” “or” “not” is in 每次执行完一个任务&#xff0c;不管成功与失败&#xff0c;都会将执行的结果进行注册&#xff0c;可以使用这个注册的变量来判断 when&#…

接口设计标准化流程,结合RESTful最佳实践和实际开发经验,涵盖从需求分析到部署的全过程

目录一、接口设计流程二、需求分析阶段1. 功能需求2. 非功能性需求三、接口设计规范四、详细实现步骤1. 选择Web框架2. 接口路由设计3. 请求参数定义4. 请求参数验证5. 业务逻辑分层6. 错误处理机制7. 异步任务处理8. 安全策略9. 接口文档10. 测试策略11. 服务部署11.1 生产环境…

LeetCode 1023.驼峰式匹配

给你一个字符串数组 queries&#xff0c;和一个表示模式的字符串 pattern&#xff0c;请你返回一个布尔数组 answer 。只有在待查项 queries[i] 与模式串 pattern 匹配时&#xff0c; answer[i] 才为 true&#xff0c;否则为 false。 如果可以将 小写字母 插入模式串 pattern 得…