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

全局坐标转局部坐标推导 - Ladisson

全局坐标转局部坐标

问题定义:

设全局坐标系为 \(O_{world}\),自车当前状态为:

  • 位置:\((x_c, y_c)\)
  • 朝向:\(\theta_c\)(与全局 X 轴的夹角,逆时针为正)

目标点状态为:

  • 位置:\((x_t, y_t)\)
  • 朝向:\(\theta_t\)

Step1: 平移

先将原点平移到自车位置,得到目标点在全局系下的相对偏移:

\[\begin{bmatrix} dx \ dy \end{bmatrix} = \begin{bmatrix} x_t - x_c \ y_t - y_c \end{bmatrix} \]

Step 2:旋转

全局坐标系旋转 \(\theta_c\) 后与自车局部坐标系对齐。要把全局偏移量转到局部系,需要反向旋转 \(-\theta_c\),即乘以旋转矩阵 \(R(-\theta_c)\)

\[R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \ \sin\theta & \cos\theta \end{bmatrix} \quad \Rightarrow \quad R(-\theta_c) = \begin{bmatrix} \cos\theta_c & \sin\theta_c \ -\sin\theta_c & \cos\theta_c \end{bmatrix} \]

因此:

\[\begin{bmatrix} x_{local} \ y_{local} \end{bmatrix} = R(-\theta_c) \begin{bmatrix} dx \ dy \end{bmatrix} = \begin{bmatrix} \cos\theta_c & \sin\theta_c \ -\sin\theta_c & \cos\theta_c \end{bmatrix} \begin{bmatrix} dx \ dy \end{bmatrix} \]

展开得:

\[\boxed{ x_{local} = dx \cdot \cos\theta_c + dy \cdot \sin\theta_c } \]

\[\boxed{ y_{local} = -dx \cdot \sin\theta_c + dy \cdot \cos\theta_c } \]

代码实现如下:

def to_local_coords(target_x, target_y, target_yaw, curr_x, curr_y, curr_yaw):"""全局坐标转换到自车局部坐标系"""curr_yaw = np.deg2rad(curr_yaw)target_yaw = np.deg2rad(target_yaw)dx = target_x - curr_xdy = target_y - curr_ylocal_x = dx * np.cos(curr_yaw) + dy * np.sin(curr_yaw)local_y = -dx * np.sin(curr_yaw) + dy * np.cos(curr_yaw)local_yaw = target_yaw - curr_yawreturn np.array([local_x, local_y, np.cos(local_yaw), np.sin(local_yaw)])

旋转矩阵的推导

问题设定

设有一个向量 \(\vec{v}\),其在原坐标系中的坐标为 \((x, y)\),与 X 轴的夹角为 \(\alpha\),模长为 \(r\)

\[x = r\cos\alpha, \quad y = r\sin\alpha \]

现在将坐标系逆时针旋转 \(\theta\)(等价于向量顺时针旋转 \(\theta\)),求新坐标 \((x', y')\)


Step 1:用极坐标表示原向量

\[\vec{v} = (r\cos\alpha,\ r\sin\alpha) \]


Step 2:旋转后用极坐标表示新向量

旋转后,向量与 X 轴夹角变为 \(\alpha + \theta\),模长不变:

\[x' = r\cos(\alpha + \theta) \]

\[y' = r\sin(\alpha + \theta) \]


Step 3:展开三角函数

\[x' = r\cos(\alpha + \theta) = r(\cos\alpha\cos\theta - \sin\alpha\sin\theta) \]

\[y' = r\sin(\alpha + \theta) = r(\sin\alpha\cos\theta + \cos\alpha\sin\theta) \]

\(r\cos\alpha = x\)\(r\sin\alpha = y\) 代入:

\[x' = x\cos\theta - y\sin\theta \]

\[y' = x\sin\theta + y\cos\theta \]


Step 4:写成矩阵形式

\[\begin{bmatrix} x' \ y' \end {bmatrix} =\underbrace{\begin{bmatrix} \cos\theta & -\sin\theta \ \sin\theta & \cos\theta \end{bmatrix}}_{R(\theta)} \begin{bmatrix} x \ y \end{bmatrix} \]

这就是逆时针旋转 \(\theta\) 的旋转矩阵 \(R(\theta)\)

http://www.jsqmd.com/news/700201/

相关文章:

  • 固态硬盘(SSD)优化特辑:TRIM、预留空间与垃圾回收
  • 深度学习必读三书:从理论到实践的经典指南
  • 工业自动化工程师必装的VSCode插件(2026版协议解析器深度拆解)
  • D2RML终极教程:暗黑2重制版一键多开神器,告别繁琐登录!
  • 用STM32CubeMX和HAL库快速上手MAX30102,告别繁琐的寄存器配置
  • 医疗器械管代的职责
  • AtCoder Beginner Contest 455 ABCDEF 题目解析
  • UniApp跨端视频播放器进阶:从官方限制到自定义全功能实现
  • EB Garamond 12:重塑学术排版的古典字体开源解决方案
  • REBOUND框架:硬件锚定的安全回滚技术解析
  • 嵌入式C语言深度适配轻量大模型(GCC内联汇编级优化+Flash XIP加速+中断上下文LLM推理调度)
  • 全球不到17家团队掌握的VSCode量子配置范式:基于AST动态注入与配置沙箱隔离的工业级实践
  • NumPy数组核心操作与机器学习数据预处理技巧
  • iOS审核被拒?手把手教你搞定Guideline 1.2用户内容安全(附详细承诺信模板)
  • 如何定义强一致和MVCC
  • 图论——腐烂的橘子
  • VSCode 2026医疗插件合规检查实操手册:内置FDA 21 CFR Part 11签名验证、审计追踪与变更控制(附GxP验证包模板)
  • VSCode 2026实时协作权限控制(微软内部泄露文档节选):细粒度行级锁定+上下文感知权限降级机制首度公开
  • 终极指南:FigmaCN 让 Figma 界面说中文的完整解决方案
  • 终极指南:如何使用ncmdump快速免费解密网易云音乐NCM文件
  • 5分钟快速上手:Jable视频下载工具完整指南
  • SCPI指令获取不求人:以RS FSW为例,手把手教你用SCPI Recorder抓取‘隐藏’命令
  • 哔哩哔哩概念版 4K画质 内置了会员模块「Android」
  • 3分钟掌握Unity游戏去马赛克:BepInEx插件完全指南
  • VSCode 2026终端无法调用国产SSH客户端?4个隐藏配置项+2个systemd用户服务模板,10分钟完成可信连接闭环
  • 如何5分钟配置TMSpeech:Windows本地语音识别完整教程
  • 怎么通过宝塔面板对网站数据库进行深度碎片整理_使用Optimize命令优化表空间资源占用
  • WeDLM-7B-Base实际效果:中文古文风格、现代白话、技术文档三体裁续写
  • Hyperf + Swoole微服务实战,万级QPS轻松扛
  • Windows实时语音转文字终极指南:TMSpeech离线字幕解决方案完整教程