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

矩阵方式:

下面是代码:

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);
相关推荐
yuewell_ai18 小时前
机器人的方向感从哪来-定位传感器一次讲透
机器人
风合星语20 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
视觉小萌新1 天前
机器人ROS2部署——部署Gazebo和moveit
机器人
小饕1 天前
Jetson TensorRT vs RK3588 RKNN:两块板子都跑通了 LLM 和 VLM 之后,我悟了
人工智能·机器人·大模型端侧部署
上海蓝色星球1 天前
蓝色星球NG-AIOS新型AI工业操作系统重磅发布——以本体智能为内核,重构“AI+制造“新范式
大数据·数据库·人工智能·机器人
workflower1 天前
AI 转型正从工具部署转向生产关系重构
人工智能·安全·机器学习·机器人·无人机
Dovis(誓平步青云)1 天前
QQ 机器人怎么接上 AI?用 AstrBot + NapCat 搭一套可扩展的 DeepSeek 助手
服务器·人工智能·机器人·操作系统·电脑·智能化
鲁邦通物联网1 天前
机器人梯控系统中Floor_ID与Map_ID楼层映射设计
机器人·巡检机器人·机器人梯控·agv梯控·机器人乘梯·机器人自主乘梯·agv机器人梯控
明志数科1 天前
具身智能数据工程观察:“数据筑基“时代的数据底座建设路径
人工智能·机器人