机器人通讯调试代码实战:串口粘包、校验与超时重传解析
简介这套源码包面向需要与机器人进行TCP/IP通信调试的C#开发者基于Socket技术与WPF界面框架实现服务器端监听、连接管理、指令下发与反馈展示适用于工业机器人与上位机的联调场景可快速搭建一个可操作的机器人通讯调试工具。压缩包共38个文件、约70KB包含14个.cs核心逻辑文件、2个.xaml界面布局文件以及解决方案(.sln)、工程配置(.csproj/.config)、可执行程序(.exe)与.pdb调试符号等结构清晰便于直接打开研究或二次开发。资源已有1416人学习来自作者wawa092的实践整理实用性较强。通过阅读这些代码可掌握异步套接字编程、UI线程交互、异常断开处理等关键环节理解机器人服务器程序的完整实现思路为自动化、物联网场景下的通讯调试提供直接参考。1. 与机器人通讯的调试代码为什么你的控制指令总被吞某开发者前几天在调一台自己攒的移动机器人底盘现象很奇怪上位机隔 2 秒发一次“前进 20 厘米”机器人却不按指令行动有时走、有时停日志里也看不出异常。折腾到半夜才发现问题根本不在机器人而在他写的“调试代码”上——发送线程和接收线程在抢同一个串口句柄一条指令刚发出去就被另一条收到的数据覆盖了一半。那瞬间我才意识到所谓“与机器人通讯的调试代码”不是用现成库把数据发出去就完事而是一套能让底层收发、协议拆包、超时重发全部可控的最小工具链。它解决的是“我发给机器人的指令到底送没送到、被没被理解、响应是什么”这三件事适合搞机器人控制、上位机联调、硬件接口对接的从业者不管你是用串口、网口还是内部进程通信这套思路都能套进去。2. 先分清三种通讯形态串口、网络套接字与进程内管道“与机器人通讯的调试代码”第一件事不是写代码而是先确定物理链路。机器人的“大脑”和“四肢”之间往往隔着好几层底盘控制板、传感器转接板、工控机、远程上位机。不同链路决定了调试代码应该长成什么样换一种链路代码基本要重写。2.1 物理链路决定调试代码的边界我把常见链路按“调试时必须面对的现象”做了个对比照着这张表选方向能省一半试错时间。链路类型典型应用场景调试代码的关注点坑的概率串口UART/RS485单片机底盘、舵机控制板、激光雷达转接波特率、字节流顺序、断帧高TCP 套接字工控机与远端上位机、机械臂控制接口连接状态、字节流完整性、粘包中UDP 套接字高频率位姿广播、状态订阅丢包、乱序、无连接状态高共享内存 / 进程内管道机器人操作系统节点间通信、仿真环境数据同步、生命周期、读写锁低这里要说明一点共享内存和管道虽然也属于“通讯”但调试时通常不需要考虑硬件波特率或网线更像普通编程问题。我工作中 90% 的“通讯调试”是针对串口和 TCP/UDP 的所以下面的代码也围绕这两类展开。2.2 串口通讯的调试代码要先回答三个问题串口是机器人调试里最常用的链路也是出问题最多的。写串口调试代码前必须先把三个问题问清楚端口设备名是什么、波特率是多少、数据位校验位停止位怎么配。少问一个后面全是玄学。import serial # 第一步先把串口参数写死不要自动探测 ser serial.Serial( port/dev/ttyUSB0, # Linux 下常见串口设备名 baudrate115200, # 要和机器人控制板保持一致 bytesize8, # 数据位大部分设备是 8 parityN, # N无校验E偶校验O奇校验 stopbits1, # 停止位常见为 1 timeout0.2, # 读超时单位秒必须设置 ) print(串口已打开:, ser.name) # 用十六进制发送一条帧避免被字符编码干扰 frame bytes([0xAA, 0x55, 0x01, 0x00, 0x00, 0x00]) ser.write(frame) # 读响应最多读 32 字节超时 0.2 秒后返回 resp ser.read(32) print(原始响应:, resp.hex()) ser.close()这段代码的逻辑不复杂但参数很关键。port在 Windows 下通常是COM3、COM4这类名字Linux 下常见的是/dev/ttyUSB0、/dev/ttyACM0。timeout0.2一定不能省略否则read()会一直卡在那里让你的调试代码看起来像死机。bytes方式发送是为了避开字符编码问题机器人协议字段用的多半是十六进制字节直接用b\xAA\x55写最直观。2.3 网络通讯的调试代码要区分 TCP 与 UDP机器人的网络接口越来越多机械臂、导航模块、视觉盒子都喜欢丢一个 TCP 或 UDP 端口出来。写网络调试代码前要分清你是要可靠下发指令还是要高频收状态。TCP 可靠但连接管理麻烦UDP 轻量但丢包不可控。import socket # TCP 客户端适合下发控制指令 sock socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(0.5) # 不要用默认阻塞模式否则读不到数据会卡住 sock.connect((192.168.1.10, 8080)) # 机器人主控的 IP 和端口 sock.sendall(b\xAA\x55\x01\x00\x00\x00) try: resp sock.recv(1024) print(TCP 响应:, resp.hex()) except socket.timeout: print(超时没有响应) sock.close()这里settimeout(0.5)是调试代码的关键没有它recv在没有数据时会一直阻塞。TCP 是字节流和串口一样存在粘包问题所以不能只recv一次就认为拿到完整指令。UDP 的调试代码更短import socket udp socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp.settimeout(0.5) udp.sendto(b\xAA\x55\x02\x00\x00\x00, (192.168.1.10, 9090)) try: data, addr udp.recvfrom(1024) print(UDP 响应来自:, addr, data.hex()) except socket.timeout: print(UDP 超时可能已丢包)UDP 没有连接概念所以sendto出去后能不能收到完全看网络环境。调试代码里一定要有超时和重试的余地否则你会花大量时间排查“机器人为什么没反应”。3. 最小的通讯骨架用 Python 写一个能跑通的调试客户端很多人拿到机器人的通讯协议文档后上来就封装一个“通讯管理类”里面塞了线程、重传、日志、界面结果连一次最简单的收发都没跑通。我的习惯是先用一个最小骨架把数据跑通再逐步加功能。3.1 串口调试客户端连接、发送与回读下面这段代码是一个可以直接执行的串口调试客户端支持命令行输入十六进制帧并打印响应。它的价值在于不依赖任何图形化串口工具能嵌入你的自动化测试脚本。import serial import binascii ser serial.Serial(/dev/ttyUSB0, 115200, timeout0.2) def send_frame(hex_str: str) - str: # 把用户输入的 AA 55 01 转成字节帧 clean hex_str.replace( , ).replace(0x, ) frame binascii.unhexlify(clean) print(发送:, frame.hex()) ser.reset_input_buffer() # 清掉残留数据避免把上一次响应混进来 ser.write(frame) ser.flush() resp ser.read(256) if len(resp) 0: return (无响应) return resp.hex() while True: cmd input( ).strip() if cmd in (quit, exit): break if len(cmd) 0: continue try: print(返回:, send_frame(cmd)) except (binascii.Error, ValueError) as e: print(输入格式错误:, e) ser.close()这个骨架里有两个容易被忽略的细节。第一个是reset_input_buffer()很多串口设备上电后会发一段自检信息如果不清空它会混入你的第一次响应里。第二个是flush()它确保write的数据真正从系统缓冲区发出去而不是还躺在内存里。输入命令时建议直接输入AA 55 01 00 00 00程序会自动去掉空格并转换。3.2 参数怎么设波特率、超时与换行符参数设置是最容易翻车的地方我整理了一个调试时的设置表照着设基本不会错。参数建议值什么时候要改波特率115200底盘老型号常用 9600/57600以设备手册为准数据位8极少数工业设备用 7 位导致 ASCII 解析错位校验位N总线较长或有干扰时设为 E但调试初期不建议开停止位1RS485 半双工设备可能要求 2 位timeout0.2~1 秒机器人响应慢时加大但不要超过 3 秒否则像死机换行符无直接发字节如果协议说“以 \r\n 结尾”才需要发调试初期一定要用十六进制看收发不要用字符串打印。机器人协议里0xAA和0x55这两个值经常出现用字符串打印会变成乱码还容易把二进制0x0A当成换行吞掉。3.3 先跑通再封装消息日志与错误码最小骨架跑通后不要急着写类和线程先加一个最丑但最有效的消息日志。debug_log [] def send_frame_logged(hex_str: str) - str: result send_frame(hex_str) debug_log.append({ tx: hex_str, rx: result, }) with open(comm_log.txt, a, encodingutf-8) as f: f.write(fTX {hex_str}\nRX {result}\n\n) return result这样每一次收发都会被记录到文本里。出现问题时把日志拉出来比对很容易看出是“指令根本没发出去”还是“机器人返回了错误码”。我见过最典型的情况机器人每次都返回0x10表示参数越界上位机日志里却只记录了发送、没记录响应开发者还以为机器人没反应。这个错误码就是调试代码盯的第一信号不要忽略任何非预期响应。4. 把协议层剥开拆包、粘包、校验和与超时重传只解决“发出去”和“收回来”还远远不够。机器人通讯的调试代码里真正决定成败的是协议解析层。这一章我会把拆包、校验、重传三个问题拆开讲附上可直接改的代码。4.1 机器人通讯里最常见的帧格式一个拿来就能改的模板我见过的机器人协议无论多花哨基本都是这个骨架帧头长度指令码数据体校验2 字节1 字节1 字节N 字节1 字节AA 55从指令码到校验前长度0x01 代表运动如target_speed, distance异或和下面是一个按这种模板写的解析函数输入完整的字节流输出指令和校验是否通过。def parse_frame(frame: bytes) - dict: # 帧结构AA 55 len cmd data... crc if len(frame) 6: return {ok: False, reason: 帧太短} if frame[0] ! 0xAA or frame[1] ! 0x55: return {ok: False, reason: 帧头错误} length frame[2] if len(frame) ! length 5: # 2字节帧头 1字节长度 数据 1字节校验 return {ok: False, reason: 长度不匹配} cmd frame[3] data frame[3: 3 length - 1] crc frame[-1] # 常见做法对指令码和数据体做异或校验 check 0 for b in data: check ^ b if check ! crc: return {ok: False, reason: 校验失败} return {ok: True, cmd: cmd, data: data, crc_ok: True}这个函数的逻辑说明先把帧头、长度、指令码、数据体、校验字节分别摘出来。length字段定义的是“指令码 数据体的长度”所以总长度是2 1 length 1。校验这里用了最简单的异或真实设备可能是 CRC16、加和校验改法都一样把两边算出的值比对。4.2 串口粘包与拆包按帧头帧尾还是按长度串口和 TCP 都是字节流没有“一条消息”的概念。你调用read(64)读到的不一定是完整一帧可能是半帧也可能是两帧拼在一起。处理这个问题的标准做法是维护一个接收缓冲区持续向里面追加数据然后尝试从缓冲区头部切出完整帧。def extract_frames(buffer: bytearray) - tuple[list[bytes], bytearray]: frames [] while True: if len(buffer) 6: break # 连最小帧长都不够等待更多数据 # 找帧头 if buffer[0] ! 0xAA or buffer[1] ! 0x55: # 丢弃一个字节继续找 buffer.pop(0) continue length buffer[2] frame_total length 5 if len(buffer) frame_total: break # 数据未收满 frames.append(bytes(buffer[:frame_total])) del buffer[:frame_total] return frames, bufferextract_frames的核心思路是“从左侧找帧头按长度字段切出整帧剩下的继续等”。这里踩过一个大坑如果帧头校验只判断一个字节数据体里的AA 55很容易被误认为新帧头。所以稳妥做法是同时校验buffer[0]和buffer[1]并且严格依赖长度字段。如果长度字段经常不对那问题多半出在机器人端的代码调试端要打印长度字段看看。4.3 校验和到底要不要做从丢帧到假响应有开发者嫌校验麻烦在调试代码里省略了校验结果收到一段看似完整、实际上已经是错位的数据机器人端按错误指令执行后让人摸不着头脑。我建议调试代码里必须做校验哪怕是异或和也比完全裸奔强。def verify_crc(frame: bytes, start: int 0, end: int -1) - bool: crc 0 end len(frame) if end -1 else end for byte in frame[start:end]: crc ^ byte return crc frame[-1]校验失败时要做的第一件事不是重发而是把这条坏帧原样打印出来。记住不加修饰地打印十六进制并与正常帧对比。如果坏帧总是出现在丢包、重新上电、线缆被碰之后那多半是物理层干扰如果坏帧固定出现在某条指令之后那要考虑是否是机器人端在数据体里加了转义字符。转义字符也是常见设计比如把AA转成AA AA或AA 00解析前必须先反转义否则校验永远失败。4.4 超时与重传不是所有丢包都能靠物理层解决串口偶尔丢一针还可以忍但指令下发这种关键操作必须有重传机制。简单实现是发送后等待响应超时不回就再发一次连续三次失败才报错。def send_with_retry(ser, frame: bytes, retries: int 3) - bytes: for attempt in range(1, retries 1): ser.reset_input_buffer() ser.write(frame) ser.flush() resp ser.read(64) if len(resp) 0 and verify_crc(resp): return resp print(f第 {attempt} 次发送未收到有效响应) raise TimeoutError(三次重试后仍无有效响应)注意重传前必须清空接收缓冲否则第一次的迟到响应会被当成第二次的响应导致校验错乱。重传间隔可以用time.sleep(0.05)到0.2之间太短可能导致上一次的数据还在线上太长会拖慢整个控制周期。具体的重传次数要看机器人的响应时间动作快的设备 3 次足够慢的可以放到 5 次。5. 调试机器人通讯的 5 个高频踩坑从串口乱码到端口假死这部分是我的血泪经验汇总。每一条都是实际联调中遇到过的问题按“现象 → 原因 → 解决”写出来有些坑排查一次花掉一下午。5.1 乱码波特率对不上时日志看起来像科幻小说现象串口收到的数据在终端里显示成乱码\x00\xff之类的字符刷屏。 原因绝大多数情况是波特率不一致。发送端用了 115200机器人端却配置成 9600两边都觉得自己在正常工作实际收到的全是噪声。 解决先把波特率设置成与设备手册完全一致。如果手册写的是 115200但显示乱码可以尝试 57600、38400、19200、9600 这几个常见值。另外用十六进制打印接收数据不要用print(resp.decode())这类字符串方式因为0x00被decode成字符后根本看不出结构。5.2 端口假死发送一次后指令全部失效现象程序刚启动时发第一条指令机器人正常响应再发第二条就没反应程序也不报错。 原因第一次发送后机器人的响应数据没有及时读取残留在串口缓冲区里。第二次写入的新指令与残留数据混在一起机器人端解析失败整个过程看起来像端口被“卡死”。 解决在每次发送前调用ser.reset_input_buffer()。如果问题依然存在检查超时设置把timeout从 0.1 改成 0.5 试试。还有一种隐蔽情况是串口线松动或接触不良导致数据只发不收那个就换线不要继续调试软件。5.3 粘包导致的指令错乱现象机器人执行的动作变成“前进后退同时进行”或者一条指令被拆成两半执行。 原因一次发送了两帧数据接收端没有按帧拆包把两帧内容当成一条指令解析。 解决用第 4 章的extract_frames持续拆包不要每次read就当作一条完整指令。调试代码里应该强制走拆包流程哪怕一次read只读到一个字节也要先放缓冲区再解析。5.4 线程读写冲突数据互相踩踏现象上位机同时有发送线程和接收线程运行一段时间后程序崩溃或指令随机丢失。 原因两个线程同时操作同一个serial.Serial对象或同一个socket系统底层读写没有线程保护导致句柄状态损坏。 解决最粗暴也最可靠的办法是“读写分离”一个线程只负责收数据并写入队列另一个线程只负责从命令队列取指令并发送。不要让两个线程同时调用同一个write。代码上用queue.Queue做解耦比加锁更清晰。import queue from threading import Thread cmd_queue queue.Queue() def reader(ser): while True: data ser.read(128) if data: print(收到:, data.hex()) def writer(ser): while True: frame cmd_queue.get() ser.write(frame) # 启动两个线程互不干扰5.5 局域网内丢包重发机制被忽略现象机器人通过 WiFi 和上位机通讯指令偶尔失效但网线直连就正常。 原因无线网络本身存在丢包和延迟抖动UDP 丢包尤其明显。开发者只写了sendto没写重发所以丢包只能干等。 解决在调试代码中实现“发送 → 等响应 → 超时重发”的逻辑。注意区分指令类型往返控制指令必须重发高频状态广播不要重发否则会导致网络风暴。6. 把调试记录变成可回放的数据一次联调的后悔药怎么准备调试机器人通讯最难熬的时刻不是代码报错而是“感觉刚才还好好的现在突然不行了”。这时候如果只有内存里的变量没有落盘记录你只能凭记忆猜测刚才做了什么。我的做法是把每一次收发记录成带时间戳的调试轨迹然后用一个简单的回放脚本复现现场。回放脚本的核心数据结构是一行文本按“时间 方向 hex数据”输出。第 3 章的comm_log.txt只记录原始收发这一章要加上方向和时间with open(replay.log, a) as f: ts time.strftime(%H:%M:%S.%f) f.write(f{ts} TX {hex_str}\n) f.write(f{ts} RX {result}\n)回放时不直接发送数据而是把每条记录按时间间隔重新“表演”一遍方便你观察机器人的动作是否与当时的指令匹配。这个习惯帮我节省了大量复现时间。每次联调前先跑一段自动巡检发一个已知指令确认机器人返回预期响应再开始正式调试。巡检脚本一般用pytest写几个断言把波特率、帧头、校验、响应时间作为用例参数失败了会明确指出是哪一层出了问题。说到底与机器人通讯的调试代码核心价值不在代码本身而在你能否快速定位“是哪一层出了问题”。物理层看波特率和接线链路层看粘包和丢包协议层看校验和拆包应用层看业务逻辑。把这四层分开验证再配上可回放的日志机器人就不会再给你“薛定谔的响应”。希望这套方法能帮你少走一点夜路。本文还有配套的精品资源点击获取

