PCB旋转后基于参考点的引脚位置测量值不一致问题求助
PCB旋转后基于参考点的引脚位置测量值不一致问题求助
看起来你现在的核心问题是坐标系转换逻辑没对准PCB的真实旋转中心,而且旋转角度的计算方法也有偏差,导致同一引脚在PCB旋转后得到的测量值不一致。我来帮你拆解一下问题和解决思路:
你之前方法的核心问题
- 错误选择了坐标系原点:你把白色方块作为坐标系原点,但PCB的旋转中心是它自己的几何中心,不是白色方块。这就导致旋转后,引脚相对于白方块的位置必然会变化——因为旋转是绕PCB中心转的,白方块和引脚到旋转中心的距离、角度都不一样,它们的相对位置肯定会变,所以用白方块做原点测出来的数值自然不一致。
- 旋转角计算逻辑错误:你用白方块到静态点的斜率差来算旋转角,这个方法根本不对。因为PCB不仅有旋转,还有平移,白方块到静态点的斜率变化是平移+旋转共同作用的结果,不是单纯的PCB旋转角度,用这个角度去校正肯定会出错。
正确的解决思路:将所有点转换到PCB本地坐标系
我们的目标是:不管PCB在支架上怎么平移、旋转,都把图像中的坐标转换到以PCB几何中心为原点的固定本地坐标系里,这样同一引脚的坐标在这个本地坐标系里是固定的(除非引脚弯曲)。具体步骤如下:
第一步:先建立基准(无旋转的PCB图像)
在PCB没有旋转的基准图里,先记录三个关键坐标:
- 白色方块的基准坐标
W₀ (xw₀, yw₀)(就是你第一张图里的(575.39, 981.55)) - PCB几何中心的基准坐标
C₀ (xc₀, yc₀)(你需要在基准图里测量出来,比如找PCB的四个角计算中心,或者用其他固定标记定位) - 目标引脚的基准坐标
P₀ (xp₀, yp₀)(第一张图里的(63.63, 2347.62))
第二步:对旋转/平移后的PCB图像做坐标转换
拿到任意一张旋转后的PCB图后,按以下步骤处理:
- 检测当前关键点坐标:找到白色方块的当前坐标
W₁ (xw₁, yw₁)(第二张图里的(565.7, 1013.43)),以及当前引脚的坐标P₁ (xp₁, yp₁)(第二张图里的(76.18, 2389.43))。 - 计算平移量:PCB相对于基准位置的平移量是
Δx = xw₁ - xw₀,Δy = yw₁ - yw₀。 - 计算真实旋转角θ:
- 首先根据平移量,算出当前PCB中心的坐标:
C₁ = (xc₀ + Δx, yc₀ + Δy)(因为PCB整体平移,中心跟着白方块一起移) - 然后计算基准中白方块到PCB中心的向量角度:
α₀ = arctan2(yc₀ - yw₀, xc₀ - xw₀) - 再计算当前图中白方块到PCB中心的向量角度:
α₁ = arctan2(yc₁ - yw₁, xc₁ - xw₁) - PCB的旋转角就是
θ = α₁ - α₀(这个角度才是PCB真实的旋转角度,因为旋转是绕自身中心转的,白方块到中心的向量角度变化就是旋转角)
- 首先根据平移量,算出当前PCB中心的坐标:
- 将当前引脚坐标转换到PCB本地坐标系:
- 先把当前引脚坐标平移回基准位置:
P₁' = (xp₁ - Δx, yp₁ - Δy) - 然后绕PCB基准中心
C₀旋转-θ角度(逆旋转,把旋转后的引脚转回到基准姿态),旋转公式是:x' = (xp₁' - xc₀) * cosθ + (yp₁' - yc₀) * sinθ + xc₀ y' = -(xp₁' - xc₀) * sinθ + (yp₁' - yc₀) * cosθ + yc₀ - 转换后的
(x', y')就是引脚在PCB本地坐标系的坐标,如果引脚没有弯曲,这个坐标应该和基准的P₀几乎一致。
- 先把当前引脚坐标平移回基准位置:
额外提醒
如果你的PCB上有多个固定参考点(比如两个白色方块),那旋转角的计算会更准确,直接用两个参考点的相对角度变化来算θ就行,不需要依赖PCB中心的坐标。
备注:内容来源于stack exchange,提问作者Theodor Nanu
相关产品推荐
相关产品推荐

