当前位置: 首页 > article >正文

ROS2功能包构建与文件结构解析:从colcon编译到项目部署

1. 从零开始理解ROS2功能包与工作空间如果你刚开始接触ROS2可能会被一堆新名词搞得有点懵功能包、工作空间、colcon、ament……别担心这很正常。我刚开始用ROS2的时候也花了不少时间才把这些概念理清楚。今天我就用最直白的方式带你把这些基础概念捋顺让你能快速上手开始构建自己的机器人项目。简单来说ROS2功能包Package就是你写代码的“集装箱”。在ROS2的世界里你不能随便找个地方写个C或Python文件就指望它能被ROS2识别和运行。所有的代码无论是控制算法、传感器驱动还是可视化工具都必须被组织在一个个功能包里。这个包不仅包含了你的源代码还明确告诉了系统我需要哪些依赖、该怎么编译、编译完的东西该放哪儿。这就像你网购了一个需要组装的家具卖家不仅给了你木板和螺丝源代码还附带了清晰的安装说明书构建规则和所需工具清单依赖项。那么这些功能包放在哪里呢答案就是工作空间Workspace。你可以把工作空间想象成你的专属机器人开发“车间”。ROS2推荐的标准工作空间结构非常清晰通常命名为ros2_ws。当你用colcon build命令编译时它会自动在这个目录下生成四个子文件夹每个都有明确的职责src/这是你的“原料仓库”。所有你自己创建或从别处克隆git clone的功能包源代码都必须放在这个目录下。这是唯一需要你手动管理源代码的地方。build/这是“组装车间”。colcon编译时会把src/里的源代码拿过来进行编译、链接等一系列处理。这个过程会产生大量的中间文件比如.o目标文件、CMake的缓存文件全都临时存放在这里。通常我们不需要关心这个文件夹里的内容。install/这是“成品仓库”。编译成功后最终生成的可执行文件、Python脚本、库文件、头文件等都会按照规则被“安装”到这里。最关键的是当你使用ros2 run命令来运行节点时系统寻找可执行程序的位置正是这个install/目录下的特定路径。log/这是“工作日志”。编译和运行过程中所有的信息、警告、错误都会记录在这里。当你的代码出问题编译报了一堆看不懂的错误时来这里翻看详细的日志往往是解决问题的第一步。理解了工作空间我们再来看看创建功能包的核心命令。ROS2提供了ros2 pkg create这个一站式工具它能帮你把包的基础骨架搭好。这个命令有几个关键参数你需要掌握--build-type指定包的构建类型这是最重要的选择。对于C项目选ament_cmake对于纯Python项目选ament_python。还有一个cmake选项它更底层一般只有在你需要深度定制CMake流程时才使用新手建议直接用ament_cmake。--dependencies指定你的包依赖哪些其他的ROS2包。比如你的节点要发布话题那肯定依赖rclcppC或rclpyPython。这里可以写多个用空格隔开例如--dependencies rclcpp std_msgs geometry_msgs。举个例子我想创建一个名为my_robot_controller的C控制包它依赖于rclcpp和geometry_msgs。我只需要进入工作空间的src/目录然后执行ros2 pkg create my_robot_controller --build-type ament_cmake --dependencies rclcpp geometry_msgs命令执行后你会立刻在src/下看到一个名为my_robot_controller的新文件夹。进去看看你会发现ros2 pkg create已经为你生成好了最关键的几个文件CMakeLists.txt和package.xml并且你指定的依赖项已经自动填写进去了。这大大节省了手动创建和配置的时间避免了因格式错误导致的编译问题。2. 庖丁解牛深入功能包核心文件结构创建好一个功能包后我们得好好看看它的“五脏六腑”。一个标准的ROS2功能包其文件结构是有严格约定的理解每个文件和目录的作用是你从“会用”到“精通”的关键一步。下面我们以一个典型的C功能包ament_cmake类型为例来一次深度解剖。首先我们看看包根目录下的几个核心文件package.xml这是功能包的“身份证”和“说明书”。它采用XML格式定义了包的元数据。我把它里面最重要的几部分拎出来说说name包的名字必须和目录名一致。version版本号遵循语义化版本规则如0.1.0。description和license描述和许可证虽然不影响编译但对于开源项目和团队协作很重要。depend这里声明包的依赖。之前ros2 pkg create命令里指定的--dependencies参数就是被写到了这里。colcon在编译前会先检查这些依赖是否都已安装。你可以把依赖分为几种buildtool_depend构建工具依赖如ament_cmake、build_depend编译时依赖、exec_depend运行时依赖。对于大多数ROS2包直接用depend标签就行它同时包含了编译时和运行时依赖。CMakeLists.txt这是C包的“构建蓝图”。它告诉CMake以及上层的colcon如何编译你的代码。它的内容遵循CMake语法并加入了一些ROS2特有的“宏”可以理解为特殊的函数。我们稍后会详细拆解它。setup.py仅限ament_python包对于Python包它的角色类似于CMakeLists.txt定义了包的安装方式、入口点等。接下来我们看看包内的目录结构。一个组织良好的包通常会包含以下目录include/package_name/这是存放C头文件.hpp或.h的地方。注意通常会在include下再建一个与包名同名的子目录这是为了避免头文件命名冲突。比如你的包叫my_pkg那么你的头文件my_class.h就应该放在include/my_pkg/目录下在代码中引用时使用#include “my_pkg/my_class.h”。src/这里存放C的源文件.cpp。你的节点Node的主程序文件通常就放在这里。一个包里可以有多个节点每个节点对应一个可执行文件。launch/启动文件目录。ROS2的启动文件.launch.py或.xml可以帮你一次性启动多个节点并设置它们的参数。把启动文件集中放在这里是个好习惯。config/参数配置文件目录。你可以把节点的参数比如PID控制器的Kp, Ki, Kd值写在YAML文件里放在这个目录然后在启动时加载这样修改参数就不需要重新编译代码了。test/测试文件目录。用于存放单元测试、集成测试的代码。使用colcon test可以运行这些测试。package.xml和CMakeLists.txt就放在包的根目录与上述目录平级。对于Python包ament_python结构略有不同。它通常有一个与包同名的目录例如包名my_py_pkg则会有一个my_py_pkg/目录所有的Python模块.py文件都放在这个目录下。根目录的setup.py文件会指明这个目录就是需要安装的Python包。setup.cfg文件则可能包含一些额外的配置。理解这个结构的好处是当你拿到一个陌生的ROS2包你能快速定位到关键文件想改代码逻辑就去src/或Python模块目录想加个头文件就知道该放include/下想调整启动参数就直接找launch/和config/。这种清晰的组织方式对于团队协作和项目维护至关重要。3. 编译引擎colcon工具链全流程解析知道了包的结构下一步就是把它变成可以运行的程序这个过程就是编译。ROS2用colcon替代了ROS1的catkin_make它更强大、更灵活但核心思想一脉相承。很多新手第一次用colcon build时看到满屏滚动的输出会有点发怵。别慌我们一步步拆解它到底干了什么。首先确保你在工作空间的根目录ros2_ws/下。最简单的编译命令就是colcon build这个命令会递归地查找src/目录下的所有功能包并尝试编译它们。但实际项目中我们经常需要一些参数来优化编译过程--packages-select pkg_name只编译指定的包。当你的工作空间有很多包但只修改了其中一个时用这个参数可以极大节省时间。例如colcon build --packages-select my_robot_controller。--symlink-install这是我强烈推荐新手使用的一个参数。加上它之后install/目录下的可执行文件和库文件不会是真的拷贝过去而是创建符号链接软链接指向build/目录里的原始文件。好处是你修改了源代码后不需要重新运行colcon build直接就能运行最新的代码因为符号链接指向的就是最新的编译产物。这对于Python脚本开发尤其方便几乎是实时生效。命令如colcon build --symlink-install。--cmake-args和--ament-cmake-args用于向底层的CMake传递额外的参数。比如你想开启Debug模式进行调试colcon build --cmake-args -DCMAKE_BUILD_TYPEDebug。那么colcon build按下回车后背后发生了什么呢我把它概括为四个阶段配置阶段colcon会为每个包在build/目录下创建一个对应的子目录如build/my_pkg/。然后它在这个目录里调用CMake。CMake会读取包里的CMakeLists.txt解析里面的指令检查系统环境特别是package.xml里声明的依赖是否都能找到。这个阶段会生成真正的构建脚本如Unix下的Makefile。编译阶段这就是我们熟悉的“编译-链接”过程。编译器如gcc会把src/下的.cpp文件编译成目标文件.o然后链接器把这些目标文件以及依赖的库比如rclcpp链接在一起生成最终的可执行文件或库。这些生成的二进制文件会暂时存放在build/pkg_name/目录下的某个路径中。安装阶段这是ROS2部署的关键一步。根据CMakeLists.txt中install()指令定义的规则上一步生成的各种文件可执行文件、库、头文件、配置文件等会被复制或链接到install/目录下。这个目录的结构是精心设计的模拟了系统级的安装路径。环境设置编译安装完成后你需要“激活”这个工作空间的环境系统才能知道去哪里找这些新编译出来的包。通过执行install/目录下的环境设置脚本实现source install/setup.bash # 如果你用的是bash # 或者 source install/setup.zsh # 如果你用的是zsh执行这个source命令后你的终端环境变量特别是ROS_PACKAGE_PATH就被更新了此时你才能用ros2 run my_pkg my_node来运行你的节点。这里有一个我踩过的坑值得你注意编译顺序问题。如果你的工作空间里有多个包并且包A依赖于包B在package.xml中声明那么colcon会自动识别这种依赖关系先编译包B再编译包A。但是如果你在包A的CMakeLists.txt里通过find_package(B)来寻找包B但却忘了在package.xml里声明对B的依赖那么编译A时可能会失败或者更隐蔽地在运行时找不到B提供的库或消息接口。所以务必保持CMakeLists.txt中的find_package和package.xml中的depend列表一致。4. 构建蓝图CMakeLists.txt关键指令详解如果说package.xml是包的身份证那么CMakeLists.txt就是它的“施工图纸”。这份图纸决定了你的代码如何被编译、链接和安装。对于从ROS1转过来的朋友会发现多了几个以ament_开头的宏它们就是ROS2构建系统ament的核心。我们来逐行解析一个典型的、功能完整的CMakeLists.txt该怎么写。第一部分基础设置cmake_minimum_required(VERSION 3.8) project(my_robot_controller)第一行指定了所需CMake的最低版本ROS2 Humble推荐3.8以上。第二行定义了项目名称这里强烈建议和包名package.xml里的name保持一致能避免很多奇怪的问题。第二部分寻找依赖find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) find_package(geometry_msgs REQUIRED)find_package是CMake的标准命令用于查找其他软件包。ament_cmake是ROS2的构建基础设施必须包含。后面几行则根据你的实际需要查找你在package.xml里声明的ROS2依赖包。REQUIRED关键字表示如果找不到这个包配置阶段就直接报错。第三部分添加消息、服务、动作接口如果需要如果你的包定义了自定义的消息.msg、服务.srv或动作.action需要在这里声明和生成。这是ROS1和ROS2差异较大的地方。add_message_files( DIRECTORY msg FILES MyCustomMessage.msg ) add_service_files( DIRECTORY srv FILES MyCustomService.srv ) generate_messages(DEPENDENCIES std_msgs)你需要先在包内创建msg/,srv/,action/目录来存放定义文件。generate_messages宏会根据这些定义文件自动生成对应语言C/Python的代码。DEPENDENCIES要指明你的自定义消息依赖了哪些已有的标准消息类型。第四部分编译目标——库和可执行文件这是最核心的部分告诉CMake要编译什么。add_library(my_library src/my_library.cpp) ament_target_dependencies(my_library rclcpp std_msgs) add_executable(talker src/talker.cpp) ament_target_dependencies(talker rclcpp std_msgs geometry_msgs) target_link_libraries(talker my_library)add_library将src/my_library.cpp编译成一个库名为my_library。其他节点可以链接这个库。add_executable将src/talker.cpp编译成一个可执行文件节点名为talker。ament_target_dependencies这是ROS2的关键宏它的作用是为你声明的目标库或可执行文件自动添加包含目录、链接库以及传递依赖关系。你只需要列出它直接依赖的ROS2包如rclcpp它会自动处理这些包的依赖项比如rclcpp又依赖了rcutils。这比ROS1时代手动写include_directories和target_link_libraries要方便和安全得多。target_link_libraries将可执行文件talker与我们自己写的库my_library链接起来。第五部分安装规则——决定产物的归宿编译出来的东西要安装到哪里全靠这部分指令。这是确保ros2 run能找到你节点的关键。install(TARGETS talker my_library ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}/ ) install(DIRECTORY config DESTINATION share/${PROJECT_NAME}/ ) install(DIRECTORY include/ DESTINATION include/ )install(TARGETS ...)安装编译目标。ARCHIVE指静态库.aLIBRARY指动态库.soRUNTIME指可执行文件。特别注意对于ROS2节点可执行文件按照惯例我们通常不安装到bin/而是安装到lib/package_name/。所以更常见的写法是install(TARGETS talker DESTINATION lib/${PROJECT_NAME} )这样talker节点就会被安装到install/my_robot_controller/lib/my_robot_controller/目录下这正是ros2 run命令搜索可执行文件的标准位置。install(DIRECTORY ...)安装整个目录。比如把launch/和config/目录安装到share/${PROJECT_NAME}/下这样其他包或用户可以通过ament资源索引找到它们。头文件目录include/通常安装到全局的include/路径下供其他C包引用。第六部分收尾ament_package()这必须是CMakeLists.txt文件的最后一行这个宏会收集所有通过ament宏设置的信息生成必要的CMake配置文件如*Config.cmake使得其他包能够通过find_package找到你的包。忘了它或者放错了位置你的包就无法被其他包正确依赖。5. 部署实战让功能包真正跑起来经过编译和安装你的功能包已经整装待发。但“部署”不仅仅是能ros2 run跑起来那么简单。在实际项目中尤其是涉及到团队协作、系统集成或产品化时你需要考虑更多。下面我分享几个从开发到部署的关键实战经验。首先理解install/目录的结构。运行一次colcon build后去看看install/目录你会发现它就像一个微型的系统根目录install/ ├── local_setup.bash ├── setup.bash # 最重要的环境脚本 ├── my_robot_controller/ │ ├── lib/ │ │ └── my_robot_controller/ │ │ └── talker # 你的可执行节点在这里 │ ├── share/ │ │ └── my_robot_controller/ │ │ ├── launch/ # 启动文件 │ │ └── config/ # 参数文件 │ └── ... └── other_package/这个结构是精心设计的。当你source install/setup.bash后这个install/目录就被添加到了ROS2的包搜索路径中。ros2 run命令会去每个包的lib/package_name/下寻找可执行文件。所以确保你的节点安装到了正确的位置是它能被运行的前提。其次掌握几种运行节点的方式直接运行开发调试source环境后使用ros2 run my_robot_controller talker。这是最常用的方式。使用启动文件集成测试/部署对于需要同时启动多个节点、设置命名空间、重映射话题等复杂场景启动文件是唯一选择。你可以写一个Python脚本launch/目录下的.launch.py文件然后用ros2 launch my_robot_controller my_launch_file.launch.py来启动整个系统。在启动文件中你可以方便地加载config/下的YAML参数文件。作为组件被加载这是ROS2更高级的特性。你可以将节点编译成共享库动态库然后在另一个进程如组件容器中动态加载和运行它。这种方式资源利用率更高更适合大型系统。这需要在CMakeLists.txt中通过rclcpp_components相关的宏进行注册。再者关于包的“发现”与“覆盖”。ROS2允许你在同一个系统中安装多个版本的同一个包比如系统全局安装了一个navigation2你在自己的工作空间又编译了一个修改版的navigation2。当你source了工作空间的setup.bash后ROS2会优先使用你工作空间install/目录下的版本这被称为“覆盖”Overlaying。这是一个非常强大的功能允许你在不破坏系统环境的情况下测试自己的修改。你可以通过ros2 pkg prefix my_pkg命令来查看当前环境下某个包的实际路径来自哪里。最后聊聊从开发到生产的部署。在开发机上我们用colcon build和source环境脚本一切都很美好。但当你需要把程序部署到真正的机器人比如一台Jetson Orin或树莓派上时通常有几种做法复制整个install/目录这是最简单粗暴但也最可靠的方法。将整个install/目录打包拷贝到目标机器上然后在目标机器的.bashrc里source它的setup.bash。这相当于把你的工作空间整个搬了过去。创建Debian/RPM包对于更正式的产品发布你可以将你的ROS2包打成Linux系统标准的软件包如.deb。ROS2提供了bloom和rosdep等工具来辅助这个过程。打成系统包后就可以用apt或yum来安装和管理你的机器人软件依赖关系也会被自动处理。使用Docker容器将你的整个ROS2应用及其所有依赖打包进一个Docker镜像。这能保证运行环境完全一致彻底解决“在我机器上是好的”这类问题。部署时只需要在目标机器上运行容器即可。无论选择哪种部署方式其基础都是我们前面反复强调的正确的包结构、清晰的依赖声明、准确的编译安装规则。把这些基础打牢后面的部署工作就是水到渠成。我在项目中最常遇到的问题是在开发机上跑得好好的一部署到机器人上就找不到节点或消息类型十有八九都是因为install()规则没写对或者环境没有正确source。多花点时间理解install/目录的结构和ros2 run的查找逻辑能帮你省去很多不必要的调试时间。

