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

矩阵方式:

下面是代码:

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);
相关推荐
Yz_fore3 天前
地图美化方案-房型图
机器人
Yz_fore3 天前
基于DWA的沿墙算法
机器人
aircrushin4 天前
从春晚看分布式实时协同算法与灵巧手工程实现
人工智能·机器人
ZPC82109 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82109 天前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
2501_946205529 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
xybDIY9 天前
Kiro Workshop - 使用 AI 代理聊天机器人构建电子商务网站
人工智能·机器人
宝贝儿好9 天前
【强化学习】第十章:连续动作空间强化学习:随机高斯策略、DPG算法
人工智能·python·深度学习·算法·机器人
大江东去浪淘尽千古风流人物9 天前
【SLAM】GenRobot / IO-AI / Scale / Appen 能力对比表(机器人数据与闭环视角)
人工智能·机器学习·机器人·大模型·概率论·端侧部署·巨身智能
梦想的旅途29 天前
企业微信API:外部群自动化推送实战指南
大数据·机器人·自动化·企业微信·rpa