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

RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践

RexUniNLU部署教程Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践1. 为什么需要在K8s中部署RexUniNLU你可能已经试过在本地跑通python test.py也成功启动了server.py提供的 FastAPI 接口。但当真实业务流量进来——比如每天处理上万次用户语音指令解析、或接入智能客服系统批量调用NLU服务时单机部署立刻会暴露三个硬伤扛不住突发流量节假日促销期间意图识别请求翻倍CPU瞬间打满响应延迟飙升没法自动恢复某个请求触发模型推理异常进程崩溃后得手动重启扩容太慢临时加机器、改配置、重新部署一套流程下来半小时起步。而 Kubernetes 天然解决这些问题它能自动拉起新实例、健康检查失败就重启、配合 HPAHorizontal Pod Autoscaler实现“请求多就加副本空闲了就缩容”。但直接写 YAML 部署太琐碎——Service、Deployment、ConfigMap、Resource Limits、Liveness Probe……写错一行就卡在 Pending 状态。这时候Helm 就成了最顺手的“K8s 应用打包器”。它把 RexUniNLU 的所有部署要素打包成可复用、可参数化、可版本管理的 Chart一条命令就能完成部署扩缩容配置还能一键回滚。本文不讲抽象概念只带你从零开始把 RexUniNLU 打包成 Helm Chart在本地 Kind 集群验证部署效果配置 CPU 使用率阈值实现实时水平扩缩容用真实请求压测看副本数如何自动从 1 变成 3 再缩回 1全程无需修改 RexUniNLU 源码也不依赖特定云厂商——只要你的集群支持 HPA这套方案就能跑通。2. 准备工作环境与基础依赖2.1 本地开发环境要求你不需要拥有生产级 K8s 集群也能完成全部操作。我们使用 KindKubernetes in Docker快速搭建一个单节点集群它轻量、启动快、完全兼容标准 K8s API。请确保以下工具已安装并可用建议 macOS/LinuxWindows 用户请使用 WSL2# 检查版本均需满足最低要求 kind version # v0.20.0 kubectl version # v1.24 helm version # v3.10 python3 --version # v3.8提示若未安装Kind 安装只需一条命令curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname)-amd64 chmod x ./kind sudo mv ./kind /usr/local/bin/2.2 初始化本地 Kubernetes 集群运行以下命令创建一个名为rex-nlu-cluster的集群并设置默认上下文kind create cluster --name rex-nlu-cluster --config - EOF kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: criSocket: /run/containerd/containerd.sock extraPortMappings: - containerPort: 8000 hostPort: 8000 protocol: TCP - containerPort: 9090 hostPort: 9090 protocol: TCP EOF该配置做了三件事开放宿主机8000端口映射到集群内服务端口供后续访问 API预留9090端口用于 Prometheus 指标采集HPA 依赖使用 containerd 运行时避免 Docker Desktop 兼容性问题。执行完成后确认集群就绪kubectl get nodes # 输出应为NAME STATUS ROLES AGE VERSION # rex-nlu-cluster-control-plane Ready control-plane 2m10s v1.28.02.3 安装 Metrics ServerHPA 必需组件Kubernetes 默认不采集 CPU/内存指标而 HPA 扩缩容必须依赖这些数据。我们需要手动安装 Metrics Serverkubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.2/components.yaml等待 1–2 分钟验证是否正常工作kubectl top nodes # 正常输出类似 # NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% # rex-nlu-cluster-control-plane 120m 6% 1845Mi 47%如果报错Metrics API not available请稍等并重试常见原因是镜像拉取慢可替换为国内镜像源见文末资源提示。3. 构建 RexUniNLU Helm Chart3.1 创建 Chart 目录结构Helm Chart 是一个包含特定文件结构的目录。我们从零初始化一个专用于 RexUniNLU 的 Charthelm create rex-nlu-chart cd rex-nlu-chart生成的默认结构如下已精简无关文件rex-nlu-chart/ ├── Chart.yaml # Chart 元信息名称、版本、描述 ├── values.yaml # 默认配置参数我们将大幅重写 ├── templates/ # 所有 Kubernetes 资源模板 │ ├── deployment.yaml │ ├── service.yaml │ ├── _helpers.tpl │ └── tests/ └── charts/ # 子 Chart暂不使用3.2 重写 values.yaml聚焦 RexUniNLU 实际需求原生values.yaml过于通用。我们按 RexUniNLU 的轻量特性重写保留关键可配项删除冗余字段# rex-nlu-chart/values.yaml # RexUniNLU 服务核心配置 replicaCount: 1 image: repository: python:3.9-slim pullPolicy: IfNotPresent # 注意我们不构建独立镜像而是直接在容器内 clone pip install # 后续 template 中会体现 service: type: ClusterIP port: 8000 targetPort: 8000 resources: # RexUniNLU 单实例 CPU 占用约 300m~600m无 GPU内存 800Mi 足够 limits: cpu: 1000m memory: 1200Mi requests: cpu: 400m memory: 800Mi autoscaling: enabled: true minReplicas: 1 maxReplicas: 5 targetCPUUtilizationPercentage: 60 # 模型缓存路径挂载避免每次重启都重下 ModelScope 模型 modelCacheVolume: enabled: true size: 2Gi # 自定义标签 Schema可选预置常用领域 schema labels: smart_home: [打开灯, 关闭空调, 调高温度] finance: [查询余额, 转账给张三, 查看信用卡账单]这个values.yaml设计原则是让运维人员一眼看懂每个参数的作用且所有值都符合 RexUniNLU 实际资源消耗特征。例如targetCPUUtilizationPercentage: 60表示当平均 CPU 使用率持续超过 60%HPA 就会触发扩容——这比默认的 80% 更早干预更适合 NLU 这类低延迟敏感型服务。3.3 编写 deployment.yaml注入 RexUniNLU 运行逻辑templates/deployment.yaml是核心。我们不打包二进制镜像而是利用initContainer下载代码 main container运行服务兼顾灵活性与轻量化# rex-nlu-chart/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: {{ include rex-nlu-chart.fullname . }} labels: {{- include rex-nlu-chart.labels . | nindent 4 }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: {{- include rex-nlu-chart.selectorLabels . | nindent 6 }} template: metadata: labels: {{- include rex-nlu-chart.selectorLabels . | nindent 8 }} spec: {{- if .Values.modelCacheVolume.enabled }} volumes: - name: model-cache emptyDir: {} {{- end }} initContainers: - name: fetch-code image: curlimages/curl:8.4.0 command: [sh, -c] args: - | set -e; echo Cloning RexUniNLU from GitHub...; git clone https://github.com/modelscope/RexUniNLU.git /app; cd /app pip install -r requirements.txt; volumeMounts: - name: app-volume mountPath: /app containers: - name: {{ .Chart.Name }} image: {{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }} imagePullPolicy: {{ .Values.image.pullPolicy }} ports: - name: http containerPort: {{ .Values.service.port }} protocol: TCP livenessProbe: httpGet: path: /healthz port: http initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /readyz port: http initialDelaySeconds: 10 periodSeconds: 5 resources: {{- toYaml .Values.resources | nindent 10 }} volumeMounts: - name: app-volume mountPath: /app {{- if .Values.modelCacheVolume.enabled }} - name: model-cache mountPath: /root/.cache/modelscope {{- end }} env: - name: PYTHONPATH value: /app command: [sh, -c] args: - | cd /app python server.py --host 0.0.0.0:8000 --port 8000 volumes: - name: app-volume emptyDir: {} restartPolicy: Always关键设计点说明initContainer 下载代码避免维护私有镜像仓库直接拉取最新版 RexUniNLU适合快速迭代场景模型缓存挂载/root/.cache/modelscope映射为emptyDir保证同一 Pod 内多次请求共享缓存首次推理后秒级响应健康检查路径/healthz和/readyz需在server.py中补充见下一节资源限制精准匹配requests.cpu: 400m确保调度器能稳定分配资源避免因资源争抢导致 OOMKill。3.4 为 RexUniNLU 补充健康检查接口5 行代码原项目server.py未提供健康检查端点。我们在其基础上追加两行路由无需改动主逻辑# 修改 RexUniNLU/server.py在 app FastAPI() 之后添加 app.get(/healthz) def healthz(): return {status: ok, model_loaded: True} app.get(/readyz) def readyz(): # 可扩展检查模型是否加载完成、缓存是否就绪 return {status: ready}提示此修改仅需 5 行不影响原有功能却让 K8s 能准确判断服务状态。4. 部署与验证从本地测试到自动扩缩容4.1 部署 Chart 到 Kind 集群回到rex-nlu-chart目录执行部署helm install rex-nlu . --namespace default --create-namespace观察部署状态kubectl get pods -w # 你会看到 pod 从 ContainerCreating → Running约 20 秒完成 # 输出类似rex-nlu-7c8b9d4f5-xyzab 1/1 Running 0 18s验证服务是否可达curl http://localhost:8000/docs # 应返回 FastAPI 自动生成的 Swagger UI 页面 HTML4.2 手动触发一次 NLU 请求确认功能正常用curl发送一个标准请求复用项目自带的测试样例curl -X POST http://localhost:8000/nlu \ -H Content-Type: application/json \ -d { text: 帮我订一张明天去上海的机票, labels: [出发地, 目的地, 时间, 订票意图] }预期返回格式已简化{ intent: 订票意图, slots: {出发地: 我这里, 目的地: 上海, 时间: 明天} }至此RexUniNLU 已在 K8s 中稳定运行且功能完整。4.3 启用 HPA 并配置自动扩缩容策略Helm Chart 中已启用autoscaling.enabled: true但还需显式创建 HPA 对象。我们用kubectl直接创建kubectl autoscale deployment rex-nlu \ --cpu-percent60 \ --min1 \ --max5验证 HPA 是否生效kubectl get hpa # 输出 # NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE # rex-nlu Deployment/rex-nlu unknown/60% 1 5 1 10s初始TARGETS为unknown是正常的——Metrics Server 需要约 1 分钟采集首组数据。稍等后再次执行kubectl get hpa -w # 你会看到 TARGETS 从 unknown 变为 12%/60%REPLICAS 保持 14.4 压测验证让副本数真正动起来我们用hey工具发起持续压测如未安装请先brew install hey或go install github.com/rakyll/heylatest# 持续 2 分钟每秒 20 个并发请求 hey -z 2m -q 20 -c 20 http://localhost:8000/nlu \ -H Content-Type: application/json \ -d {text:查一下北京天气,labels:[查询天气]}同时新开终端实时观察 HPA 和 Pod 变化watch -n 1 kubectl get hpa,pods你会看到第 30 秒左右TARGETS升至75%/60%→ HPA 触发扩容第 45 秒REPLICAS从1/1变为2/2新 Pod 启动第 90 秒TARGETS仍高于 60%REPLICAS升至3/3压测停止后 2 分钟TARGETS降至20%/60%REPLICAS自动缩回1/1。这就是真正的“弹性”——无需人工干预系统根据真实负载自动伸缩。5. 生产就绪增强建议5.1 模型缓存持久化避免节点重启丢失当前emptyDir在 Pod 重建时会清空。生产环境建议改用PersistentVolume# 在 values.yaml 中启用 modelCacheVolume: enabled: true persistent: true storageClass: standard # 你的集群 StorageClass 名 size: 5Gi对应deployment.yaml中将emptyDir: {}替换为persistentVolumeClaim引用。5.2 日志标准化与集中采集RexUniNLU 默认打印日志到 stdout符合 K8s 最佳实践。只需确保集群已部署 Loki Promtail 或 Fluent Bit日志即可自动采集。无需修改代码。5.3 安全加固要点禁止 root 运行在deployment.yaml的 container 中添加securityContextsecurityContext: runAsNonRoot: true runAsUser: 1001 capabilities: drop: [ALL]镜像签名验证启用 Cosign Notary确保curlimages/curl等基础镜像来源可信网络策略添加NetworkPolicy仅允许 ingress controller 和内部服务访问rex-nluService。5.4 CI/CD 集成示意GitOps 风格将 Chart 放入 Git 仓库配合 Argo CD 实现自动同步# argocd-app.yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: rex-nlu-prod spec: destination: server: https://kubernetes.default.svc namespace: default source: repoURL: https://git.example.com/charts.git targetRevision: main path: charts/rex-nlu-chart project: default每次git push更新values.yaml中的replicaCount或resourcesArgo CD 会在 30 秒内自动同步到集群。6. 总结你已掌握一套可落地的 NLU 服务云原生方案回顾整个过程你实际完成了四件关键事情把一个 Python 脚本工程包装成标准 Helm Chart不再依赖本地环境一次打包随处部署让零样本 NLU 框架具备生产级弹性能力通过 HPA 实现毫秒级响应扩容告别“半夜被告警叫醒扩容”验证了轻量模型在 K8s 中的真实资源画像明确知道 1 个 RexUniNLU 实例吃多少 CPU、需要多少内存、模型缓存占多大空间建立了一套可复用的方法论这套流程initContainer 下载 → 挂载缓存 → 健康检查 → HPA 配置可直接迁移到其他轻量 AI 服务如 Whisper 微型语音转写、MiniCPM 文本摘要等。更重要的是你没有被 Kubernetes 的复杂性困住——所有操作都围绕 RexUniNLU 的实际需求展开删减了 80% 的“标准但无用”的配置项。下一步你可以将此 Chart 推送到公司内部 Helm Repository为不同业务线配置独立values-production.yaml实现“一套 Chart多套环境”结合 Prometheus Grafana绘制 NLU 请求 P95 延迟、槽位识别准确率等业务指标看板。技术的价值从来不在“会不会”而在“能不能让业务更稳、更快、更省”。你现在已经做到了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践

RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践 1. 为什么需要在K8s中部署RexUniNLU? 你可能已经试过在本地跑通 python test.py,也成功启动了 server.py 提供的 FastAPI 接口。但当真实业务流量进来——比如…...

【Hot 100 刷题计划】 LeetCode 128. 最长连续序列 | C++ 哈希表 O(N) 题解

LeetCode 128. 最长连续序列 | C Set 与哈希表 O(N) 双解法题解 📌 题目描述 题目级别:中等 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度…...

MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践

MedGemma X-Ray技术博文:医疗大模型在放射科的可信度验证实践 1. 引言:当AI走进放射科,我们如何相信它? 想象一下,一位放射科医生每天要面对上百张X光片,每一张都需要仔细查看、分析、撰写报告。长时间高…...

【Hot 100 刷题计划】 LeetCode 438. 找到字符串中所有字母异位词 | C++ 滑动窗口题解

LeetCode 438. 找到字符串中所有字母异位词 | C 固定滑动窗口极致优化题解 📌 题目描述 题目级别:中等 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词&#xff…...

cv_unet_image-colorization多分辨率适配实测:手机扫描件/胶片扫描图效果对比

cv_unet_image-colorization多分辨率适配实测:手机扫描件/胶片扫描图效果对比 1. 项目背景与技术原理 基于UNet架构深度学习模型开发的本地化图像上色工具,采用了阿里魔搭开源的图像上色算法。这个工具能够智能识别黑白图像中的物体特征、自然场景和人…...

Nunchaku-FLUX.1-dev开源镜像部署教程:免编译、免依赖、一键拉起服务

Nunchaku-FLUX.1-dev开源镜像部署教程:免编译、免依赖、一键拉起服务 1. 开篇:为什么你需要这个本地文生图神器? 如果你玩过AI绘画,肯定遇到过这些烦心事:想用国外模型生成中文场景,结果出来的图不伦不类…...

cv_unet_image-colorization图像上色入门必看:纯本地运行无网络依赖实操手册

cv_unet_image-colorization图像上色入门必看:纯本地运行无网络依赖实操手册 本文总计约3800字,完整阅读约需12分钟,包含详细的环境配置、操作步骤和实用技巧,适合零基础用户快速上手。 1. 引言:让黑白照片重现光彩 你…...

Cogito-v1-preview-llama-3B高性能:vLLM Serving + OpenAI兼容API部署教程

Cogito-v1-preview-llama-3B高性能:vLLM Serving OpenAI兼容API部署教程 1. 引言:为什么选择Cogito模型? 如果你正在寻找一个既强大又实用的语言模型,Cogito-v1-preview-llama-3B绝对值得关注。这个模型在同等规模的开源模型中…...

收藏备用!Workflow与Agent详解:小白也能看懂的AI自动化核心(附上手工具)