相关新闻

机器人通讯调试代码实战:先链路后代码,快速定位通讯问题

机器人通讯调试代码实战:先链路后代码,快速定位通讯问题

简介:这是一个面向机器人通信调试的C# / WPF示例工程,利用Socket(套接字)在服务器端与机器人客户端之间建立TCP连接,并借助WPF提供可视化的操作与反馈界面,适合自动化、物联网及AI领域需要调试设备通信的开…

2026/10/15 17:42:59 阅读更多 →
Redis Lua脚本NOSCRIPT报错全解析:缓存机制、降级策略与生产避坑指南

Redis Lua脚本NOSCRIPT报错全解析:缓存机制、降级策略与生产避坑指南

1. 从一次线上告警说起:脚本明明存在,为什么Redis说找不到 凌晨两点,监控群里弹出一条告警:订单状态同步任务批量失败,错误日志里清一色刷着同一句话—— NOSCRIPT No matching script. Please use EVAL. 。这个报错…

2026/10/15 17:42:59 阅读更多 →
MATLAB BP神经网络手写数字识别:从MNIST读取到GUI手写板完整实现

MATLAB BP神经网络手写数字识别:从MNIST读取到GUI手写板完整实现

简介:一份基于MATLAB的BP神经网络手写数字识别完整工程,面向机器学习初学者与MATLAB用户,目标是从零跑通数据预处理、网络构建、训练到评估的完整流程。压缩包共5027个文件,约6.15MB,其中5000张0~9手写数字…