相关文章:

ROS2功能包构建与文件结构解析:从colcon编译到项目部署

1. 从零开始:理解ROS2功能包与工作空间 如果你刚开始接触ROS2,可能会被一堆新名词搞得有点懵:功能包、工作空间、colcon、ament……别担心,这很正常。我刚开始用ROS2的时候,也花了不少时间才把这些概念理清楚。今天&am…...

Nacos 3.0新特性解析:为什么控制台端口独立为8080?

Nacos 3.0架构演进:控制台端口独立背后的深度安全与运维考量 如果你是一位长期使用Nacos的开发者,从1.x版本一路升级过来,可能会对端口号的变化感到一丝困惑。最初,访问http://localhost:8848/nacos就能搞定一切;到了2…...

新媒体内容创作:使用DeOldify为历史题材短视频生成彩色素材

新媒体内容创作:使用DeOldify为历史题材短视频生成彩色素材 最近刷短视频,是不是经常看到一些老电影片段、历史纪录片被“上色”了?黑白画面一下子变得色彩鲜活,人物和场景都生动了起来,点赞和评论量往往也特别高。作…...

WuliArt Qwen-Image Turbo避坑指南:解决黑图、显存不足等常见问题

WuliArt Qwen-Image Turbo避坑指南:解决黑图、显存不足等常见问题 1. 为什么你的第一张图总是“黑屏”或“爆显存”? 你满怀期待地部署好WuliArt Qwen-Image Turbo,输入精心构思的Prompt,点击生成,然后……屏幕右侧一…...