对于刚接触大模型的小白和程序员来说,Workflow和Agent是AI自动化领域最易混淆、也最核心的两个概念。本文将用通俗的语言拆解二者的核心作用、本质区别,补充实用落地细节,同时推荐新手友好型工具,帮你快速建立体系化认知&#xff…...

若依(ruoyi)RuoYiApp版—页面

ruoyiApp中的页面是一个符合vue规范的文件,如果你熟悉vue,这里将非常快速上手。 1.如何新增页面 uni-app中的页面,默认保存在工程根目录下的pages目录下。 每次新建页面,均需在pages.json中配置pages列表;未在pages.js…...

最好用的服务器文件传输工具:SSHFerry(下载见结尾)

为了 AutoDL 传文件更快更省心,我自己做了个 SSH 工作区:SSHFerry(下载见结尾) 之前我写过一篇和 AutoDL 上传有关的文章,没想到后面慢慢有了 1 万多阅读。 但那篇文章现在回头看,我觉得还是有点不够负责。…...

【力扣hot100】 198. 打家劫舍

一、题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金, 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存…...

安卓音频问题解决记录(一)

本文记录在安卓framework开发过程中遇到的一些音频问题的解决办法。 1.支持多应用同时录音(安卓10以上) 通过日志分析,发现当另一个应用打开录音的时候会被静音,日志如下: APM_AudioPolicyManager: setAppState(portId:43, state:2) APM_AudioPolicyManager: set…...

