ROS2实战:两种方法集成自定义.so外部链接库

机器人模仿学习数据集构建:从遥操作到高质量数据采集实战 模仿学习是机器人领域的关键技术,旨在让机器人通过观察人类示范来学习复杂技能。其核心原理在于将人类演示的动作序列转化为可供算法学习的结构化数据。这项技术的价值在于能有效解决传统编程难以应对的复杂、非结构化任务,是实现机器人智能化和柔性化的关键路径。在机器人抓取、装配、灵巧操作等应用场景中,高质量的示范数据是模型成功训练的基础。本文聚焦于**遥操作**这一核心数据采集手段,并深入探讨了在**Lerobot SO-101**平台上,如何构建一套可靠的多模态数据采集系统,以解决时钟同步、数据流管理等工程挑战,最终产 阅读详情

1. 理解ROS2中.so库集成的核心概念

在ROS2开发中,我们经常会遇到需要复用已有C++代码的情况。这时候,将代码编译成.so动态链接库就成了一个非常实用的选择。简单来说,.so文件就像是Windows系统中的.dll文件,它包含了编译好的二进制代码,可以在不同的程序之间共享使用。

我自己在实际项目中就经常遇到这种情况:有些核心算法或者工具类需要在多个ROS2节点中使用,如果每次都重新编译这些代码,不仅浪费时间,还容易导致版本不一致的问题。把这些功能封装成.so库,就像是在代码库中建立了一个共享工具箱,随用随取,非常方便。

ROS2提供了两种主要的.so库集成方式:手动复制方式和ament导出方式。手动复制就像是你自己把工具从工具箱里拿出来放到工作台上,简单直接但不够灵活;ament导出方式则像是给工具贴上了标签并登记在册,系统能自动帮你找到和管理这些工具。两种方式各有优劣,适用于不同的场景。

理解这两种方式的区别很重要,因为这直接影响到你的项目结构和维护成本。手动复制方式适合小型项目或者快速原型开发,而ament导出方式更适合中大型项目,特别是需要多人协作或者有复杂依赖关系的场景。

2. 项目环境准备与基础配置

在开始集成.so库之前,我们需要先搭建好开发环境。首先确保你已经安装了ROS2,我使用的是Humble版本,但其他版本的操作也基本类似。创建两个包:mylib用于生成.so库文件,mynode用于调用这个库。

创建包的指令如下:

ros2 pkg create --build-type ament_cmake --dependencies rclcpp rclpy std_msgs --node-name mycpp mynode
ros2 pkg create --build-type ament_cmake --dependencies rclcpp rclpy std_msgs --node-name myclass mylib

这里有几个细节需要注意:--build-type指定为ament_cmake,因为我们要使用CMake来构建C++项目;--dependencies添加了rclcpp、rclpy和std_msgs,这些都是ROS2开发的基础依赖;--node-name参数指定了默认生成的节点文件名。

创建完成后,项目结构应该是这样的:

workspace/
├── mylib/
│   ├── CMakeLists.txt
│   ├── package.xml
│   ├── include/mylib/
│   └── src/
└── mynode/
    ├── CMakeLists.txt
    ├── package.xml
    ├── include/mynode/
    └── src/

在mylib包的include目录下,我们创建myclass.hpp头文件,定义需要封装的类和函数:

#ifndef MY_CLASS_HPP
#define MY_CLASS_HPP

#include <iostream>

class MYCLASS {
public:
    int a;
    int b;
    MYCLASS(int a, int b);
    ~MYCLASS();
    int MYCLASS_ADD();
};

void print_myclass() {
    std::cout << "我创建的.so文件输出东西了\n";
}

#endif //MY_CLASS_HPP

对应的源文件myclass.cpp实现这些功能:

#include "mylib/myclass.hpp"

int MYCLASS::MYCLASS_ADD() {
    return this->a + this->b;
}

MYCLASS::MYCLASS(int a, int b) {
    this->a = a;
    this->b = b;
}

MYCLASS::~MYCLASS() {
    std::cout << "对象销毁\n";
}

int main(int argc, char ** argv) {
    (void) argc;
    (void) argv;
}

注意头文件包含的路径是"mylib/myclass.hpp",这是因为在ROS2的ament编译系统中,头文件是按照包名组织的。这种组织方式虽然一开始可能觉得麻烦,但在大型项目中能有效避免命名冲突。

3. 手动复制方式集成.so库

手动复制方式是最直接的集成方法,适合刚入门的新手或者简单的项目。这种方式的核心思想就是:先编译生成.so文件,然后手动复制到需要使用它的包中。

在mylib包的CMakeLists.txt中,我们需要配置生成.so库:

add_library(myclass SHARED src/myclass.cpp)

target_include_directories(myclass PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include/${PROJECT_NAME}>
)

ament_target_dependencies(
  myclass
  "rclcpp"
  "rclpy"
  "std_msgs"
)

install(DIRECTORY include/ DESTINATION include)
install(TARGETS myclass DESTINATION lib)

这里有几个关键点:add_library指定生成SHARED库(动态库);target_include_directories设置头文件搜索路径;install命令指定安装位置。编译成功后,在install目录下你会看到生成的libmyclass.so文件和对应的头文件。

接下来就是手动复制环节:把mylib/install/include/mylib/myclass.hpp复制到mynode/include/mynode/目录下,把mylib/install/lib/libmyclass.so复制到mynode/lib/目录下。这个过程虽然简单,但很容易出错,特别是当库文件更新时,需要重新手动复制。

在mynode包中,我们创建调用.so库的节点代码:

#include "rclcpp/rclcpp.hpp"
#include "mynode/myclass.hpp"

int main(int argc, char **argv) {
    rclcpp::init(argc, argv);
    auto node_ = std::make_shared<rclcpp::Node>("mynode");
    MYCLASS* myclass = new MYCLASS(1, 1);
    
    while (rclcpp::ok()) {
        std::cout << "计算结果: " << myclass->MYCLASS_ADD() << "\n";
        myclass->a++;
        sleep(1);
    }
    
    delete myclass;
    rclcpp::shutdown();
    return 0;
}

对应的CMakeLists.txt需要配置链接.so库:

add_executable(mycpp src/mycpp.cpp)

target_include_directories(mycpp PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)

ament_target_dependencies(
  mycpp
  rclcpp
)

target_link_libraries(mycpp
  ${CMAKE_CURRENT_SOURCE_DIR}/lib/libmyclass.so
)

install(DIRECTORY include/ DESTINATION include)
install(FILES lib/libmyclass.so DESTINATION lib)
install(TARGETS mycpp DESTINATION lib/${PROJECT_NAME})

手动复制方式的优点是很直观,不需要理解复杂的ament机制。但缺点也很明显:每次更新库都需要重新复制文件,多个项目使用同一个库时难以维护,容易产生版本不一致的问题。

4. ament导出方式集成.so库

ament导出方式是ROS2推荐的库集成方式,它利用了ament的包管理功能,能够自动处理依赖关系。这种方式虽然配置稍复杂,但长期来看更利于项目维护。

在mylib包的CMakeLists.txt中,我们需要增加导出配置:

add_library(mylib SHARED src/myclass.cpp)

target_include_directories(mylib PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include/${PROJECT_NAME}>
)

ament_target_dependencies(
  mylib
  "rclcpp"
  "rclpy"
  "std_msgs"
)

install(DIRECTORY include/ DESTINATION include)

install(TARGETS mylib
  EXPORT export_mylib
  LIBRARY DESTINATION lib
  ARCHIVE DESTINATION lib
  RUNTIME DESTINATION bin
)

ament_export_include_directories(include)
ament_export_libraries(mylib)

ament_package()

这里的关键变化是:库名称改为与项目名一致的mylib(这是ament的约定);增加了install的EXPORT选项;添加了ament_export_include_directories和ament_export_libraries调用。这些配置告诉ament系统如何导出这个库,让其他包能够找到并使用它。

在mynode包中,我们不再需要手动复制文件,而是通过find_package来自动定位依赖:

find_package(mylib REQUIRED)

add_executable(mycpp src/mycpp.cpp)

target_include_directories(mycpp PUBLIC
  $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)

ament_target_dependencies(
  mycpp
  rclcpp
  mylib
)

install(TARGETS mycpp DESTINATION lib/${PROJECT_NAME})

节点代码也需要稍作调整,包含路径改为mylib的头文件:

#include "mylib/myclass.hpp"

编译时需要特别注意顺序:先单独编译mylib包,source setup文件,再编译mynode包:

colcon build --packages-select mylib
source ./install/local_setup.bash
colcon build --packages-select mynode

这种方式的好处是自动化程度高,依赖关系清晰。当库更新时,只需要重新编译库包,其他依赖它的包会自动使用新版本。特别适合大型项目和团队协作。

5. 两种方式的对比与选择建议

经过实际项目的验证,我对这两种方式有了更深入的理解。手动复制方式就像是用螺丝刀,简单直接,适合偶尔使用;ament导出方式像是用电动螺丝刀,需要学习但效率更高。

从维护成本来看,手动复制方式在项目初期可能更快,但随着项目规模扩大,维护成本会急剧上升。我曾经在一个项目中使用手动方式管理5个.so库,每次更新都要手动复制到3个不同的包中,经常出现版本不一致的问题。后来切换到ament导出方式,这些烦恼都消失了。

从编译效率角度,ament方式支持增量编译,只编译变更的部分;而手动方式往往需要重新编译所有依赖的包。在大项目中,这种差异可能是几分钟和几小时的区别。

从代码复用性考虑,ament导出方式生成的库可以被任何其他ROS2包使用,只需要在package.xml中声明依赖即可。而手动方式需要每个使用库的包都维护一份副本。

那么如何选择呢?我的建议是:如果是学习或者快速原型开发,可以从手动方式开始,快速验证想法;如果是正式项目,特别是需要多人协作的项目,强烈建议使用ament导出方式。即使项目规模较小,使用ament方式也能培养良好的工程习惯。

在实际使用中,还有一些小技巧:给库起名时最好加上版本后缀,如mylib_v1;定期清理install目录,避免旧版本库文件造成冲突;使用colcon list命令检查包的依赖关系是否正确。

6. 常见问题排查与调试技巧

在集成.so库的过程中,难免会遇到各种问题。根据我的经验,最常见的问题是链接错误和运行时库找不到。

链接错误通常表现为"undefined reference"这类编译错误。这时候首先要检查CMakeLists.txt中的target_link_libraries配置是否正确,库路径是否准确。如果是ament方式,确认是否正确执行了source setup.bash步骤。

运行时库找不到的错误(如"error while loading shared libraries")往往是因为系统找不到.so文件的位置。在ROS2中,通常是因为没有source安装目录的setup文件。记得每次编译后都要source一下,或者将source命令添加到.bashrc中。

调试的小技巧:使用ldd命令检查可执行文件依赖的库是否都能找到:

ldd install/mynode/lib/mynode/mycpp

如果发现某个库显示"not found",就需要检查库的安装路径和LD_LIBRARY_PATH环境变量。

另一个有用的工具是nm命令,可以查看.so库中的符号表,确认需要的函数是否确实在库中:

nm -D install/mylib/lib/libmylib.so | grep MYCLASS

有时候还会遇到版本冲突问题,即多个版本的库同时存在。这时候可以使用roscd命令跳转到包目录,检查实际使用的是哪个版本的库。

对于ament导出方式,如果其他包找不到你的库,可以检查package.xml文件中是否正确定义了依赖关系。有时候需要手动添加export标签来声明导出的内容。

我在实际项目中还遇到过一种情况:库编译成功了,但使用时出现段错误。后来发现是因为库的ABI(应用程序二进制接口)不兼容。这是因为编译库和使用库的环境不同(如gcc版本不同)。解决方法是确保整个项目使用相同的编译环境和 flags。

最后建议在开发过程中保持耐心,遇到问题时从基础检查开始:文件路径是否正确、编译顺序是否对、环境变量是否设置。有时候最简单的重启终端或者重新source就能解决看似复杂的问题。

chrome-headless-shell-mac-x64-160.0.8160.0(Canary).zip 内容概要:Chrome for Testing 官方 chrome-headless-shell 160.0.8160.0 x64 平台(金丝雀版通道),原版未修改,附来源说明。 适合人群:x64 上的自动化测试工程师、爬虫开发者、CI 环境搭建者。 使用场景及目标:①无头浏览器(Playwright/Puppeteer/Selenium 无界面自动化与爬虫的运行内核);②服务器/容器离线内置;③版本精准匹配(chromedriver 与 Chrome 需同大版本)。 其他说明:Chrome for Testing 为 Google 官方发布、允许自由分发的文件;本资源为第三方整理的下载便利服务。 立即下载

相关推荐

多智能体-系统-形成-控制 附matlab代码.rar

多智能体-系统-形成-控制 附matlab代码.rar

ros2调用自定义外部链接库.so库(自定义库)

ros2使用自定义库文件,链接,使用教程。

weixin_46639310的博客 2919

RS485 工业总线实战手册|DE/TC 方向控制时序 + 组网端接隔离 + 30 例故障速查

定位:把 485 当成「串口加两根线」,是所有故障的开始。它的差分电气、总线拓扑、方向控制时序,每一层都有自己的物理与规矩。10 章 + 5 附录,31 页 / 58 张表。 ① 分层认知:物理/器件/时序/协议四层,一帧的完整旅程八道关 ② 电气层:A/B 反接之谜(标准不定义字母)、共模红线、失效保护、偏置电阻完整计算 ③ 收发器选型:六款对照、真值表、传播延迟与假字节 ④ 方向控制:TXE 不是发完 TC 才是(第一判据)、完整代码、DMA+TC 中断版、应答首字节完整性 ⑤ 组网:手拉手唯一正解、120Ω 只在两端、分支长度、中继与集线器 ⑥ 距离与隔离:速率距离表、光耦选型账(PC817 不能跑 115200)、隔离电源 ⑦ 抗干扰:双绞/屏蔽单端接地、干扰源对号、TVS+GDT 防护参数、误码率测试把「稳」变数字 ⑧ 30 例故障速查(物理→时序→干扰→协议四层排列)+ 三个案例复盘 ⑨ 完整案例:一主三从轮询网络(主从两侧方向控制)+ 网络健康计数器寄存器 ⑩ 验收 15 条 + 40 条硬规则 + 现场十分钟快查表 附录:速率距离、收发器对照、索引、术语、检查表。 电气参数按 TIA/EIA-485-A 与数据手册口径;每个判据都能自己走一遍。

ros2自定义并使用外部链接库.so库

创建.so文件有两种使用方式,第一种:生成.so文件,保留.hpp文件,把这两个文件放到所需要使用这个.so文件的包里,第二种,导出成一个库,然后用类似。定义两个包,mylib mynode ,mylib 创建.so文件,mynode调用.so文件定义的东西。mylib包里的 cmakelist.txt修改如下,其中不加注释的就是默认生成的代码,了解即可。mycpp.cpp文件如下,非常简单,有手就行,注意!第二种方式对应开源地址里的main分支 mycpp.cpp需要更改包含的头文件,具体如下。

qq_59087666的博客 1245

具有PWM控制VSC-HVDC链路的IEEE30总线传输系统(Simulink仿真实现)

内容概要:本文构建了一个包含PWM控制VSC-HVDC链路的IEEE30节点电力传输系统,并基于Simulink平台完成了系统的建模仿真。该模型聚焦于高压直流输电(HVDC)技术在区域电网互联中的应用,采用电压源型换流器(VSC)与脉宽调制(PWM)技术实现高效、灵活的电能传输。研究重点在于分析VSC-HVDC链路在复杂多节点电网中对潮流分布、系统稳定性及电能质量的调控能力,特别关注其在区域电网互联、新能源大规模接入以及跨区域电力交换等场景下的动态响应特性与控制性能,为现代智能电网的发展提供技术支撑与仿真验证手段。; 适合人群:具备电力系统、电气工程或自动化等相关专业背景的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究VSC-HVDC在多节点电网(如IEEE30节点)中的建模与仿真方法;②分析PWM控制策略下HVDC链路对电网潮流分布、电压稳定性和故障穿越能力的影响;③为区域电网互联、新能源并网及智能电网调度等课题提供仿真基础和技术验证。; 阅读建议:此资源以Simulink仿真实现为核心,建议读者在掌握电力电子技术和电力系统分析基础知识的前提下,结合仿真模型深入理解VSC-HVDC的工作原理与控制策略。在学习过程中,应着重关注模型参数设置、控制环路设计及仿真结果的分析,以达到理论与实践相结合的目的。