C语言文件操作实战:读写二进制图片数据调用DeOldify服务

C语言文件操作实战:读写二进制图片数据调用DeOldify服务 你是不是也好奇,那些老照片上色服务背后是怎么运作的?作为一个C/C开发者,可能更想知道,如何用我们最熟悉的语言,从底层去实现图片的读取、发送和保…...

AI论文投稿指南:如何选择最适合你的CCF-A/B/C类期刊(附审稿周期对比)

AI论文投稿实战指南:从期刊选择到录用提速的深度策略 每次打开投稿系统,看着长长的期刊列表,你是不是也感到一丝迷茫?投顶刊怕周期太长耽误毕业,投普通期刊又担心影响力不够。在人工智能这个快速迭代的领域&#xff0c…...

ESP32开发新篇——VSCode插件助力ESP-IDF环境一键配置与实战

1. 为什么你需要VSCode插件开发ESP32? 第一次接触ESP32开发的朋友,往往会被官方推荐的ESP-IDF开发环境吓到。传统的安装方式需要手动配置Python、Git、CMake、Ninja等一堆工具链,光是环境变量配置就能劝退不少新手。我至今记得三年前第一次搭…...

Phi-4-reasoning-vision-15B企业级部署:supervisor托管+健康检查全链路

Phi-4-reasoning-vision-15B企业级部署:supervisor托管健康检查全链路 1. 引言:为什么需要企业级部署? 想象一下这个场景:你费了九牛二虎之力,终于把最新的视觉大模型部署到了服务器上。它运行得不错,能看…...