2026/10/15 17:42:59 阅读更多 →

最新新闻

如何安全取消 wreq 请求?深入 HTTP/1、HTTP/2、HTTP/3 的 Cancel Safety 完整指南

如何安全取消 wreq 请求?深入 HTTP/1、HTTP/2、HTTP/3 的 Cancel Safety 完整指南

【免费下载链接】wreq An ergonomic, privacy-aware Rust HTTP Client 项目地址: https://gitcode.com/gh_mirrors/rq/wreq 点击查看 免费下载 wreq 是一个注重易用性与隐私的 Rust 异步 HTTP 客户端。在 wreq 中取消请求的方式非常统一:丢弃&#xff0…

2026/10/15 18:28:43 阅读更多 →
STM32驱动LSM303磁力计:从I2C通信到航向角校准实战

STM32驱动LSM303磁力计:从I2C通信到航向角校准实战

简介:这份资源是面向嵌入式开发初学者与STM32学习者的LSM303磁力计驱动程序包,围绕三轴磁强计数据采集与IC通信展开,可解决电子罗盘、姿态检测等场景中磁场数据读取与解析的问题。压缩包共125个文件,以35个h头文件、34个c源文件为…

2026/10/15 18:28:43 阅读更多 →
5 分钟上手 hermes-jev-skills:两条命令让 Hermes 与 Claude Code 又聪明又省钱

5 分钟上手 hermes-jev-skills:两条命令让 Hermes 与 Claude Code 又聪明又省钱

【免费下载链接】hermes-jev-skills Jev-powered model routing, memory, compaction, skill selection, computer and browser use for Hermes agents (also Claude Code and Codex) 项目地址: https://gitcode.com/gh_mirrors/he/hermes-jev-skills 点击查看 免费…

2026/10/15 18:28:43 阅读更多 →
给 Neo4j 套一层 GraphQL API:Java 实现原理与避坑指南

给 Neo4j 套一层 GraphQL API:Java 实现原理与避坑指南

简介:这是一份面向 Java 后端与图数据库开发者的 Neo4j GraphQL API 实现资源包,解决如何让 Neo4j 对外提供 GraphQL 接口的问题。其核心价值在于能把 GraphQL 查询与变更自动转换为 Cypher 语句,并在 Neo4j 上执行;既可作为依赖库…

2026/10/15 18:28:43 阅读更多 →
IoT23流量分类实战:从数据加载、特征工程到模型选型与避坑指南

IoT23流量分类实战:从数据加载、特征工程到模型选型与避坑指南

简介:这份资源面向网络安全与机器学习方向的学习者与研究人员,围绕IoT23数据集提供一套完整的网络流量异常检测与多分类实验方案,覆盖朴素贝叶斯、决策树、随机森林、逻辑回归与SVM等经典算法的对比实践,适合具备Python基础、希望…

2026/10/15 18:28:43 阅读更多 →
SX126x LoRa驱动开发实战:从寄存器配置到拉距测试

SX126x LoRa驱动开发实战:从寄存器配置到拉距测试

简介:这份资源是面向嵌入式与物联网开发者的sx126x系列LoRa模块驱动代码包,适用于基于STM32平台集成LoRa/LoRaWAN远距离无线通信功能的场景。包内共6个文件,以3个.h头文件和3个.c源文件为主,头文件负责寄存器定义、接口声明与硬件…

2026/10/15 18:27:42 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →