尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
CoppeliaSim+Python小车视觉追踪:从仿真到真机移植的完整实现指南
简介面向机器人仿真与控制学习的CoppeliaSim原VrepPython小车追踪工程聚焦如何在仿真环境中驱动小车实时追踪目标点覆盖环境搭建、API调用、路径规划与控制算法联调等关键环节。压缩包共17个文件包含7个Python脚本同步测试、路径规划、复杂指令等、4个XML工程配置、1个car.ttt仿真场景、remoteApi.dll通信库及readMe说明文档整体仅343KB结构清晰、即下即用。已有2194人学习适合机器人竞赛、课程设计及Python仿真入门者参考。借助该资源可快速复现小车追踪目标点的完整流程理解CoppeliaSim同步模式、传感器数据处理与PID控制思路同时为二次开发提供可直接修改的脚本模板与场景文件。1. Vrep-CoppeliaSim-Python 小车追踪一套能直接抄的仿真追踪实现如果你正在做移动机器人相关的课题大概率遇到过这个尴尬算法写了半天一上真车就翻车——轮子打滑、传感器噪声、底盘里程计漂移问题多到分不清是代码 bug 还是硬件玄学。这套 Vrep-CoppeliaSim-Python 小车追踪资源就是用来把这种「真车翻车成本」提前到仿真阶段消化的。它不只是一份孤立的 Python 脚本而是基于 CoppeliaSim原 V-REP搭建的一整套「小车模型 视觉传感器 目标追踪 数据回传」闭环跑起来之后你能清晰地看到小车如何识别目标、计算偏差、修正航向整个控制链路在仿真世界里走完一遍。适合两类人一是刚开始接触机器人仿真、想快速上手 CoppeliaSim 与 Python 联合编程的新手二是有一定基础、想在仿真里验证追踪控制算法再做真机移植的熟手。这份资源把最琐碎的环境对接、坐标换算、控制策略都替你踩过坑了你拿到的是一套能跑、能改、能二次开发的完整骨架。2. 项目定位与技术栈拆解CoppeliaSim 里的小车追踪到底在仿真什么2.1 仿真平台选型为什么是 CoppeliaSim 而不是 Gazebo做机器人仿真Gazebo 和 CoppeliaSim 是两条主流路线。Gazebo 胜在 ROS 生态无缝集成但安装配置对新手不太友好光是把 ROS 版本和 Gazebo 版本对齐就能劝退一批人。CoppeliaSim 的优势是自带完整的动力学引擎支持 Bullet、ODE、Vortex 等多个后端、内置丰富的传感器模型视觉传感器、距离传感器、IMU 等而且提供强大的远程 API——你可以用 Python 直接驱动仿真场景里的每个对象不必把整个 ROS 框架引进来。这份资源选择 CoppeliaSim我认为是更轻量、更聚焦的做法。它把「仿真核心」和「算法控制」解耦仿真场景负责物理属性和传感数据Python 脚本通过 API 读取状态、下发指令两者通过 socket 通信。这个架构模式和你日后写真机控制程序非常接近——真机上你也是通过串口或 CAN 总线收发指令控制逻辑同样独立运行。2.2 Python 客户端与仿真器的通信机制CoppeliaSim 的远程 API 本质上是基于 socket 的请求-响应协议。Python 脚本作为客户端连接仿真器开启的指定端口默认 19997通过 simx 系列函数操作场景对象。这里有个关键点不是所有 API 都需要仿真处于运行状态才能调用。你可以先连上服务端再启动仿真甚至可以在仿真暂停时读取对象句柄、设置参数。常见做法是先建立通信import sim # 远程 API 库位于 CoppeliaSim 安装目录的 programming/remoteApi 下 sim.simxFinish(-1) # 关闭所有遗留连接 clientID sim.simxStart(127.0.0.1, 19997, True, True, 5000, 5) if clientID ! -1: print(成功连接 CoppeliaSim客户端 ID, clientID) else: print(连接失败请检查仿真器是否启动)这段代码里 simxStart 的六个参数分别是IP 地址、端口号、服务端是否阻塞、客户端是否阻塞、通信超时时间毫秒、通信周期毫秒。其中连接超时设为 5000 表示 5 秒内连不上就放弃通信周期 5ms 表示每 5 毫秒轮询一次数据。我在实际使用中会把超时时间调大一些因为仿真器模型复杂时加载慢初次连接经常卡在等待阶段调大到 10000 更稳。2.3 追踪任务的核心链路拆解整个小车追踪任务可以抽象成三个环节感知、决策、执行。感知环节由仿真场景里的视觉传感器完成它抓拍前方画面把图像数据传给 Python 端决策环节是 Python 脚本的核心对图像做处理识别出目标物体通常是特定颜色的球体或标记块计算目标中心在图像中的位置再换算成小车需要调整的角度和速度执行环节则是通过 API 控制小车的两个驱动轮速度实现前进、转向、追踪。其中最容易出问题的是坐标系换算。视觉传感器返回的图像坐标是像素坐标而小车转向需要的是角度或角速度。这个过程你必须明确传感器安装在车体坐标系中的什么位置、朝向哪里、视场角多大否则图像中心偏移量算出来也是错的。资源里已经把传感器位姿和初始化参数配好了你拿到后第一步应该做的是打开场景文件检查传感器属性心里有个底。3. 目录结构精读从一个 zip 包到跑通全流程3.1 压缩包内的文件清单与职责划分这份资源解压之后结构很清晰大致是场景文件、Python 脚本、模型文件、说明文档四类。建议你拿到后先按目录过一遍vrep-coppeliasim-python-car-tracking/ ├── scenes/ # CoppeliaSim 场景文件存放目录 │ └── car_tracking.ttt # 主场景文件包含小车模型、追踪目标、视觉传感器 ├── models/ # 自定义模型目录 │ ├── tracking_car.ttm # 小车模型含驱动轮、转向机构、传感器挂载点 │ └── target_ball.ttm # 目标物模型 ├── python/ # Python 控制端代码 │ ├── sim.py # CoppeliaSim 远程 API 库 │ ├── simConst.py # 远程 API 常量定义 │ ├── tracking_control.py # 追踪控制主脚本 │ ├── vision_process.py # 图像处理与目标识别模块 │ └── config.py # 参数配置PID 参数、速度阈值等 └── README.md # 环境配置与运行步骤说明从工程组织来看这种「场景与代码分离、模型与场景分离、常量与逻辑分离」的布局是合格的。sim.py 和 simConst.py 不推荐改动它们是 CoppeliaSim 官方提供的远程 API 绑定文件升级仿真器版本时可以一并替换。tracking_control.py 是主程序负责初始化连接、订阅传感器、调度图像处理和速度控制vision_process.py 是纯算法模块你完全可以把它替换成 OpenCV 之外的其他图像处理方案config.py 集中了所有可调参数做参数整定时不需要动逻辑代码。3.2 场景文件与仿真启动流程场景文件是 .ttt 格式这是 CoppeliaSim 的文本场景格式可以直接用记事本打开查看但正常流程是在仿真器里编辑。你打开 car_tracking.ttt 后会看到场景里有地面、小车模型、一个球体目标、一个视觉传感器视角窗口在仿真器右上角。启动流程分三步先打开 CoppeliaSim 并加载场景再启动仿真点击播放按钮或按 CtrlShiftP 组合键最后运行 Python 脚本 tracking_control.py。这里有个新手容易踩的坑必须先启动仿真再运行 Python 脚本否则远程 API 拿不到仿真时间戳simxGetVisionSensorImage 这类读取视觉数据的函数会一直返回错误码。而如果你用的是同步模式simxStart 参数里开启同步还需要在 Python 端主动触发 simxSynchronousTrigger 来推进仿真否则仿真会一直阻塞在等待指令状态。资源默认使用异步模式对新手更友好我建议先不改同步模式。3.3 第一次运行前必须检查的环境项跨平台这一步也是很多人在 README 里看不明白的地方。我根据自己的经验列几个必须确认的项Python 版本建议 3.63.9 之间太高或太低都可能跟远程 API 的二进制库不兼容。远程 API 库的位数CoppeliaSim 的 remoteApi 动态库是区分 64 位和 32 位的你的 Python 解释器位数必须和动态库对应否则 import sim 直接报错。OpenCV 版本vision_process.py 用到 cv2 的基本函数安装最新的 opencv-python 即可接口变动不大。numpy图像数据在远程 API 返回时是字节流需要 numpy 转成数组格式再处理。如果运行过程中报「module sim not found」大概率是 sim.py 文件所在路径没有被 Python 搜索到。没有捷径把 python 目录加到 sys.path 或者在脚本里主动拼接路径都行。4. 核心代码逐段拆解图像识别、偏差计算与控制输出的完整链路4.1 视觉数据读取从仿真器传感器到 numpy 图像追踪的前提是看到目标。视觉传感器的数据通过 simxGetVisionSensorImage 从仿真器读回这段代码是整个流程的数据源头import numpy as np import cv2 def get_vision_image(clientID, sensor_handle): return_code, resolution, image sim.simxGetVisionSensorImage( clientID, sensor_handle, 0, sim.simx_opmode_streaming ) if return_code sim.simx_return_ok: img_array np.array(image, dtypenp.uint8) img_array.resize([resolution[1], resolution[0], 3]) img_rgb cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR) return img_rgb return None这里有个细节CoppeliaSim 视觉传感器返回的是 RGB 通道顺序而 OpenCV 默认用 BGR所以必须做一次 cvtColor 转换否则后面做颜色识别时通道顺序错乱HSV 阈值怎么调都过滤不到目标。另外第一个调用用 simx_opmode_streaming 开启流式传输之后每次读取都应该用 simx_opmode_buffer 模式获取最新帧避免重复触发获取流程。参数说明sensor_handle 是视觉传感器在场景中的句柄可以通过 simxGetObjectHandle 按名称获取resolution 是传感器分辨率通常是 [256, 256] 或 [512, 512]分辨率越高识别越稳但计算越慢资源默认 512我实测在普通笔记本上跑 30Hz 没问题。4.2 目标识别HSV 颜色空间阈值分割识别目标球体用颜色是最直接的方式。项目里目标球是饱和的红色HSV 中 H 约 010 和 170180代码用 inRange 做阈值过滤def detect_target(img_bgr): img_hsv cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV) # 红色在 HSV 中跨越 0 和 180 两个区间分两次取并集 mask1 cv2.inRange(img_hsv, (0, 100, 100), (10, 255, 255)) mask2 cv2.inRange(img_hsv, (160, 100, 100), (180, 255, 255)) mask cv2.bitwise_or(mask1, mask2) mask cv2.GaussianBlur(mask, (5, 5), 0) mask cv2.morphologyEx(mask, cv2.MORPH_OPEN, np.ones((5, 5), np.uint8)) contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if len(contours) 0: return None largest_contour max(contours, keycv2.contourArea) x, y, w, h cv2.boundingRect(largest_contour) center_x x w // 2 center_y y h // 2 return (center_x, center_y)这段代码里我特别加了两段区间拆分纯红色的 HSV 色相在 OpenCV 的 0180 标定下被切到了两端如果不做 or 合并目标会从中间断掉识别框会小一圈甚至直接漏检。高斯模糊和开运算的作用是先去除图像传感器自带的高频噪声再消除二值掩膜边缘的椒盐噪点让轮廓更干净。如果目标球上有高光反射HSV 的 S 和 V 分量会掉得很厉害阈值会过滤失败常见做法是换一个哑光表面的目标球或者适当降低 V 的下限到 80。4.3 追踪控制像素偏差到轮速的映射识别到目标中心后控制逻辑就是把它拉回图像中心。这里用了一个简单的比例控制器核心逻辑是把横向偏差映射成左右轮速差def compute_wheel_speeds(center_x, frame_width, base_speed): # 归一化偏差-1 到 1负值表示目标偏左 error (center_x - frame_width / 2.0) / (frame_width / 2.0) kp 0.6 # 比例增益现场整定 turn kp * error max_speed 4.0 # rad/s轮速上限 left_speed base_speed turn right_speed base_speed - turn left_speed max(-max_speed, min(max_speed, left_speed)) right_speed max(-max_speed, min(max_speed, right_speed)) return left_speed, right_speed这个控制律虽然简单但用在仿真里追踪一个静止或缓慢移动的目标足够稳。base_speed 是前进速度turn 是转向增量左右轮速差形成差速转向。kp 取 0.6 是我在资源默认参数下试过的值目标在图像边缘时转向速度约 0.6视觉上转向效果明显但不会打转。如果你发现小车蛇形走位多半是 kp 太大如果目标总是冲出画面则 base_speed 太高或 kp 太小。整定顺序建议先调 base_speed确认直行稳定后再动 kp。4.4 执行通过远程 API 驱动差速轮CoppeliaSim 的差速小车通常每个驱动轮配一个旋转关节控制接口是 simxSetJointTargetVelocity单位为弧度每秒sim.simxSetJointTargetVelocity(clientID, left_motor_handle, left_speed, sim.simx_opmode_oneshot) sim.simxSetJointTargetVelocity(clientID, right_motor_handle, right_speed, sim.simx_opmode_oneshot)注意这里用的是 TargetVelocity不是 Position。差速模型下你只需要关心轮子的角速度电机的力矩、摩擦这些物理属性被仿真引擎自动消化了。simx_opmode_oneshot 表示每次调用单独执行一次写入不维持持续性通信主循环里每帧调用即可。4.5 主循环调度把感知-决策-执行串成闭环while True: frame get_vision_image(clientID, vision_sensor_handle) if frame is None: continue target detect_target(frame) if target is None: # 目标丢失当前帧不做转向修正轮速回正 sim.simxSetJointTargetVelocity(clientID, left_motor_handle, 0, sim.simx_opmode_oneshot) sim.simxSetJointTargetVelocity(clientID, right_motor_handle, 0, sim.simx_opmode_oneshot) continue left_speed, right_speed compute_wheel_speeds(target[0], frame.shape[1], base_speed2.5) sim.simxSetJointTargetVelocity(clientID, left_motor_handle, left_speed, sim.simx_opmode_oneshot) sim.simxSetJointTargetVelocity(clientID, right_motor_handle, right_speed, sim.simx_opmode_oneshot)整个主循环逻辑只有这几行。目标丢失时没有做更复杂的搜索策略因为场景中的目标是显眼的红色球但你在二次开发时可以考虑加入「丢失后原地旋转搜索」逻辑我会在最后一章展开这一步。主循环的帧率由仿真步长决定CoppeliaSim 默认 50ms 步长也就是 20Hz对追踪场景来说足够。5. 避坑手册CoppeliaSim 与 Python 联合开发常见问题排查5.1 连接失败却不知道为什么现象simxStart 返回 -1脚本打印「连接失败」。原因排查一、CoppeliaSim 没有启动或启动了但没加载任何场景——远程 API 服务只在场景存在时才会监听端口二、端口被占用默认 19997如果你同时开了多个仿真器实例第二个实例会绑定失败三、防火墙拦截尤其是 Windows 系统Python 进程访问回环地址有时会被安全软件拦。解决启动 CoppeliaSim确认加载了场景如果有多个实例关掉多余的再不行手动把防火墙规则加一条允许 python.exe 通过。5.2 import sim 报 ModuleNotFoundError现象控制脚本运行到 import sim 一行直接崩溃。原因sim.py 位于 python 目录而当前脚本的工作目录不在这个路径下。CoppeliaSim 的远程 API 库不是 pip 安装包它是一组源文件需要你手动让 Python 找到它。解决import sys sys.path.append(/path/to/your/python_dir)或者干脆把 sim.py 和 simConst.py 复制到主脚本同目录。另外检查 remoteApi.dllWindows/ libremoteApi.soLinux是否和 Python 解释器位数一致这是最常见的暗坑。5.3 图像数据读出全是零现象get_vision_image 返回的数组是全黑或全零。原因视觉传感器没有正确开启。CoppeliaSim 中视觉传感器默认是关闭状态必须在场景属性里勾选 Enable 选项或者传感器句柄错了读取的可能是另一个对象的数据。解决打开场景选中视觉传感器图标在 Object Properties 的 Vision Sensor 选项卡里确认 Enable 勾选并检查代码中获取的句柄名称是否和场景里的对象名完全一致。名称大小写敏感稍有不匹配句柄为 -1。5.4 小车原地打转目标无法稳定锁定现象小车来回摆动始终不能对准目标。原因kp 系数太大转向过度控制回路的阻尼不够或者 base_speed 设置太低转向修正量相对过大小车走不动直线。解决逐步降低 kp比如从 0.6 一路降到 0.2观察摆动幅度变化同时提高 base_speed 到 3.0 以上。记住一个经验追踪控制里「先保前进再修航向」前进速度太低时转向修正会主导运动看起来像原地打转。5.5 触摸板与 CPU仿真运行卡顿掉帧严重现象仿真器画面不流畅Python 控制循环明显滞后。原因CoppeliaSim 默认渲染质量较高加上视觉传感器每帧都生成图像CPU 占用率高同时 Python 端用 OpenCV 做实时处理老电脑扛不住。解决在仿真设置里降低视图分辨率把视觉传感器分辨率从 512 降到 256关闭仿真器的抗锯齿渲染Python 端把高斯模糊改成简单的均值模糊或直接跳过模糊。仿真不是游戏机保证逻辑正确比画面精美重要。6. 二次开发指南让追踪小车跑出你自己的玩法6.1 改造方向一丢失目标后主动搜索当前代码在目标丢失时会停车这在真实场景里不可接受。一个简单的改进是加入「搜索模式」目标丢失后让小车以固定角速度原地旋转直到目标重新出现在画面中。修改 point 5 的主循环逻辑target detect_target(frame) if target is None: sim.simxSetJointTargetVelocity(clientID, left_motor_handle, 2.0, sim.simx_opmode_oneshot) sim.simxSetJointTargetVelocity(clientID, right_motor_handle, -2.0, sim.simx_opmode_oneshot) continue这样左右轮反向等速小车绕中心原地转动视觉传感器跟随扫过周围区域。如果你希望搜索覆盖更全面可以把旋转速度降低到 1.0这样每帧图像之间角度变化小目标不容易被跳帧漏掉。搜索逻辑里还要加一个计时器如果持续搜索超过 10 秒仍未找到目标可以切回「直线前进搜索」或停止等待人工介入避免小车原地转到天荒地老。6.2 改造方向二加入动态目标追踪资源的场景里目标球是静止的你可以直接用鼠标拖动目标球让小车实时调整方向。但如果你想测试动态追踪能力建议在仿真场景中给目标球添加一个路径规划节点让它沿既定轨迹运动。操作方式在场景编辑器中选择目标球右键 Add Path / Motion指定一条环形路径设定速度为 0.3 m/s。此时小车的控制律不变但控制收敛性的要求会变高你可以趁机调整 kp 和 base_speed 的参数组合。实际测试中你会发现跟踪慢速目标速度小于 0.2 m/s时现有比例控制器绰绰有余跟踪高速目标时会产生明显的相位滞后目标总在画面边缘。「提升追踪速度」的第一步不是调大 kp而是减小控制器响应延时——检查视觉传感器分辨率是否过高导致帧率下降考虑把视觉分辨率降为 256 以提升帧率。6.3 改造方向三把控制策略升级成 PID比例控制器只追踪误差当前值升级成 PID 后积分项可以消除稳态偏差微分项可以抑制过冲。在 compute_wheel_speeds 函数里引入一个误差积分变量error_sum和一个误差差分变量error_diffdef compute_wheel_speeds_pid(center_x, frame_width, base_speed, state): error (center_x - frame_width / 2.0) / (frame_width / 2.0) state[sum] error state[diff] error - state[prev] state[prev] error kp 0.6 ki 0.05 kd 0.1 turn kp * error ki * state[sum] kd * state[diff] ...PID 比纯 P 多两个参数整定难度上升但控制品质有明显提升。我的个人建议是如果目标是静态的纯 P 就够目标和车同时运动加 D 项抑制超调如果发现长时间存在固定方向偏差——比如目标总在图像偏向左侧一点点——才考虑加 I 项。仿真里的物理噪声比真机小得多PID 整定好的参数不能直接搬上真车但结构可以直接复用。6.4 改造方向四对接真机底盘当你对仿真效果满意后想把控制代码移植到真机注意这几件事一是把 simxSetJointTargetVelocity 替换成真机底盘驱动接口如串口发送轮速指令二是把 get_vision_image 中的仿真 API 调用替换成真实相机驱动如 OpenCV 的 cv2.VideoCapture三是保留预处理、控制律、主循环框架不变。你的追踪控制核心——视觉识别和比例控制器——在真机上依然成立但需要重新整定 PID 参数因为真机的转向延迟、轮胎滑移非仿真可比。移植时最容易踩的坑是坐标系方向。仿真里视觉传感器正前方是 Z 轴负方向真机相机光轴方向取决于安装方式可能导致右转变成左转。建议真机上线前先做一次「图像水平翻转」测试确认转向方向一致再做闭环。6.5 验证习惯每次改码后跑一次回归这套代码改起来容易但一个参数改错整个追踪就会失控。我自己的习惯是每改一处逻辑或参数都固定跑一遍验证流程第一步启动场景确认目标球在初始位置第二步运行 Python 脚本观察小车能否在 3 秒内对准目标第三步手动拖动目标球到画面边缘观察小车是否跟随第四步把目标球移到视野外确认退化行为符合预期停车或搜索。四步走完改动才算安全。要不要写自动化测试脚本如果你对 pytest 熟可以写一个 mock 视觉输入的单测但仿真闭环的验收最终还得靠肉眼。从那以后我每次改参数都强制走一遍这四步不会跳过任何一步哪怕只是把 kp 从 0.6 调到 0.5——至少能帮你省下一个下午的排查时间。这套资源本身就是按这个思路组织的希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

Minimax Coding Plan 优惠获取全解析:邀请链接、权益码与9折实操指南

Minimax Coding Plan 优惠获取全解析:邀请链接、权益码与9折实操指南

最近有好几个朋友问我同一个问题:Minimax Coding Plan 的邀请链接到底从哪儿弄,权益码是不是真的能叠 9 折,这个专属优惠跟平时自己注册有啥区别。我当时为了搞清楚这套玩法,专门拿小号测了一遍,又在官方帮助文档里翻了…

📅 2026/10/21 3:55:53
Delphi 12串口通信控件nrCommLib Pro v9.54全源码解析

Delphi 12串口通信控件nrCommLib Pro v9.54全源码解析

简介:这是一套专为Delphi 12开发者提供的高性能串口通信控件库——nrCommLib Pro v9.54完整源码包,适用于工业自动化、仪器仪表、嵌入式设备联调等需稳定串口交互的中高级开发场景。资源共462个文件,涵盖95个Pascal源码(.pas&…

📅 2026/10/21 3:55:53
污水站远程无人值守方案:从物联网架构到落地实操指南

污水站远程无人值守方案:从物联网架构到落地实操指南

凌晨两点,值班电话突然响了——某个污水提升泵站液位报警。赶到现场一看,浮球被一团杂物卡住,虚惊一场。这种场景做污水处理运维的朋友应该都不陌生:站点多、位置散、巡检靠腿、参数靠抄、报警靠吼。传统模式下的人力成本和响应效…

📅 2026/10/21 3:55:53
MORE NEWS

更多资讯

📰

阿里EDAS示例工程上云实战:本地启动、部署配置与灰度避坑指南

简介:这份资源是阿里EDAS(企业级分布式应用服务平台)的入门示例工程,面向希望学习微服务架构与云端应用部署的Java开发者,尤其适合刚接触EDAS、需要动手实践的中初级人员。压缩包共15个文件,以8个xml配置文…

📰

Redis哨兵实战:高可用架构部署、故障转移与踩坑经验

Redis 哨兵这套东西,我最早接触是在一个电商促销活动前夜。当时主从架构跑得好好的,结果主节点凌晨挂了,运维手动切了四十分钟,老板在群里连发十几条消息。从那以后我就把哨兵当成了高可用方案的标配。这篇文章不讲教科书定义&…

📰

C# WinForm Panel 边框颜色改不动?三种自绘方案一次讲清

简介:面向C# WinForm开发者的Panel控件美化方案,解决默认边框颜色与宽度不可直接调整的问题。资源通过继承Panel并重写OnPaint方法,以Graphics绘制自定义边框,提供BorderColor与BorderWidth两个扩展属性,示例代码清晰易…

📰

多模型接入太难了?用 litellm 统一 OpenAI 兼容格式,打造 LLM 网关

最近在处理一个多模型接入的需求时,我最大的感受是:真正让人崩溃的其实不是模型效果,而是调用方式五花八门。同样是聊天补全,有的需要messages数组,有的偏要prompt字符串;同样是工具调用,有的叫…

📰

2013-2024年 中国各省级数字经济指数数据(+代码+文献)

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

📰

Unity渲染纹理Camera.targetTexture全解析:从原理到小地图/监控/截图实战

1. 先说清楚:targetTexture到底是干什么的做Unity开发的人,早晚都会遇到摄像机目标渲染纹理(RenderTexture Camera.targetTexture)这个组合。我第一次接触它,是做一个设备监控类项目,需要在主界面里嵌一个…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