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

Movelt2 规划场景 ROS API

文章目录前言一、使用rviz可视化二、ROS API1.发布所需话题2.定义附着碰撞物体的消息3.将一个对象添加到环境中4.同步更新和异步更新的区别5.将一个物体连接到机器人上6.从机器人上分离一个物体7.将物体从碰撞世界移除总结前言本文整理的是 MoveIt2 官方示例主要学习添加和移除世界中的对象将物体安装和拆卸到机器人上https://github.com/ros-planning/moveit2_tutorials一、使用rviz可视化rviz_visual_tools::RvizVisualToolsvisual_tools(panda_link0,planning_scene_ros_api_tutorial,node);visual_tools.loadRemoteControl();visual_tools.deleteAllMarkers();这三行代码主要是用 RVizVisualTools 在 RViz 中显示可视化标记并启用交互控制。代码解释rviz_visual_tools::RvizVisualToolsvisual_tools(panda_link0,planning_scene_ros_api_tutorial,node);这里是创建RvizVisualTools对象往rviz里面发布可视化内容可视化内容以panda_link0为参考坐标系planning_scene_ros_api_tutorial是话题名(可以自己取)node是当前的ROS2节点。visual_tools.loadRemoteControl();这里是加载rviz的远程控制功能visual_tools.deleteAllMarkers();删除 RViz 中之前发布过的所有 Marker。二、ROS API1.发布所需话题rclcpp::Publishermoveit_msgs::msg::PlanningScene::SharedPtr planning_scene_diff_publishernode-create_publishermoveit_msgs::msg::PlanningScene(planning_scene,1);while(planning_scene_diff_publisher-get_subscription_count()1){rclcpp::sleep_for(std::chrono::milliseconds(500));}visual_tools.prompt(Press next in the RvizVisualToolsGui window to continue the demo);代码解释rclcpp::Publishermoveit_msgs::msg::PlanningScene::SharedPtr planning_scene_diff_publishernode-create_publishermoveit_msgs::msg::PlanningScene(planning_scene,1);这里是创建规划场景的发布者moveit_msgs::msg::PlanningScene是发布消息的类型。话题名称是planning_scene队列大小是1队列的意思是只缓存最新的一条消息一般是MoveIt 里的PlanningSceneMonitor来对这个发布消息进行订阅。while(planning_scene_diff_publisher-get_subscription_count()1){rclcpp::sleep_for(std::chrono::milliseconds(500));}visual_tools.prompt(Press next in the RvizVisualToolsGui window to continue the demo);这里是等待相关节点开始订阅消息。visual_tools.prompt(“Press ‘next’ in the RvizVisualToolsGui window to continue the demo”)暂停程序等用户在 RVizVisualToolsGui 中点击 Next2.定义附着碰撞物体的消息以下代码是在世界中添加将物体连接到机器人上然后也可去掉物体。moveit_msgs::msg::AttachedCollisionObject attached_object;attached_object.link_namepanda_hand;attached_object.object.header.frame_idpanda_hand;attached_object.object.idbox;geometry_msgs::msg::Pose pose;pose.position.z0.11;pose.orientation.w1.0;shape_msgs::msg::SolidPrimitive primitive;primitive.typeprimitive.BOX;primitive.dimensions.resize(3);primitive.dimensions[0]0.075;primitive.dimensions[1]0.075;primitive.dimensions[2]0.075;attached_object.object.primitives.push_back(primitive);attached_object.object.primitive_poses.push_back(pose);代码解释moveit_msgs::msg::AttachedCollisionObject attached_object;attached_object.link_namepanda_hand;attached_object.object.header.frame_idpanda_hand;attached_object.object.idbox;这里是创建一个可以连接到机器人的碰撞物体附着在panda_hand以panda_hand为参考位姿碰撞物体id为box。其中frame_id必须是TF树中存在的坐标系。AttachedCollisionObject有以下内容std::string link_name;moveit_msgs::msg::CollisionObject object;std::vectorstd::string touch_links;trajectory_msgs::msg::JointTrajectory detach_posture;double weight;补一个 “moveit_msgs::msg::CollisionObject object” 的内容std_msgs::msg::Header header;geometry_msgs::msg::Pose pose;std::string id;object_recognition_msgs::msg::ObjectType type;std::vectorshape_msgs::msg::SolidPrimitive primitives;std::vectorgeometry_msgs::msg::Pose primitive_poses;std::vectorshape_msgs::msg::Mesh meshes;std::vectorgeometry_msgs::msg::Pose mesh_poses;std::vectorshape_msgs::msg::Plane planes;std::vectorgeometry_msgs::msg::Pose plane_poses;std::vectorstd::string subframe_names;std::vectorgeometry_msgs::msg::Pose subframe_poses;uint8_t operation;geometry_msgs::msg::Pose pose;pose.position.z0.11;pose.orientation.w1.0;定义碰撞物体的位姿这个位姿是相对于panda_hand来说。shape_msgs::msg::SolidPrimitive primitive;primitive.typeprimitive.BOX;primitive.dimensions.resize(3);primitive.dimensions[0]0.075;primitive.dimensions[1]0.075;primitive.dimensions[2]0.075;创建一个简单的盒子box。attached_object.object.primitives.push_back(primitive);attached_object.object.primitive_poses.push_back(pose);这里是把刚刚创建的box加入到object然后把box的位姿也加进object。刚刚上面是定义了碰撞物体需要使用ADD将碰撞物体附加到机器人上如下attached_object.object.operationattached_object.object.ADD;这里使用的“operation”是表示要对这个box进行添加操作。常见的操作有ADD // 添加或更新物体REMOVE // 删除物体APPEND // 追加几何体MOVE // 移动物体在把碰撞物体附加在机器人手上后需要碰撞检测器忽略物体与机器人之间的碰撞attached_object.touch_linksstd::vectorstd::string{panda_hand,panda_leftfinger,panda_rightfinger};tocuh_links是指定运行碰撞的关节。3.将一个对象添加到环境中RCLCPP_INFO(LOGGER,Adding the object into the world at the location of the hand.);moveit_msgs::msg::PlanningScene planning_scene;planning_scene.world.collision_objects.push_back(attached_object.object);planning_scene.is_difftrue;planning_scene_diff_publisher-publish(planning_scene);visual_tools.prompt(Press next in the RvizVisualToolsGui window to continue the demo);moveit_msgs::msg::PlanningScene planning_scene;创建规划环境消息。planning_scene.world.collision_objects.push_back(attached_object.object);把刚刚创建的box加入到PlanningScene的世界环境中。planning_scene.is_difftrue;这里是说在原来的PlanningScene基础上加入这个box为的是不把原来的场景覆盖掉。planning_scene_diff_publisher-publish(planning_scene);这里是把当前这个PlanningScene的更新发布让moveit更新场景发布到/planning_scene下面是全面创建的发布者。node-create_publishermoveit_msgs::msg::PlanningScene(“planning_scene”, 1);visual_tools.prompt(Press next in the RvizVisualToolsGui window to continue the demo);暂停等 RViz 点击 Next4.同步更新和异步更新的区别有两种独立的机制可以通过差异更新diffs与 move_group 节点进行交互。1.同步更新通过 ROS 服务调用发送一个差异更新并阻塞等待直到这个差异更新被应用完成。2.异步更新通过话题发送一个差异更新即使这个差异更新可能还没有被应用也继续往下执行。全面的教程是使用异步更新接下来介绍同步更新更稳定rclcpp::Clientmoveit_msgs::srv::ApplyPlanningScene::SharedPtr planning_scene_diff_clientnode-create_clientmoveit_msgs::srv::ApplyPlanningScene(apply_planning_scene);planning_scene_diff_client-wait_for_service();创建客户端话题名为/apply_planning_scene后续可以用他发生请求。moveit_msgs::srv::ApplyPlanningScene 是专门用于先movelt申请更新PlanningSceneplanning_scene_diff_client-wait_for_service();等待服务启动这个服务通常由 MoveIt 的 move_group 节点提供。前面是使用topic发布/planning_scene属于异步更新发出去就继续不保证 MoveIt 已经处理完。这里是使用service属于同步更新会等待 MoveIt 返回结果确认场景是否应用成功。autorequeststd::make_sharedmoveit_msgs::srv::ApplyPlanningScene::Request();request-sceneplanning_scene;std::shared_futurestd::shared_ptrmoveit_msgs::srv::ApplyPlanningScene_Responseresponse_future;response_futureplanning_scene_diff_client-async_send_request(request).future.share();代码解释autorequeststd::make_sharedmoveit_msgs::srv::ApplyPlanningScene::Request();request-sceneplanning_scene;这里是创建请求因为客户端需要向服务端发送请求服务端才会进行处理把planning_scene填入请求中。std::shared_futurestd::shared_ptrmoveit_msgs::srv::ApplyPlanningScene_Responseresponse_future;response_futureplanning_scene_diff_client-async_send_request(request).future.share();定义一个未来返回结果的对象用于保存未来返回的结果然后异步发送请求(程序不会在这一行卡住等结果)也就是向向 /apply_planning_scene 服务发送请求然后把结果保存到response_futurestd::chrono::secondswait_time(1);std::future_status fsresponse_future.wait_for(wait_time);if(fsstd::future_status::timeout){RCLCPP_ERROR(LOGGER,Service timed out.);}else{std::shared_ptrmoveit_msgs::srv::ApplyPlanningScene_Responseplanning_response;planning_responseresponse_future.get();if(planning_response-success){RCLCPP_INFO(LOGGER,Service successfully added object.);}else{RCLCPP_ERROR(LOGGER,Service failed to add object.);}}代码解释std::chrono::secondswait_time(1);std::future_status fsresponse_future.wait_for(wait_time);设置等待时间fs是返回的结果类型是std::future_statusstd::future_status::readystd::future_status::timeoutstd::future_status::deferredstd::shared_ptrmoveit_msgs::srv::ApplyPlanningScene_Responseplanning_response;planning_responseresponse_future.get();这里创建一个planning_response来获取response_future中服务端的响应。5.将一个物体连接到机器人上/* First, define the REMOVE object message*/moveit_msgs::msg::CollisionObject remove_object;remove_object.idbox;remove_object.header.frame_idpanda_hand;remove_object.operationremove_object.REMOVE;定义一个删除碰撞物体的消息从规划场景中删除“box”这个box和前文创建的是同一个boxmovelt主要是根据 id 找对应的 collision object。设置参考坐标系类型是REMOVEattached_object.object.id “box”;/* Carry out the REMOVE ATTACH operation */RCLCPP_INFO(LOGGER,Attaching the object to the hand and removing it from the world.);planning_scene.world.collision_objects.clear();planning_scene.world.collision_objects.push_back(remove_object);planning_scene.robot_state.attached_collision_objects.push_back(attached_object);planning_scene.robot_state.is_difftrue;planning_scene_diff_publisher-publish(planning_scene);visual_tools.prompt(Press next in the RvizVisualToolsGui window to continue the demo);代码解释planning_scene.world.collision_objects.clear();planning_scene.world.collision_objects.push_back(remove_object);这里是把当前这个规划环境世界的碰撞物体清空然后再把box移除。planning_scene.robot_state.attached_collision_objects.push_back(attached_object);这里是把“box”连接到机器人的手上。planning_scene.robot_state.is_difftrue;planning_scene_diff_publisher-publish(planning_scene);robot_state 这部分是增量更新不是替换机器人的状态然后发布规划场景更新。6.从机器人上分离一个物体moveit_msgs::msg::AttachedCollisionObject detach_object;detach_object.object.idbox;detach_object.link_namepanda_hand;detach_object.object.operationattached_object.object.REMOVE;这里是设置一个把附着在机器人手上的box移除掉的对象后续调用。RCLCPP_INFO(LOGGER,Detaching the object from the robot and returning it to the world.);planning_scene.robot_state.attached_collision_objects.clear();planning_scene.robot_state.attached_collision_objects.push_back(detach_object);planning_scene.robot_state.is_difftrue;planning_scene.world.collision_objects.clear();planning_scene.world.collision_objects.push_back(attached_object.object);planning_scene.is_difftrue;planning_scene_diff_publisher-publish(planning_scene);visual_tools.prompt(Press next in the RvizVisualToolsGui window to continue the demo);代码解释planning_scene.robot_state.attached_collision_objects.clear();planning_scene.robot_state.attached_collision_objects.push_back(detach_object);这里是先清空当前 planning_scene 消息对象里的数组添加前面的分离box对象意思就是把“box”从机器人手上分离。planning_scene.world.collision_objects.push_back(attached_object.object);把box重新加回到世界中。planning_scene_diff_publisher-publish(planning_scene);发布消息这里才是真正的对规划环境的变化执行分离操作。7.将物体从碰撞世界移除RCLCPP_INFO(LOGGER,Removing the object from the world.);planning_scene.robot_state.attached_collision_objects.clear();planning_scene.world.collision_objects.clear();planning_scene.world.collision_objects.push_back(remove_object);planning_scene_diff_publisher-publish(planning_scene);把box从环境中彻底。总结用到的接口如下rviz_visual_tools::RvizVisualTools visual_tools.loadRemoteControl()visual_tools.deleteAllMarkers()visual_tools.prompt()rclcpp::Publishermoveit_msgs::msg::PlanningScene::SharedPtr node-create_publishermoveit_msgs::msg::PlanningScene()planning_scene_diff_publisher-get_subscription_count()planning_scene_diff_publisher-publish()rclcpp::Clientmoveit_msgs::srv::ApplyPlanningScene::SharedPtr node-create_clientmoveit_msgs::srv::ApplyPlanningScene()planning_scene_diff_client-wait_for_service()planning_scene_diff_client-async_send_request()moveit_msgs::srv::ApplyPlanningScene moveit_msgs::srv::ApplyPlanningScene::Request moveit_msgs::srv::ApplyPlanningScene_Responsestd::make_sharedmoveit_msgs::srv::ApplyPlanningScene::Request()request-scenestd::shared_futurestd::shared_ptrmoveit_msgs::srv::ApplyPlanningScene_Responseresponse_future.wait_for()response_future.get()response_futureplanning_scene_diff_client-async_send_request(request).future.share()std::chrono::seconds std::chrono::milliseconds rclcpp::sleep_for()std::future_status std::future_status::timeoutmoveit_msgs::msg::PlanningScene planning_scene.world planning_scene.world.collision_objects planning_scene.world.collision_objects.clear()planning_scene.world.collision_objects.push_back()planning_scene.robot_state planning_scene.robot_state.attached_collision_objects planning_scene.robot_state.attached_collision_objects.clear()planning_scene.robot_state.attached_collision_objects.push_back()planning_scene.robot_state.is_diff planning_scene.is_diffmoveit_msgs::msg::CollisionObject collision_object.id collision_object.header.frame_id collision_object.operation collision_object.ADD collision_object.REMOVE collision_object.primitives collision_object.primitives.push_back()collision_object.primitive_poses collision_object.primitive_poses.push_back()moveit_msgs::msg::AttachedCollisionObject attached_object.link_name attached_object.object attached_object.object.header.frame_id attached_object.object.id attached_object.object.operation attached_object.touch_linksshape_msgs::msg::SolidPrimitive primitive.type primitive.BOX primitive.dimensions primitive.dimensions.resize()geometry_msgs::msg::Pose pose.position.z pose.orientation.wstd::vectorstd::stringstd::vectorstd::string{}RCLCPP_INFO()RCLCPP_ERROR()

相关文章:

Movelt2 规划场景 ROS API

文章目录前言一、使用rviz可视化二、ROS API1.发布所需话题2.定义附着碰撞物体的消息3.将一个对象添加到环境中4.同步更新和异步更新的区别5.将一个物体连接到机器人上6.从机器人上分离一个物体7.将物体从碰撞世界移除总结前言 本文整理的是 MoveIt2 官方示例 主要学习 添加和…...

FreeModbus释放底层的 TCP 监听端口

背景 有Modbus和scpi两种协议,在使用过程中要切换,每次切换要给给对应协议绑定端口 问题 在每次切换协议之前都这样操作,把所有连接都关闭仔进行重新绑定// 尝试禁用ModbuseMBDisable();// 尝试关闭SCPI服务器的监听和客户端连接if (server_s…...

NI实时机(PXI)从裸机到联调:RT Linux系统安装与上电自启配置全流程

NI实时机(PXI)从裸机到联调:RT Linux系统安装与上电自启配置全流程 当一台崭新的NI PXI实时机从包装箱中取出时,它就像一块未经雕琢的璞玉——硬件性能强劲却缺乏灵魂。作为硬件在环(HIL)测试系统的核心&am…...

手把手教你用PE工具绕过Deep Freeze 8.63密码(附完整脚本和注册表清理)

深度解析:如何安全绕过Deep Freeze 8.63密码保护机制 当公共计算机环境的管理密码意外丢失时,整个系统的维护更新就会陷入僵局。这种情况在学校机房、网吧和企业公用电脑中尤为常见,而Deep Freeze作为广泛使用的系统保护工具,其密…...

如何用DyberPet桌面宠物框架重构你的数字生活体验?

如何用DyberPet桌面宠物框架重构你的数字生活体验? 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 在数字生活日益普及的今天,桌面环境已不再仅仅是工作空…...

NVIDIA Jetson AGX Thor:边缘AI性能优化与量化技术实战

1. NVIDIA Jetson AGX Thor:边缘生成式AI性能的7倍跃升NVIDIA Jetson AGX Thor的发布标志着边缘计算领域的一次重大突破。作为长期从事边缘AI部署的工程师,我亲历了从Jetson Xavier到Orin再到Thor的迭代过程。Thor平台最令人振奋的不仅是其硬件规格的提升…...

Day06-06.实现点赞功能-实现点赞或取消点赞接口24:07

之前那个账号,要钱,不想给换了一个...

文件怎么防泄密?推荐六个好用的文件防泄密软件,建议收藏

悬在企业头顶的达摩克利斯之剑张总最近彻夜难眠。他经营着一家专注于精密零件设计的公司,半年前刚拿下一项核心技术专利。可就在上周,竞标现场竟然出现了与自家设计图相似度高达百分之九十的产品,而对方的报价刚好比张总低了五个百分点。经过…...

Laravel 12新特性×AI工程化落地:从Native JSON Schema Validation到AI生成Migration的全自动闭环(含可复用Composer包)

更多请点击: https://intelliparadigm.com 第一章:Laravel 12新特性AI工程化落地:从Native JSON Schema Validation到AI生成Migration的全自动闭环(含可复用Composer包) Laravel 12 引入了原生 JSON Schema 验证支持&…...

本地部署 Qwen2.5-1.5B-Instruct 全流程教程|Ollama + 魔搭双方案

在人工智能技术飞速发展的今天,大语言模型已经从云端服务走向本地部署,轻量化大模型凭借体积小、速度快、无需联网、隐私安全等优势,成为 AI 开发者、编程爱好者入门学习的最佳选择。Qwen2.5-1.5B-Instruct 作为通义千问系列的轻量级开源模型…...

《月球基底建造:以十六字混元道学为骨架,构建地月闭环生存与 AI 自主管控全系统》

前言当下航天科幻、月球基建,大多只停留在工程表象、设备罗列、物理参数堆砌。要么是纯科幻幻想,要么是死板工程计算,缺少一套统摄全局的底层顶层逻辑。我以天人同胎、气化生人、形神合一、混元复归十六字公理为总纲,把月球基地从…...

云原生技术体系解析

云原生技术体系解析 随着数字化转型的加速,云原生技术已成为企业构建现代化应用的核心架构。它通过容器化、微服务、DevOps等关键技术,实现应用的弹性扩展、高效运维和快速迭代。本文将深入解析云原生技术体系的核心组成部分,帮助读者理解其…...

3个关键步骤实现TigerVNC在国产ARM平台的高性能适配

3个关键步骤实现TigerVNC在国产ARM平台的高性能适配 【免费下载链接】tigervnc High performance, multi-platform VNC client and server 项目地址: https://gitcode.com/gh_mirrors/ti/tigervnc 随着信创产业的快速发展,越来越多的企业需要在国产化环境中部…...

水质控制器怎么选?靠谱制造商推荐及选型指南来了

在水环境治理、工业生产用水管控、市政供水保障等多个领域,水质控制器作为核心监测与控制设备,直接决定着水质管理的效率与稳定性。随着各行业对水质标准的不断提升,一款性能稳定、功能贴合需求的水质控制器,成为企业与相关机构的…...

Platinum-MD:三分钟掌握高品质MiniDisc音乐传输的终极指南

Platinum-MD:三分钟掌握高品质MiniDisc音乐传输的终极指南 【免费下载链接】platinum-md Minidisc NetMD Conversion and Upload 项目地址: https://gitcode.com/gh_mirrors/pl/platinum-md Platinum-MD是一款专为NetMD MiniDisc设备设计的现代化音乐管理工具…...

太空算力会取代地面数据中心吗?从电力瓶颈、液冷散热来看AI算力突围

最近“太空算力”“太空数据中心”成了 AI 基础设施领域的热门话题。不少人看到 SpaceX、英伟达等公司频繁布局,就会产生一个问题:地面数据中心是不是快不行了?未来算力真的要搬到太空去吗?今天,我们就来聊聊这场算力“…...

ARMv8/v9架构调试系统与MDSCR_EL1寄存器详解

1. ARM架构调试系统概述在ARMv8/v9架构中,调试系统是处理器核心功能的重要组成部分,它为开发者提供了强大的硬件级调试能力。调试系统通过一组精心设计的系统寄存器来实现对调试功能的精确控制,这些寄存器分布在不同的异常等级(EL…...

手机删短信这样取回,简单几步搞定,效率翻倍

有几种方法可以检索您可能不小心从 Android 中删除的短信。了解如何查找最近删除的消息或从备份中恢复它们,并获取避免永久丢失文本的提示。 要在某些 Android 上恢复已删除的文本,您可以使用消息应用程序设置中的回收站功能恢复它们。并非所有手机或制造…...

上海软件定制开发中的兼容性设计与多端适配技术方案解析

在上海软件定制开发的实际项目中,客户需求往往不会局限于单一终端。一个典型的企业级项目,可能同时要求覆盖Web管理后台、微信小程序、安卓App,甚至还要对接物联网设备或大屏展示系统。多端适配和跨平台兼容性,已经从"加分项…...

别再手动翻页了!用Word宏一键给Zotero引用加超链接(附完整VBA代码)

告别手动翻页:用Word宏为Zotero引用创建智能超链接系统 当论文修改进入最后冲刺阶段,最令人抓狂的莫过于在正文引用和文末参考文献之间反复横跳。想象一下:你正在核对第37条引用,突然发现格式有误,于是滚动鼠标滚轮回到…...

Intel Alder Lake IoT处理器架构解析与工业应用

1. Intel Alder Lake IoT处理器家族概览2022年初,Intel在消费级市场推出Alder Lake混合架构处理器后,如今正式发布了面向物联网(IoT)领域的专用版本。作为深耕嵌入式领域十余年的工程师,我认为这次发布标志着x86架构在工业应用场景的重要进化…...

LaTeX表格进阶:除了longtable,这3个跨页包(supertabular/xtab/ltxtable)到底该怎么选?

LaTeX表格进阶:三大跨页包深度评测与选型指南 当你的学术论文附录需要展示50组实验数据,或是技术报告的双栏排版中必须插入跨页表格时,longtable可能只是你解决方案列表中的第一个选项。在真实的学术写作场景中,表格需求往往更加复…...

喜马拉雅音频下载工具:xmly-downloader-qt5使用与构建指南

喜马拉雅音频下载工具:xmly-downloader-qt5使用与构建指南 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 喜马拉雅FM作…...

单个成本小于1欧元,年产百万:陶瓷正畸3D打印走向量产 | TCT亚洲展全球首发新品专访

陶瓷正畸3D打印材料LithaBite AO250含99.99%高纯度氧化铝,可确保正畸托槽具有生物相容性且耐用,能以极低的成本满足正畸领域的高标准。该材料与俐陶智 LCM 3D打印技术及特定的热后处理配合使用时,可生产出半透明的陶瓷托槽。LithaBite AO 250…...

ai 写论文哪个软件最好?2026 实测出圈,虎贲等考 AI 才是毕业论文真正刚需

每到毕业季,几乎所有本科生、硕士生都会陷入同一个灵魂疑问:ai 写论文哪个软件最好。市面上各类 AI 写作工具层出不穷,通用大模型、小众学术平台、普通写作软件让人眼花缭乱,看似都能生成论文,实则大多存在文献造假、数…...

UP 7000 SBC工业级单板计算机评测与实战指南

1. UP 7000 SBC开箱与硬件解析作为一款面向工业应用的信用卡尺寸单板计算机,UP 7000搭载了Intel Alder Lake-N架构的N100处理器。这款四核处理器采用10nm工艺,基础频率700MHz,最大睿频3.4GHz,配备2MB L2和6MB L3缓存。我拿到的评测…...

金融推荐与广告定向中的Transformer技术应用

1. 金融推荐与广告定向的技术演进金融推荐系统和广告定向投放正经历着从传统机器学习到深度学习的范式转移。早期基于协同过滤和逻辑回归的解决方案,在处理高维稀疏金融行为数据时,往往面临特征工程复杂、长尾效应明显等挑战。2017年Transformer架构的横…...

云安全中的容器安全与运行时保护

云安全中的容器安全与运行时保护 随着云计算和容器技术的普及,企业越来越多地采用容器化部署来提升应用的可移植性和资源利用率。容器的动态性和轻量级特性也带来了新的安全挑战。容器安全与运行时保护成为云安全领域的关键议题,旨在确保容器从构建到运…...

手把手教你排查:Dify调用Xinference部署的ChatGLM3流式输出报错怎么办?

深度排查:Dify调用Xinference部署ChatGLM3流式输出异常的解决方案 当你按照教程在AutoDL上成功部署了Xinference服务,并顺利加载了ChatGLM3模型,却在Dify平台配置时遭遇流式输出(stream)异常,这种"最后一公里"的问题往往…...

从Raw Counts到故事:手把手教你用R语言(DESeq2+ggplot2)搞定RNA-seq差异分析与可视化

从Raw Counts到故事:手把手教你用R语言(DESeq2ggplot2)搞定RNA-seq差异分析与可视化 实验室的荧光定量PCR仪嗡嗡作响,隔壁同事正对着电泳胶图发愁。在这个组学数据爆炸的时代,RNA-seq已成为揭示基因表达奥秘的黄金标准…...