基于KDE-CDF置信带的不确定综合能源系统鲁棒调度优化研究(Matlab代码实现)

内容概要:本研究针对不确定综合能源系统中的鲁棒调度优化问题,提出一种基于核密度估计-累积分布函数(KDE-CDF)置信带的建模方法,用以精确刻画风能、光伏及负荷等不确定性因素的非正态概率分布特征。通过构建KDE-CDF模型,能够有效捕捉实际运行中新能源出力与负荷需求的波动性与随机性,并在此基础上设计鲁棒优化调度框架,提升系统在不确定性环境下的运行可靠性与经济性。该方法结合Matlab编程实现,综合考虑系统运行成本、峰谷差、碳排放等多重目标,实现多维度协调优化。研究还探讨了与智能优化算法(如粒子群算法)相结合的应用路径,增强了模型的求解效率与工程实用性,为含多种储能装置、电转气设备及碳捕集系统的复杂综合能源系统提供了科学的调度决策支持。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事综合能源系统规划、运行与调度工作的工程技术人员。; 使用场景及目标:①解决高比例可再生能源接入背景下综合能源系统调度中的不确定性建模难题;②提升调度方案在面对新能源强波动性时的鲁棒性与适应能力;③为融合多类型灵活性资源(如储能、电转气、碳捕集)的综合能源系统提供精细化、可落地的优化运行策略。; 阅读建议:建议读者在掌握概率统计、随机优化与电力系统运行基础知识的前提下,结合文中提供的Matlab代码进行实践操作,重点关注KDE-CDF置信带的构建流程及其在鲁棒优化模型中的嵌入机制,通过调整输入数据分布、参数设置与场景配置开展仿真对比实验,深入理解不确定性建模精度对调度决策质量的影响,进而掌握从数据驱动角度提升系统鲁棒性的关键技术路径。

ROS:ROS中调用外部链接库(四)

ROS中调用外部链接库1.catkin_package配置2.include_directories配置3.link_directories配置4.文件执行配置 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、工程结构 首先,在自己的工程下面

weixin_44549563的博客 1211

含分布式电源的配电网可靠性评估研究(Matlab代码实现)

内容概要:本文系统研究了含分布式电源的配电网可靠性评估方法,基于Matlab代码实现了完整的评估模型与算法框架。研究深入分析了分布式电源接入后对配电网结构与运行特性的影响,重点探讨了其对供电可靠性的作用机制。采用序贯蒙特卡洛模拟法对系统各类状态进行抽样与仿真,综合考虑了分布式电源出力的随机性、负荷波动性以及网络拓扑变化等多种不确定性因素,精确计算了系统及负荷点的多项可靠性指标。通过在标准测试系统上的仿真实验,验证了所提方法的有效性和实用性,为新型电力系统环境下配电网的规划、运行与可靠性提升提供了有力的技术支撑和决策依据。; 适合人群:具备电力系统分析、概率统计及可靠性基础理论知识,熟悉Matlab编程语言,从事电力系统规划、运行、可靠性评估等相关工作的科研人员、高校研究生以及电力行业工程师。; 使用场景及目标:①掌握含分布式电源的现代配电网可靠性评估的核心理论与关键技术;②学习并实践基于序贯蒙特卡洛模拟的电力系统可靠性分析算法的Matlab实现方法;③为实际工程中分布式电源的优化配置、配电网的升级改造以及制定可靠性提升策略提供科学的仿真工具和量化分析依据。; 阅读建议:建议读者结合文中提供的Matlab代码,逐行阅读并运行程序,重点理解系统建模、状态抽样、潮流计算与指标统计等核心模块的实现逻辑。可尝试调整分布式电源的类型、容量、接入位置及负荷水平等参数,观察其对系统可靠性指标的影响趋势,从而深化对系统动态行为与关键影响因素的理解。

在ROS中调用外部链接库文件(.so)配置方法

举例说明吧: 1、建立文件树如下: myproject: -include --Interface.h -lib --libInterface.so -src --control.cpp -CMakeLists.txt -package.xml 即在对应的源文件包下建立两个文件夹include(放.so对应的头文件),lib(放.so文件)  2、然后配置CMakeList...

跃动的风的博客 6627

退出微软账户-解除微软账户绑定 .exe

退出微软账户_解除微软账户绑定小工具

大学生职业生涯规划.pptx

大学生职业生涯规划.pptx

ROS:添加第三方库

ROS:添加第三方库 参考资料: C++静态库和动态库; GCC参数详解; ROS添加第三方库; 在ROS中调用外部链接库文件(.so)配置方法. 编写C++程序时,为了方便,常常会使用一些已经编好的开源库。那么如何使用这些开源库就成了一个问题。之前我一直对这方面不太清楚,这次需要在ROS中使用第三方库,正好查查资料了解一下这方面的知识。 1.C++库 库是指已经写好的现有的,成熟的,可以复用的代码。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。一般会存在两种类型的库,它们的命名

Azahaxia的博客 5609

考虑一次调频以及二次调频和各机组调频特性的双目标风光水火储动态调度研究(Matlab代码实现)

考虑一次调频以及二次调频和各机组调频特性的双目标风光水火储动态调度研究(Matlab代码实现)内容概要:本文研究了一种考虑一次调频、二次调频以及各机组调频特性的双目标优化模型,用于风光水火储多能互补系统的动态调度问题。该模型以系统运行成本最小化和新能源消纳最大化为双重优化目标,综合考虑了各类电源的出力特性、储能系统的充放电行为及电网频率响应要求。通过Matlab编程实现了完整的求解流程,采用多目标优化算法对复杂约束条件下的调度方案进行求解,并对不同场景下的调度结果进行仿真分析,验证了所提模型在提升系统经济性与稳定性方面的有效性。研究还探讨了储能系统在平抑新能源波动、参与频率调节中的关键作用,为高比例可再生能源接入下的电力系统调度提供了理论支持和技术路径。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源调度、电力系统优化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决含多种能源形式的复杂电力系统在实际运行中的动态调度问题;②研究储能系统在调频和促进新能源消纳中的协同机制;③掌握多目标优化在电力系统调度中的建模与实现方法; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件处理及多目标折衷分析方法,同时可通过修改参数进行不同场景的仿真实验,以加深对系统动态行为的理解。

ROS 2 生态核心项目解析:Gazebo、ros2_control 与 Navigation2 深度协同指南

ROS 2 不是单一框架,而是以 DDS 通信为底座、以模块化设计为特征的机器人操作系统生态。其核心价值在于通过标准化接口(如 Lifecycle Node、HardwareInterface、BehaviorTree)实现仿真、控制、导航、操作等能力的松耦合集成。Gazebo Sim 提供时序一致的物理仿真底座,ros2_control 构建实时安全的硬件抽象层,Navigation2 基于行为树实现可插拔导航逻辑——三者协同构成从虚拟验证到真实部署的关键技术闭环。这种分层解耦架构显著提升系统可维护性与跨

clt3617的博客 406

稳定双共轭梯度法BiCGSTAB流程

稳定双共轭梯度法BiCGSTAB流程

abner361的博客 1155

【AI生成PPT】使用ChatGPT+Overleaf自动生成学术论文PPT演示文稿

本文介绍了一种利用ChatGPT、Beamer和LaTeX自动生成学术论文PPT演示文稿的高效方法。通过Beamer的演示文稿文档类和Overleaf的云端LaTeX协作平台,用户可以在10分钟内完成专业排版。核心流程包括从arXiv获取论文源码,使用ChatGPT生成Beamer代码,并在Overleaf上编译生成PDF格式的PPT。生成的PPT包含标题页、研究背景、方法、实验等完整章节,排版简洁专业。该方法显著提升了效率,完美支持公式、算法和参考文献引用,适用于学生和研究人员快速制作学术汇报或会议演示文

我们都是被分成两半的人,一边热爱生活,一边憎恨生活。面对生活,我们总是在矛盾的两端摇摆,在反复的矛盾和犹豫中,一边踉跄前行,一边重振旗鼓。我渴望改变,渴望变得更好,渴望找到出口……就像一个溺水人的挣扎,就像一个救生圈。我是一个矛盾集合体,想要变得快乐,但是 4639

关于CMakeLists的基础知识

介绍了ros2中的CMakeLists,着重介绍了基础知识。由浅入深地介绍了什么是cmake,为什么要用cmake

BUAAer_xuyang的博客 1365

【具身算法】VLA算法-Diffusion Policy

《扩散策略:多模态机器人控制的新方法》摘要 本文提出了一种基于扩散模型的机器人控制策略(DiffusionPolicy),用于解决视觉运动控制中的多模态行为、高维动作空间和训练稳定性问题。该方法利用去噪扩散概率模型(DDPM)生成动作序列,通过迭代优化处理复杂动作分布,显著提升了性能。实验表明,在15项机器人操作任务中,扩散策略平均性能提升46.9%,有效解决了传统显式/隐式策略的局限性。其核心优势在于:1)优雅建模多模态动作分布;2)适应高维动作空间;3)训练过程稳定。未来工作将探索与强化学习的结合及计算

puzhinan7781的博客 1393

ubuntu20.04 安装及使用vscode

1、安装: 推荐在vscode官网下载deb文件安装 1.1 原因:Ubuntu的应用市场下载的code,安装的VSCode是snap的削减版本,不支持中文 1.2 官网下载速度慢解决方法:复制下载链接,把az764295.vo.msecnd.net替换域名为:vscode.cdn.azure.cn 1.3进入.deb文件所在文件夹,运行如下命令安装vs code: sudo dpkg -i xxxxx 1.4 启动vscode:终端输入 code 2、c+...

flsxyw的博客 3504

IOPaint模型部署教程

IOPaint是一款功能全面且强大的AI图像处理工具,它不仅免费开源,还由SOTA(State-of-the-Art,即最先进)AI模型驱动,为图像编辑和修复带来了前所未有的便利和高效。以下是对IOPaint的详细介绍:

SJJS_1的博客 1544

保姆级教程:在华为云Ubuntu服务器上快速搭建RAGflow开发环境(避坑指南)

本文提供了一份在华为云Ubuntu服务器上快速搭建RAGflow开发环境的保姆级教程。针对网络拉取镜像等常见问题,详细介绍了从服务器选型、系统优化、Docker配置到RAGflow部署与验证的全流程,并给出生产环境调优建议,帮助开发者高效避坑,快速构建企业级应用环境。

weixin_29250403的博客 87

具身智能数据采集平台的开源对接三原则

具身智能依赖多模态传感器数据融合,其核心挑战在于异构信号的高精度、低延迟、可复现采集。这要求平台不仅支持ROS/ROS2和PyTorch等主流框架,更需在驱动层、数据流层与训练层实现穿透式开源——即硬件寄存器级可调试、毫秒级时间戳对齐、原生Dataset无缝加载。技术价值体现在保障VIO、强化学习等关键算法的数据质量下限与迭代速度上限;典型应用场景覆盖机械臂力控、移动机器人导航及边缘端micro-ROS部署。本文聚焦‘开源对接’这一易被泛化的概念,拆解其在具身智能数据基座中的真实工程内涵。

weixin_34293246的博客 368

手把手教你用VCS+VERDI搭建数字IC验证环境(附Makefile避坑指南)

本文详细介绍了如何使用VCS编译器和VERDI调试工具搭建数字IC验证环境,涵盖从RTL设计到波形分析的全流程。重点解析了Makefile自动化构建、FSDB波形生成方法及常见问题解决方案,帮助工程师高效完成验证工作。特别提供了VCS编译参数配置和VERDI调试技巧的实用指南。

weixin_33738578的博客 450
上一篇: 迷你主机性能全解析:从代码编译到AI部署,全能小钢炮如何颠覆传统PC?
下一篇: 【毕业设计】基于STM32的智能鱼缸水质实时监测与自动调控系统
code8
博客等级 码龄17年 65粉丝 1720原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值