UR机器人RTDE实时数据交换SDK开发指南:架构、代码与避坑
简介UR/优遨机器人RTDE实时数据交换SDK是一套面向工业机器人开发者的通信中间件通过标准TCP/IP将外部应用与UR控制器安全同步在不破坏控制器实时属性的前提下用于操控机器人I/O、绘制运动轨迹及对接EtherNet/IP等现场总线。压缩包共16个文件以12个Python脚本为主力辅以2个XML配置、1个URP程序文件及1个说明文档Python脚本覆盖数据序列化、CSV读写、控制回路示例与绘图工具XML文件用于配置记录与回路参数URP文件则提供上位机控制循环的机器人端入口整体仅24KB便于快速部署学习。已有1759人浏览学习适合具备一定Python基础的机器人工程师、自动化集成人员及高校科研者。借助示例代码与配置模板可快速掌握RTDE协议的消息订阅、数据解析和双向控制方法显著缩短针对优遨机器人的二次开发与调试周期。1. 项目门道UR机器人RTDE实时数据交换SDK在解决什么问题做机器人与视觉对接的开发者大多见过这种处境上位机通过 30002 端口刷机械臂状态看似在实时读取实际位姿已经滞后了三四个控制周期想做力控回写又要去拼二进制包字段错一位整包白收。UR/优遨机器人提供的 RTDE实时数据交换接口把这类问题从“解码细节”变成了“配置业务”。这份 SDK 以 3847 端口的 RTDE 协议为底座支持按需声明输出字段以最高 500Hz 的频率循环收数也能把控制量写回控制柜的输入寄存器。它适合上位机软件工程师、视觉标定与力控应用开发者、做数据采集和质量追溯的人不适合只想在示教器上点几下完成编程的用户——RTDE 解决的是外部数据交换问题不是轨迹编程问题。2. 架构解析从 30001 到 3847一份实时数据是怎样被配方化下发的RTDE 的价值要从 UR/优遨机器人对外通信端口的分工说起。这一章不贴代码先把通信栈的地图铺开。后面的二次开发全都要围绕这张端口地图做决策。2.1 端口分配RTDE 在机器人通信栈里的位置UR/优遨机器人对外通信不止 RTDE 一个口。早期接触这台设备的人最先遇到的是 30001 和 30002 这两个数据流端口。30001 是主客户端接口连接它的上位机可以读到机器人状态并通过 URScript 影响控制流程断开连接会直接影响正在跑的程序30002 是次客户端接口适合只做旁路监控的场景断开不影响控制柜主程序。这两个接口的数据都是二进制流布局由控制器固件决定外部只能被动跟着解析。端口接口名典型用途特点29999Dashboard Server程序加载、机器人状态查询文本命令一行一条30001Primary Client主控制程序数据流断开影响程序执行30002Secondary Client旁路监控断开不影响主程序30003Real-Time Client固定字段实时数据125Hz二进制固定布局3847RTDE可配置字段的实时数据交换最高可达 500Hz支持读写寄存器30003 是很多老项目用来做位姿追踪的实时接口固定 125Hz 输出槽位布局写死在固件里。想增加一个寄存器或者从电流字段换到力字段都得在解析层改偏移量一个固件升级就可能整包错位。RTDE 的出发点是把这套“固定布局”改成“按需配方”连接之后客户端声明自己需要哪些字段、以什么频率收包控制器按这份配方生成数据流。3847 端口因此成为视觉伺服、力控反馈、数据采集场景的首选。2.2 三段式协议连接、配方、数据流RTDE 协议的交互过程可以分成三个阶段理解了这三段任何语言封装在你眼里都是一个套路。第一阶段是连接上位机 TCP 连到 3847立刻发协议版本请求和控制柜确认双方协议版本。这个动作被很多人忽略但固件版本差异导致的字段兼容问题恰恰是现场翻车的高发区。第二阶段是配方客户端通过 SETUP_OUTPUTS 和 SETUP_INPUTS 分别声明输出和输入字段控制器收到后返回配方确认包里面带数据槽 ID、字段索引和类型信息。第三阶段是数据流客户端发 START控制器按设定频率持续推送数据包PAUSE 可以临时停流。控制包类型方向作用REQUEST_PROTOCOL_VERSION客户端→控制器协商协议版本GET_URCONTROL_VERSION客户端→控制器读取固件版本判断字段兼容性SETUP_OUTPUTS客户端→控制器声明输出数据配方SETUP_INPUTS客户端→控制器声明输入数据配方CONTROL_PACKAGE_SETUP_OUTPUTS控制器→客户端返回配方确认与槽位信息TEXT_MESSAGE双向调试文本消息DATA_PACKAGE控制器→客户端实际数据帧所有数据包共用一个 16 字节报头协议标识、消息类型、消息大小、控制器时间戳。做应用层开发时这个报头由 SDK 解掉但做底层封装的人要注意时间戳字段是控制器时钟不是上位机时钟拿它算帧率可以拿它和 PC 时间做减法就是给自己挖坑。2.3 数据字段与类型配方里能写什么配方里的字段名都是固定的 ASCII 标识符类型在协议层有严格映射。我列几个高频字段后面 Demo 里全部会用到。字段名协议类型含义timestampdouble控制器时间戳单位秒actual_qvector6d实际关节角度J1 到 J6actual_tcp_posevector6dTCP 位姿x/y/z 加 rx/ry/rzactual_tcp_speedvector6dTCP 线速度与角速度actual_tcp_forcevector6dTCP 受力actual_currentvector6d六关节电流actual_digital_input_bitsuint32数字输入状态位actual_double_register_0..47double可读写的浮点寄存器actual_int_register_0..47int32可读写的整数寄存器输入侧常用的是 input_double_register_0 到 47 和 input_int_register_0 到 47。这两个寄存器组与控制柜脚本内存直接打通RTDE 写入后URScript 里用 get_double_register() 就能读到。字段名区分大小写写错一个字母控制器直接拒单VECTOR6D 本质是六个连续的 double解析时别把它拆成两个 VECTOR3D顺序会乱。3. 核心模块拆解连接、配方、收发数据这三段怎么落地这一章直接进代码。我会把一个 RTDE 客户端该有的三块核心逻辑拆开讲连接与配方申请、数据循环与字典化、寄存器回写。看完这一章你对该怎么组织自己的采集模块心里基本有数。3.1 连接管理与配方申请先和固件对齐版本RTDE 的连接不是简单建立一个 socket它要和控制柜完成一次握手机制。下面这段是 SDK 高层 API 的典型用法from rtde import RTDE robot_ip 192.168.0.10 rtde RTDE(robot_ip, 3847) if not rtde.connect(): raise RuntimeError(RTDE 连接失败请确认控制柜 RTDE 开关已打开) output_spec [ timestamp, actual_q, actual_tcp_pose, actual_tcp_force, actual_current, ] if not rtde.setup_output(output_spec, frequency500): raise RuntimeError(输出配方配置失败请检查字段名与固件版本)逻辑说明connect() 是同步操作失败时先查网络通不通、控制柜设置里有没有勾选 RTDE而不要急着改代码。setup_output() 返回布尔值False 说明字段名拼错或当前固件不支持该字段这时候最好的调试手段是只留一个字段去试确认通了再逐步加。frequency 参数是目标频率控制器会按它的能力上限做裁剪并非你写多少它就一定给多少。3.2 数据循环与字典化拿到一帧数据的正确姿势配方申请成功后数据流是持续的、高频的。实际开发中很多人栽在“认为每次 receive 都一定能马上拿到数据”这个假设上所以循环里必须处理超时。rtde.start() try: while True: data rtde.receive(timeout1.0) if data is None: continue pose data[actual_tcp_pose] # (x, y, z, rx, ry, rz) ts data[timestamp] current data[actual_current] # 六关节电流元组 print(fts{ts:.3f} x{pose[0]:.3f} y{pose[1]:.3f} z{pose[2]:.3f}) except KeyboardInterrupt: pass finally: rtde.stop() rtde.disconnect()逻辑说明receive() 在 timeout 参数指定的秒数内等数据超时返回 None循环里要判空否则后面对 None 取键会直接抛异常。返回的 data 是一个字典键就是配方里声明的字段名VECTOR6D 字段被展开成六元组方便直接按索引取值。这里把 stop 和 disconnect 放进 finally 的用意是程序无论正常退出还是 CtrlC 中断都要把 RTDE 连接干净释放否则下回重连可能撞上“连接未释放”的假活状态。3.3 回写寄存器把计算结果送回控制柜RTDE 不只是单向读数它还能把计算结果写进控制柜的寄存器实现闭环。比如视觉算出一个位置补偿量直接通过输入寄存器交给机器人端 URScript 程序消费。input_spec [ input_double_register_0, # 补偿 X input_double_register_1, # 补偿 Y input_double_register_2, # 补偿 Z ] rtde.setup_input(input_spec, frequency500) rtde.start() x_offset 0.01 y_offset -0.005 z_offset 0.0 rtde.send([ input_double_register_0, x_offset, input_double_register_1, y_offset, input_double_register_2, z_offset, ])URScript 那侧读寄存器的方式很直接# 这段是 URScript 语法 x_offset get_double_register(0) y_offset get_double_register(1) z_offset get_double_register(2)参数说明send() 的入参是字段名和值成对出现的列表一次调用可以写多个寄存器减少小包发送对控制周期的干扰。setup_input 的频率建议和 setup_output 保持一致避免读写节奏错拍。URScript 侧 get_double_register() 读取的是脚本线程那块内存寄存器不是 Modbus 寄存器千万别和 get_standard_input_float() 这类 IO 函数搞混。提示寄存器数量有限double 寄存器一共 48 个用完要及时覆盖或复位不要长时间占用不放。4. 跑通 Demo500Hz 数据采集脚本的编写与现场验证前两章把架构和核心逻辑讲透了这一章给一个能直接落地跑的最小 Demo。目标是让一个之前没碰过 RTDE 的人在看到机械臂通电的情况下二十分钟内拿到一条稳定的高频数据流。4.1 环境准备开关、静态 IP 与防火墙第一次跑 RTDE 之前有三件事要在机器人端确认。第一示教器进入安装/设置页面找到实时数据交换选项并勾选启用某些固件默认是关的不打开的话 3847 端口永远连不上。第二上位机用静态 IP和控制柜在同网段比如控制柜是 192.168.0.10上位机就设 192.168.0.20避免 DHCP 换地址导致采集服务中断。第三Windows 防火墙放行 3847 端口或者调试阶段先临时关闭防火墙很多“连接超时”其实是防火墙拦掉了 TCP 握手。4.2 最小 Demo控制台采集脚本下面这个脚本可以整体拷走。它接收 IP、采集时长和频率参数跑完打印采集样本数为下一步的帧率验证提供数据。import time import argparse from collections import deque from rtde import RTDE def collect_demo(ip, seconds, frequency): rtde RTDE(ip, 3847) if not rtde.connect(): raise SystemExit(连接失败检查 IP、RTDE 开关和防火墙) fields [timestamp, actual_q, actual_tcp_pose, actual_tcp_speed] if not rtde.setup_output(fields, frequencyfrequency): raise SystemExit(配方配置失败检查字段名) rtde.start() samples deque(maxlen10000) deadline time.monotonic() seconds while time.monotonic() deadline: data rtde.receive(timeout0.5) if data: samples.append(data) rtde.stop() rtde.disconnect() return samples if __name__ __main__: ap argparse.ArgumentParser() ap.add_argument(--ip, default192.168.0.10) ap.add_argument(--seconds, typeint, default10) ap.add_argument(--frequency, typeint, default500) args ap.parse_args() data collect_demo(args.ip, args.seconds, args.frequency) print(f采样结束共收到 {len(data)} 帧)运行方式很简单python robot_rtde_demo.py --ip 192.168.0.10 --seconds 10 --frequency 500。收数期间机器人可以处于手动模式RTDE 数据流不依赖程序是否在运行。deque 的 maxlen 设成 10000是按最高频率约 20 秒的容量防止长时间采集时内存无限增长。4.3 验证指标用控制器时间戳算真实帧率与丢帧率数据收回来不能只看“有数据”要验证真实频率是否达到预期。这里有一个关键点必须用 data[timestamp] 计算而不是用 PC 端 time.time()。因为 RTDE 的时间戳来自控制器排除了上位机调度抖动和网卡延迟的干扰。ts [d[timestamp] for d in data] dt [ts[i 1] - ts[i] for i in range(len(ts) - 1)] if not dt: raise SystemExit(帧间隔为空请检查是否有数据) avg_interval sum(dt) / len(dt) actual_hz 1.0 / avg_interval loss_rate max(0.0, 1.0 - actual_hz / args.frequency) print(f实际频率 {actual_hz:.1f} Hz与设定值偏差 {abs(actual_hz - args.frequency):.1f} Hz) print(f按设定值估算丢帧率 {loss_rate * 100:.1f}%)逻辑说明这段代码先取相邻两帧时间戳的差值求平均后换算实际频率。丢帧率的分母是设定频率分子是实际频率与设定频率的差。如果实际频率明显低于设定值优先降低 frequency 参数而不是盲目加大字段数量。数据流频率和机器人控制周期相关超过了物理上限控制器只能丢弃或降频发送这不是代码能解决的。提示丢帧率在 1% 以内属于正常波动超过 5% 就说明负载太高或网络有问题先做减法而不是加法。5. 避坑指南RTDE 接入时躲不开的五个翻车点RTDE 协议本身不算复杂现场真正让人头疼的往往是环境、习惯和想当然。这一章写五条高频踩坑记录每条按现象、原因、解决展开都是我判断这类项目时最优先排查的方向。5.1 connect 一直失败先查控制柜开关别急着改代码现象connect() 反复报超时或者 TCP 层直接拒绝示教器上没有任何报错。原因最常见的是控制柜安装设置里的实时数据交换选项没勾选其次是上位机防火墙拦了 3847 端口再往下查是同网段问题。很多人第一反应是去查代码参数其实前三个环境因素占了八成。解决按顺序走一遍——示教器勾选 RTDE 启用并重启控制柜相关服务临时关防火墙验证ping 一下机器人 IP 确认链路通。环境因素排除后再回来看代码里 IP 和端口有没有手误。5.2 setup_output 返回 False字段名错一个字符整个配方失效现象字段清单很长setup_output 一直返回 False控制柜日志出现 unknown field 之类的提示。原因RTDE 字段名是大小写敏感的actual_qd 写成 actual_Qd 或者把下划线漏了控制器都当成未知字段。另一个隐蔽原因是固件版本差异老固件不支持部分新字段同样会拒绝配方。解决字段清单一次只加一个字段去试确认哪个字段出的问题。新功能字段先查当前固件是否支持不要盲目抄网上老项目的配方。把可用的字段清单打印出来与代码里的 spec 字段逐一比对是最快定位方式。5.3 receive() 间歇超时频率、字段数和控制器负载是三角关系现象数据流能启动但 receive(timeout1) 频繁超时隔几秒又恢复正常帧率忽高忽低。原因频率设了 500配方里又同时加了六七个 vector6d 字段控制器生成数据包的开销已经接近上限再加上上位机线程被系统调度器抢占即使控制器发了应用层也没及时取走。解决在目标设备和目标字段数量下不要把 frequency 顶到上限。我一般的做法是先 500 起步测一把看实际频率和丢帧率不达标就退到 250。采集线程尽量绑定 CPU 核并在系统层面提高线程优先级避免与其他任务抢占。5.4 位姿数值看起来在跳变注意 vector6d 的解析顺序现象xyz 里某个轴周期性跳到极大值或极小值而机器人实际没有这种动作。原因这不是传感器坏了而是解析端把 VECTOR6D 和其他字段的边界搞错位了。RTDE 包是连续二进制流字段顺序完全由配方决定少读一个字节后面全部错位。另一个常见错误是把 vector6d 强行拆成两个 vector3d结果 rx 读成第二组 x。解决调试时先只收 actual_tcp_pose 一个字段确认数值合理后再逐步加入其它字段这样出问题能立刻定位是哪个字段的解析不对。不要一次全字段铺开黑匣子最难查。5.5 重连后数据流“假活”有包但时间戳不动现象程序崩溃后重启receive() 能拿到数据字典但 timestamp 长时间停在旧值数据内容也不变化。原因控制器端旧 RTDE 连接没有完全释放新连接只是“借壳”拿包或者上一次退出时没走 stop 和 disconnect控制器认为旧客户端还在正常消费没有真正切换数据流状态。解决所有退出路径都强制执行 rtde.stop() 再 disconnect包括异常和 CtrlC 场景。重连前 sleep 一到两秒给控制器清理连接的余量。如果问题依旧通过 Dashboard 端口重启一次 RTDE 服务比反复改代码更快。6. 二次开发思路把采集脚本改造成常驻服务并扩展多机器人把上一章的 Demo 搬进正式项目之前有一个架构层面的转变要做从“启动脚本收一会数”变成“常驻后台持续供给数据”。最省事的模型是采集线程加队列。采集线程独占 RTDE 连接负责接收数据并丢进队列业务线程只消费队列不碰 socket两边互不阻塞。import threading import queue from rtde import RTDE class RtdeCollector(threading.Thread): def __init__(self, ip, fields, freq500, maxlen2000): super().__init__(daemonTrue) self.ip ip self.fields fields self.freq freq self.q queue.Queue(maxsizemaxlen) def run(self): rtde RTDE(self.ip, 3847) rtde.connect() rtde.setup_output(self.fields, frequencyself.freq) rtde.start() while True: data rtde.receive(timeout0.5) if data: if self.q.full(): continue self.q.put(data)队列的 maxlen 是这套模型的关键参数业务侧消费慢时采集线程要优先保证新数据不被旧数据阻塞因为 RTDE 是实时流追最新状态才是主目标回放历史是另一个需求。多机器人扩展时每台机器人独占一个 RTDE 连接各起一个采集线程共享一套字段定义但 socket 绝不共用。场景推荐接法单台机器人视觉追踪一条 RTDE 500Hz配视觉反馈多台机器人集中数据采集每台一条 RTDE 连接采集线程隔离既有系统做旁路监控30002 旁路读状态RTDE 留给控制闭环最后说一个我自己定的习惯每次接入 RTDE先只收 timestamp 和 actual_q 两个字段确认频率稳了再去加 actual_tcp_pose、actual_current 这些重型字段。任何一次改动字段清单、频率数值、控制柜固件版本三个信息必须写在同一行日志里。这个习惯帮我避开了无数次“上次还能跑这次怎么不行”的定位困难。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Python 2020版教程零基础入门:四件套拆解与避坑进阶指南

Python 2020版教程零基础入门:四件套拆解与避坑进阶指南

简介:这套2020版Python完全入门教程,专为零基础学习者精心打造,内容从环境安装、基础语法起步,循序渐进地覆盖变量与数据类型、条件与循环、函数定义、异常处理等核心知识点,并深入讲解面向对象编程、文件读写、模块与…

2026/10/18 2:29:00 阅读更多 →
Python+pygame复古方块赛车游戏开发教程:从零实现碰撞检测与难度曲线

Python+pygame复古方块赛车游戏开发教程:从零实现碰撞检测与难度曲线

1. 为什么用 pygame 做一款复古方块赛车游戏很多人第一次接触游戏开发,都是从"我想做个能玩的东西"开始的。但真打开教程一看,要么是贪吃蛇、打砖块这种老掉牙的案例,要么直接上 Unity、Godot 这种重型引擎,光环境配置就…

2026/10/18 2:29:00 阅读更多 →
FPGA豆浆机面板设计实战:Verilog状态机与按键消抖教程

FPGA豆浆机面板设计实战:Verilog状态机与按键消抖教程

简介:面向FPGA课程设计任务,这份压缩包提供了基于Verilog的豆浆机控制面板完整方案,适合电子信息类本科生、自学FPGA的开发者参考。资源围绕豆浆机六档功能选择、按键操作、LED状态指示、数码管倒计时、温度检测与干烧/溢出蜂鸣报警等模块展开…

2026/10/18 2:29:00 阅读更多 →

最新新闻

Scala 实现 DBpedia RDF 转 CSV 并导入 Neo4j 图数据库

Scala 实现 DBpedia RDF 转 CSV 并导入 Neo4j 图数据库

简介:这份资源面向需要将 DBpedia 知识图谱导入 Neo4j 的开发者与数据工程学习者,核心是一个用 Scala 编写的 Spark 应用程序,可将 DBpedia.org 的平面文件 RDF 转储处理并生成 CSV,进而构建 Neo4j 数据存储文件,解决 …

2026/10/18 3:24:16 阅读更多 →
一条命令把APK变回可编辑Godot工程:gdsdecomp反编译实战

一条命令把APK变回可编辑Godot工程:gdsdecomp反编译实战

一条命令把APK变回可编辑Godot工程:gdsdecomp反编译实战 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp 手里只有一个发行版的APK,一条命令就能把它还原成带场景、脚本…

2026/10/18 3:24:16 阅读更多 →
分页查询接口实战:学习计划列表从设计到深分页优化

分页查询接口实战:学习计划列表从设计到深分页优化

最近在做一个学员端的学习中心模块,其中一个任务就是开发“查询我的学习计划”的接口。听名字不算复杂,可真正落地的过程中,我发现接口的坑远不止写一条 SQL:光分页就有参数校验、排序稳定、深分页性能、数据权限一堆问题。这篇把…

