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

矩阵方式:

下面是代码:

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);
相关推荐
赫尔·普莱蒂科萨·帕塔5 小时前
智能体工程
人工智能·机器人·软件工程·agi
China_Yanhy6 小时前
入职 Web3 运维日记 · 第 8 日:黑暗森林 —— 对抗 MEV 机器人的“三明治攻击”
运维·机器人·web3
RobotNow10 小时前
优秀的机器人厂商集中平台哪家服务全面
机器人
晚霞的不甘12 小时前
CANN × ROS 2:为智能机器人打造实时 AI 推理底座
人工智能·神经网络·架构·机器人·开源
RobotNow12 小时前
优秀的机器人厂商集中平台哪家案例多
机器人
RobotNow14 小时前
优秀的机器人厂商集中平台哪家效率高
机器人
搬砖者(视觉算法工程师)14 小时前
工具科普介绍之Spherasim:无人机与机器人开发领域的工具
机器人·无人机
鲁邦通物联网16 小时前
技术实战:基于电梯梯控产品融合算法构建高可用机器人梯控中间件
机器人·机器人梯控·agv梯控·机器人乘梯·机器人自主乘梯·agv机器人梯控
广州赛远1 天前
IRB2400-16冲压机器人防护服清理污渍_避免误区与正确方法
机器人
qidun2101 天前
橙色机器人防护服防护作用有哪些-全面解析工业机器人防护服的核心价值
机器人