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

矩阵方式:

下面是代码:

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);
相关推荐
King's King9 小时前
仓储机器人底盘的研究
机器人
沙漏AI机器人9 小时前
【20250101】Nature正刊:纯仿真强化学习得到外骨骼机器人的自适应控制策略
机器人
zzzhpzhpzzz18 小时前
机器人领域的一些仿真器
机器人
林伟_fpga2 天前
必要性论证:将FPGA深入应用于基于CPU、CPU+GPU的人形机器人控制系统
人工智能·fpga开发·机器人
Zoeygotit3 天前
【机器人】机械臂:精度、重复精度、控制器分辨率、手腕、末端执行器
笔记·机器人
RPAdaren3 天前
ChatGPT 与 AGI:人工智能的当下与未来走向全解析
大数据·人工智能·ai·chatgpt·机器人·agi·rpa
饭来_4 天前
ROS 2中的DDS中间件
中间件·机器人
Fuweizn4 天前
转运机器人推动制造业智能化转型升级
人工智能·机器人·智能机器人
EAI-Robotics4 天前
机器人对物体重定向操作的发展简述
机器人
jiayoushijie-泽宣5 天前
【基于语义地图的机器人路径覆盖】Radiant Field-Informed Coverage Planning (RFICP)高斯扩散场轨迹规划算法详解
人工智能·算法·3d·机器人