【VLA】Vision Language Action

文章目录一、什么是世界模型(World Model)?✅ 定义:🌍 核心功能:🔧 技术原理(典型架构):二、世界模型在具身智能中的作用三、VLA(Vision-Language…...

PyQt6开发可视化界面中遇到问题及解决方案集合

PyQt6开发可视化界面中遇到问题及解决方案集合 安装与配置: 1.配环境の拷打 因为博主这个项目本来是在pycharm中的本地python3.12.7环境下开发的,涉及mineru解析,vectordatabase、fuseki、neo4j入库等核心模块,开发桌面软件时遇…...

DeepSeekubernetes-1.35.3/kubernetes-1.35.3/test/utils/ktesting/examples/logging/example_test.go 源码分析

我来分析 Kubernetes 测试工具 ktesting 中的日志示例文件 example_test.go。这个文件展示了如何在 Kubernetes 测试中使用结构化日志。 文件概述 这是 Kubernetes v1.35.3 中 test/utils/ktesting 包的示例文件,展示了如何使用 ktesting 框架进行带有结构化日志的测…...

委托的全面知识总结(C#)

一.定义与本质委托是干什么的?委托就是用来存 方法 的容器你可以把一个方法当成 数据 一样传递1.什么是委托委托是C#中类型安全的函数指针,它是一种“类型”,可以存储,调用,传递一个或多个方法的引用2.核心本质委…...

如何3步轻松备份微博内容:Speechless免费PDF导出完整指南

如何3步轻松备份微博内容:Speechless免费PDF导出完整指南 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在信息快速更迭的数字时代&…...

PPTist:重构演示文稿创作流程的3大颠覆性突破

PPTist:重构演示文稿创作流程的3大颠覆性突破 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the ed…...

FALCON: Fast Autonomous Aerial ExplorationUsing Coverage Path Guidance(覆盖路径引导的快速自主空中探索)

创新点:提出一种基于连接性的增量式空间分解和连接图构造方法,捕获环境拓扑并促进有效的探测覆盖路径规划提出一种分层的探索规划方法,生成合理的覆盖路径作为全局指导,并优化局部边界访问顺序,保持覆盖路径的意图。提…...

抢答器软件哪家强?五款抢答器软件全方位深度评测

在知识竞赛、企业培训、团队建设等活动中,一套高效、公平、稳定的抢答器软件是活动成功的关键。面对市场上琳琅满目的产品,如何选择成为许多组织者的难题。本文将从实际应用出发,对五款主流的抢答器软件进行深度评测,涵盖功能、性…...

驱动模块的加载与卸载机制

昨天调板子又遇到个怪事:insmod加载驱动一切正常,但rmmod死活卸载不掉,内核日志里只留下一行“Device or resource busy”。查了半小时才发现,原来是有个用户态进程没关,一直占着驱动文件。这种问题在嵌入式开发里太常…...

AI技术原理--AI Token是什么:10分钟搞懂大模型基础单位

当你在ChatGPT里输入"你好,今天天气怎么样"的时候,你以为它真的读懂你的话吗? 并不是。 在你看不到的地方,有一个叫"分词器"的程序,正在把你的文字拆解成一个一个叫"Token"的单元。 …...

【研报280】汽车轻量化材料研究报告:改性塑料的应用趋势

本报告提供限时下载,请查看文后提示以下仅为报告部分内容:摘要:政策与新能源汽车需求双重驱动下,汽车轻量化成为行业核心发展方向,2026年国内将实施新的乘用车碳排放国标,叠加新能源汽车普遍重于燃油车&…...

Delphi经典8大天坑|第五篇:ShortString与String混用,导致字符串截断/乱码

一、现象描述项目中同时使用ShortString和string两种字符串类型,赋值时出现字符串被莫名截断(超过255字符的部分丢失),或出现乱码,尤其是在Delphi D7及以下版本中,问题更常见。典型场景:将一个长…...

强强联合:在快马平台用AI模型驱动你的下一代智能agent应用

最近在尝试用AI辅助开发时,发现了一个特别有意思的方向——智能agent框架。这类框架就像是AI应用的"骨架",而平台内置的AI模型则为其注入了"灵魂"。今天想分享下在InsCode(快马)平台上实现的一个创作辅助agent,整个过程让…...

3步构建数字记忆堡垒:开源工具GetQzonehistory数据留存全攻略

3步构建数字记忆堡垒:开源工具GetQzonehistory数据留存全攻略 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的生活轨迹日益依赖在线平台&#…...

实例 9:液体压强探究

实例 9:液体压强探究 功能介绍: 模拟U形管压强计探究液体内部压强规律。学生将探头放入液体不同深度,观察U形管高度差变化;更换不同密度的液体(水、盐水、酒精),对比压强大小。应用清晰展示“液体压强随深度增加而增大”及“液体压强与液体密度有关”的规律,并可计算具…...

**用Python实现高效分子结构建模与能量计算:从零开始构建你的计算化学工具链**在现代计算化学中,**Python已成

用Python实现高效分子结构建模与能量计算:从零开始构建你的计算化学工具链 在现代计算化学中,Python已成为科研人员首选的编程语言之一,它不仅语法简洁、生态丰富,还具备强大的科学计算能力。本文将带你一步步搭建一个基于Python的…...

双臂机器人piper_ros

1.piper gazebo仿真启动gazebo终端1:cd piper_ros source devel/setup.bash roslaunch piper_gazebo piper_gazebo.launch #有夹爪roslaunch piper_gazebo piper_no_gripper_gazebo.launch #无夹爪启动rviz终端2:cd ~/piper_ros source devel/setup.bash…...