PaddleOCR v4实战:如何用SVTRNet微调训练提升中文标点符号识别准确率?

PaddleOCR v4实战:如何用SVTRNet微调训练提升中文标点符号识别准确率? 在实际处理海量中文文档时,无论是教育机构的历年档案、政府部门的公文流转,还是出版行业的古籍数字化,我们总会遇到一个看似微小却影响深远的难题…...

Dify 2026插件生态已剧变,你还在用v1.2旧范式?3类即将失效的API调用方式及2026兼容迁移路径

第一章:Dify 2026插件生态演进全景图Dify 2026标志着插件架构从松散集成迈向深度协同的质变节点。其核心突破在于引入「双向契约式插件协议」(BCP),使插件与平台在启动、上下文注入、状态同步及卸载全生命周期中具备可验证的行为契…...

嵌入式AIGC艺术装置:墨水屏+ESP32+云端生成的低功耗文化策展系统

1. 项目概述1.1 设计定位与人文内核“AIGC物品展示框——百工谱”并非传统意义上的嵌入式功能验证平台,而是一个以硬件为载体、以算法为笔触、以历史为纸张的微型数字策展系统。其核心目标是将抽象的文化维度(时代、地域、职业)转化为具象的视…...

OFA图像英文描述效果展示:生成描述长度控制在12–18词区间的稳定性验证

OFA图像英文描述效果展示:生成描述长度控制在12–18词区间的稳定性验证 1. 项目概述 今天我们来测试一个特别实用的AI工具——OFA图像英文描述系统。这个系统能够自动为图片生成简洁准确的英文描述,就像给图片配字幕一样简单。 想象一下这样的场景&am…...

GEE实战:构建2000-2025年MODIS与TerraClimate多变量生态气候时序数据集

1. 为什么需要构建生态气候时序数据集 做生态或气候研究的朋友应该都深有体会,最头疼的就是找数据。以前我们要分析某个区域的植被变化,可能需要从不同平台下载MODIS数据;研究气候因子又得去另一个网站找降水、温度资料。光是数据收集和格式转…...

从TLP传输瓶颈到性能调优:实战解析MaxPayloadSize的配置与影响

1. 为什么MaxPayloadSize会成为性能瓶颈? 第一次遇到PCIe设备性能问题时,我盯着监控图表上那条始终无法突破的带宽曲线百思不得其解。当时使用的NVMe SSD实测速度只有标称值的一半,经过三天排查才发现是MaxPayloadSize(MPS&#x…...

软件测试全攻略:从入门到精通的20种核心方法详解

1. 软件测试基础入门:从零开始理解测试本质 刚接触软件测试时,很多人会疑惑:为什么开发完程序还要专门测试?我刚开始做测试时也犯过这样的错误,直到某次上线后用户投诉才明白测试的重要性。简单来说,软件测…...

Windows服务器上Veritas NetBackup 10.1主服务器安装全流程(含用户权限配置避坑指南)

Windows服务器上Veritas NetBackup 10.1主服务器安装全流程(含用户权限配置避坑指南) 对于负责企业数据安全的IT管理员而言,在Windows Server上部署一套可靠的企业级备份系统,是保障业务连续性的基石。Veritas NetBackup作为业界公…...

Hi3519DV500实战:从零构建YOLOv8智能视频分析全链路

1. Hi3519DV500开发板与YOLOv8实战入门 第一次拿到Hi3519DV500开发板时,我和大多数嵌入式开发者一样既兴奋又忐忑。这款芯片在智能视觉领域有着"小钢炮"的称号,但真正要让它跑起YOLOv8这样的现代检测算法,还是需要趟过不少坑。下面…...

PDF表格提取准确率从61%跃升至98.7%,Dify 2026解析器重构逻辑全披露,仅限首批内测用户解密

第一章:PDF表格提取准确率跃升至98.7%的技术里程碑这一里程碑标志着PDF文档结构化解析能力的重大突破——在真实工业场景测试集(含扫描件、多栏布局、跨页合并单元格、手写批注干扰等复杂样本)上,端到端表格识别与重建准确率达到9…...

AI辅助开发实战:如何用chatbot模板提升对话系统开发效率

AI辅助开发实战:如何用chatbot模板提升对话系统开发效率 开发一个功能完善的对话系统,听起来很酷,但真正动手时,很多开发者都会陷入“从零造轮子”的泥潭。今天,我想和大家聊聊,如何借助成熟的 chatbot模板…...

SecGPT-14B作品集:自动生成OWASP Web安全测试用例(含请求/响应/验证步骤)

SecGPT-14B作品集:自动生成OWASP Web安全测试用例(含请求/响应/验证步骤) 1. 网络安全测试新利器 在Web应用安全测试领域,SecGPT-14B带来了革命性的效率提升。这个基于Qwen2ForCausalLM架构的大模型,专门针对网络安全…...

纯硬件循环数显:用555+CD4017+CD4511实现无MCU七段数码管动态显示

1. 项目概述“循环数显”是一个基于纯硬件逻辑实现的七段数码管动态显示系统,其核心设计目标是脱离微控制器和软件编程,仅通过基础数字逻辑器件与手动跳线配置,完成具有纪念意义日期或数字序列的循环显示。该系统面向电子初学者、硬件教学场景…...

Adadelta一个拒绝手动设置学习率的优化算法

为什么需要 Adadelta? 在深度学习的优化算法演化史中,每一个新方法的诞生都是为了修补前一个的伤口。Adadelta 出现于 2012 年,作者 Matthew Zeiler 发表在 arXiv 的一篇论文里,它的诞生动机非常明确——修复 Adagrad 的两个致命缺…...

jetson orin nano 手把手刷机指南:NVME

文章目录写在前面1 硬件准备2 软件准备2.1 Linux 系统准备2.2 下载NVIDIA SDKManager安装包3 准备SDK-Manager4 烧录Jetson系统镜像5 打开jetson 并链接显示器5.1 安装Jtop5.2 安装jtop5.3 安装jetpack6 安装需要的软件写在前面 只适用于jetson orin nano 的普通模式刷机&…...

RepeatModeler 2.0.7 安装与使用--生信工具75

1. 简介 RepeatModeler 是一套从头(de novo)鉴定转座子(TE)家族并构建共有序列的软件包。它整合了多个互补的重复序列预测工具,自动完成重复序列识别、聚类、去冗余、精修与分类,最终生成可直接用于 Repea…...

可视化微调神器Llama Factory:10分钟让大模型听懂你的话

可视化微调神器Llama Factory:10分钟让大模型听懂你的话 1. 前言 你有没有遇到过这样的情况? 想用大模型帮你写一份专业的行业报告,结果它给出的内容总是泛泛而谈,不够精准。想让大模型理解你公司的业务术语,但它总…...

mPLUG VQA效果实测:中英文混合提问的识别与响应能力

mPLUG VQA效果实测:中英文混合提问的识别与响应能力 你有没有想过,给AI看一张图,然后像问朋友一样问它问题,它会怎么回答?比如,你给它看一张街景照片,问“图里有几个人?”&#xff…...

从零到一:基于Easytier构建去中心化虚拟局域网的实战指南

1. 为什么需要去中心化虚拟局域网? 想象一下这样的场景:你在家里搭建了一个NAS存储服务器,办公室电脑需要访问家里的文件;或者你和朋友想联机打游戏,但游戏只支持局域网联机;又或者公司有多个办公地点&…...

乙巳马年·皇城大门春联生成终端W模型安全加固:防范提示词注入攻击

乙巳马年皇城大门春联生成终端W模型安全加固:防范提示词注入攻击 最近在折腾一个挺有意思的项目,叫“乙巳马年皇城大门春联生成终端W”。说白了,就是一个专门用来生成特定风格春联的大语言模型应用。玩着玩着,我就发现一个问题&a…...

基于立创梁山派开发板的智能小车:避障、循迹与蓝牙遥控功能实现全解析

基于立创梁山派开发板的智能小车:避障、循迹与蓝牙遥控功能实现全解析 最近有不少朋友在问,用一块开发板怎么做出一个功能比较完整的智能小车项目。正好,我之前用立创EDA生态下的梁山派开发板做了一个集避障、循迹和蓝牙遥控于一体的小车&…...

ChatGPT下载与API接入实战指南:从注册到集成开发

ChatGPT下载与API接入实战指南:从注册到集成开发 最近身边不少朋友和同事都在讨论ChatGPT,想把它集成到自己的应用里,但第一步“下载”就卡住了。其实,对于开发者来说,我们通常不“下载”ChatGPT,而是通过…...