2026/10/18 3:24:16 阅读更多 →
Scala流式解析DBpedia RDF:Neo4j图数据库导入实战

Scala流式解析DBpedia RDF:Neo4j图数据库导入实战

简介:这份资源面向需要将 DBpedia 知识图谱导入 Neo4j 图数据库的开发者与数据工程学习者,核心是一个用 Scala 编写的 Spark 应用程序,可将 DBpedia.org 的平面文件 RDF 转储处理并生成 CSV,进而构建 Neo4j 数据存储文件&#xff…

2026/10/18 3:24:16 阅读更多 →
读懂config.json:Kimi-K3-DSpark-MLA-NPU关键配置参数逐行精讲

读懂config.json:Kimi-K3-DSpark-MLA-NPU关键配置参数逐行精讲

【免费下载链接】Kimi-K3-DSpark-MLA-NPU 项目地址: https://ai.gitcode.com/Eco-Tech/Kimi-K3-DSpark-MLA-NPU 点击查看 免费下载 本文将带你逐行读懂 Kimi-K3-DSpark-MLA-NPU 模型的 config.json 配置参数:从基础架构维度、MLA 注意力的低秩投影参数&…

2026/10/18 3:24:16 阅读更多 →
i茅台每日自动预约:用 Docker 部署并使用 campus-imaotai

i茅台每日自动预约:用 Docker 部署并使用 campus-imaotai

i茅台每日自动预约:用 Docker 部署并使用 campus-imaotai 【免费下载链接】campus-imaotai i茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法) 项目地址: https…

2026/10/18 3:23:16 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →