自动驾驶坐标系与旋转矩阵的确定(位置补偿)

news/2024/7/24 9:34:40 标签: 自动驾驶, 矩阵, 人工智能

最近新接受的模块需要做位置补偿,按说是比较简单的。但是因为坐标系的问题导致了诸多麻烦出现,事后复盘如下:

一个未知的坐标系如何确定方向:
此处出现了转换WGS坐标系转东北天,且东北天第一帧初始化局部坐标系。

此时我不清楚到底东北天和所取XYZ有什么关系。选择某个已知的heading角度,最好是正东方向,然后观察坐标变化,我发现正东方向前进时,Y增加,因此Y轴正方向确定,同理可找正北向,发现X增加。此时可以确定程序坐标系为


/*          N(y)
          ^
          |
          |
 W <------O------> E(x)
          |
          |
          S

*/

这时候你还需要去确定你的heading变化方向是顺时针还是逆时针,选择一个中间角度,观察后发现heading角为与正北方夹角得顺时针变化,此时可以得到转换关系。

车辆坐标系下的位置关系转到东北天局部坐标系可以如下计算:
已知局部坐标系下,GPS坐标(x,y)且已知车辆坐标系下GPS与IMU位置差距(-0.4,-1)求IMU(x',y').

则可得如下方程:将局部坐标系转车辆坐标系即可有位置关系等式:

R逆((x,y)-(x',y'))=(-0.4,-1)

(x',y')=(x,y)-R顺(-0.4,-1)

其中R逆转置后变成R顺

转换函数轮子如下:

    //true 顺时针 false 逆时针
    static Eigen::Matrix2d rotationMatrix(double angle,bool direction)
    {
        double cosTheta = cos(angle);
        double sinTheta = sin(angle);
        
        Eigen::Matrix2d rotMat;
        if (direction)
        {
            rotMat <<cosTheta,sinTheta,
                    -sinTheta,cosTheta;
        }
        else
        {
            rotMat << cosTheta, -sinTheta,
                      sinTheta, cosTheta;
        }
     
     
        return rotMat;
    };

    //坐标系转换+位置补偿
    static Eigen::Vector2d positionCompensation(const Eigen::Vector2d Compensation,double angle,bool direction)
    {
        return rotationMatrix(angle,direction)*Compensation;
    }; 


http://www.niftyadmin.cn/n/5389697.html

相关文章

vivado基本使用流程(详细版,一步步跟着来一定能成功)

创建工程 1、 2 3、项目名称不能有空格&#xff0c;目录不能含有中文路径 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 可以查看一下新建的文件 二、设置IP核 1、 2、 3、 4、 5、 6、 7、 可以查看到生成的ip核 8、 找到例化模板&#xff0c;日常…

React htmlfor

注意&#xff0c;在添加属性时&#xff0c; class 属性需要写成 className &#xff0c;for 属性需要写成 htmlFor &#xff0c;这是因为 class 和 for 是 JavaScript 的保留字。 在React中&#xff0c;当我们需要为一个表单元素设置标签时&#xff0c;可以使用htmlFor属性。它…

虾皮shopee API如何提高商品详情更新效率

要提高虾皮&#xff08;Shopee&#xff09;API的商品详情更新效率&#xff0c;你可以考虑以下几个策略&#xff1a; 批量更新&#xff1a;如果你需要更新大量商品&#xff0c;使用批量更新功能可以大大提高效率。你可以一次性上传多个商品的信息&#xff0c;而不是逐个更新。优…

Neo4j学习笔记1:增删改查

目录 安装练习节点和关系结构连接数据库添加节点1. Cypher2. Py2neo 添加关系1. Cypher2. Py2neo 批量添加1. Cypher2. Py2neo 查询1. Cypher2. Py2neo 更新1. Cypher2. Py2neo 删除1. Cypher2. Py2neo 安装 这边直接下载了Neo4j Desktop安装py2neo&#xff0c;安装后就可直接…

npm install 失败,需要node 切换到 对应版本号

npm install 失败 原本node 的版本号是16.9&#xff0c;就会报以上错误 node版本问题了&#xff0c;我切到这个版本&#xff0c;报同样的错。降一下node&#xff08;14.18&#xff09;版本就好了 具体的方法&#xff1a;&#xff08;需要在项目根目录下切换&#xff09; 1. …

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

Android相机调用-libusbCamera【外接摄像头】【USB摄像头】 【多摄像头预览】

有的自定义系统&#xff0c;对于自己外接的USB摄像头&#xff0c;android原生的camera和camera2都无法打开&#xff0c;CameraX也用不了。这时候就要用libusbCamera&#xff0c;这个库可以打开摄像头&#xff0c;还可以多摄像头同时预览。本文主要是同时打开3个USB摄像头的项目…

音频的“隐形保镖”——音频数字水印

在互联网时代&#xff0c;多媒体数字资源可以快捷地传播和获取&#xff0c;但同时也导致了数字音频产品的非法扩散、非法拷贝和非法篡改猖獗&#xff0c;数字音频产品的完整性和版权保护问题越来越凸显。文档和图像可以添加水印&#xff0c;音频同样可以添加水印&#xff0c;让…