机器人坐标系转换从局部坐标系转换到世界坐标系

矩阵方式:

下面是代码:

cpp 复制代码
#include <Eigen/Dense>

static void transLocalToWorldCloudWith2dPose(const PointCloud &pc_tar, const QPose3f &pose, PointCloud &pc_org) {
    if (pc_tar.empty())
        return;

    PointCloud tmp_pc;
    Eigen::Rotation2Dd R(-pose.yaw);  // 创建旋转矩阵
    Eigen::Vector2d d(pose.x, pose.y);  // 创建平移向量

    for (const auto& point : pc_tar) {
        Eigen::Vector2d local_point(point.x, point.y);
        Eigen::Vector2d world_point = R * local_point + d;  // 进行坐标转换

        tmp_pc.push_back(PointPCL(world_point.x(), world_point.y(), point.z));
    }

    pcl::copyPointCloud(tmp_pc, pc_org);
}

// 在调用此函数时:
transLocalToWorldCloudWith2dPose(pc_tar, pose, pc_org);

函数方式:

根据三角函数的特性,可以进行一下简化:

下面是简化前的代码示例:

cpp 复制代码
static void transLocalToWorldCloudWith2dPose(const PointCloud &pc_tar, const QPose3f &pose, PointCloud &pc_org) {
    if (pc_tar.empty())
        return;

    PointCloud tmp_pc;
    for (const auto& point : pc_tar) {
        double world_x;
        double world_y;
        double d_x = point.x * cos(-pose.yaw) + point.y * sin(-pose.yaw);
        double d_y = -point.x * sin(-pose.yaw) + point.y * cos(-pose.yaw);
        world_x = d_x + pose.x;
        world_y = d_y + pose.y;
        tmp_pc.push_back(PointPCL(world_x, world_y, point.z));
    }

    pcl::copyPointCloud(tmp_pc, pc_org);
}

// 在调用此函数时:
transLocalToWorldCloudWith2dPose(pc_tar, pose, pc_org);
相关推荐
HH予8 小时前
六足仿生机器人地形自适应步态规划研究
机器人
PNP机器人11 小时前
Franka机器人FR3快速安装指南
机器人
国货崛起17 小时前
宇树科技再落一子!天羿科技落地深圳,加速机器人创世纪
人工智能·科技·机器人
Flame?2 天前
A-LOAM工程笔记(一):工程编译及运行(ubuntu20.04 + ros_noetic)
算法·机器学习·计算机视觉·数学建模·目标跟踪·机器人·自动驾驶
肉三3 天前
Genesis:用于机器人及其他领域的生成式通用物理引擎
人工智能·机器人
独坐寒江边3 天前
如何在Python用Plot画出一个简单的机器人模型
开发语言·python·机器人
Dymc3 天前
【智能机器人开发全流程:硬件选型、软件架构与ROS实战,打造高效机器人系统】
深度学习·机器人
广拓科技3 天前
机器人“照镜子”:开启智能新时代
机器人
huangweibo的博客3 天前
【机器人手眼标定算法简介】
数码相机·算法·机器人
一颗小树x4 天前
机器人学习模拟框架 robosuite (3) 机器人控制代码示例
机器人·仿真