【ROS2机器人入门到实战】齐次坐标变换实战

6.齐次坐标变换实战

写在前面

  1. 当前平台文章汇总地址:ROS2机器人从入门到实战
  2. 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
  3. 教程配套机器人开发平台:两驱版| 四驱版
  4. 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn

上一节我们对齐次矩阵的组成和齐次矩阵的求逆和乘法两个运算的几何意义进行了介绍。

本节课我们就通过对应的函数和库实现齐次矩阵的生成,齐次矩阵的乘法和求逆。

1.齐次矩阵的合成与分解

齐次矩阵的的生成可以一个姿态和一个平移向量组成,因为姿态可以用四元数、欧拉角、轴角、旋转矩阵四种方式来表示

所以我们考虑先将对应的姿态转成旋转矩阵,然后使用numpy讲旋转矩阵和平移向量填写到齐次矩阵对应的位置即可

1.1旋转矩阵+平移向量

#导入库
import numpy as np
import transforms3d as tfs
# 定义旋转矩阵R和平移向量T
R = np.asarray([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])
T = np.asarray([1,0,1])
R,T

在这里插入图片描述

1.1.1 使用numpy方法合成齐次变换矩阵
temp = np.hstack((R,T.reshape(3,1)))
np.vstack((temp,[0,0,0,1]))

在这里插入图片描述

1.1.2 使用tfs中的函数合成齐次变换矩阵
tfs.affines.compose(T,R,[1,1,1])

在这里插入图片描述

1.2四元数+平移向量

思路:先将四元数转换成旋转矩阵,然后再利用1.1合成齐次矩阵

R = tfs.quaternions.quat2mat([1,0,0,0])
tfs.affines.compose(T,R,[1,1,1])

在这里插入图片描述

1.3 练习

1.3.1 练习1

已知相机坐标系{C}为参考坐标系,工具坐标系{P}的位置矢量在相机坐标系{C}x,y,z各轴投影为 2 , 1 , 2 2,1,2 2,1,2,并且工具坐标系和相机坐标系姿态相同,求 P C T ^C_PT PCT

1.3.2 练习2

已知机器人基坐标系{B}为参考坐标系,相机坐标系{C}在的位置矢量在{B}各轴的投影为 0 , 0 , 3 0,0,3 0,0,3,坐标系{C}和绕着坐标系{B}的x轴转了180度,求 C B T ^B_CT CBT

2.齐次矩阵的分解

齐次矩阵的分解指的是已有齐次矩阵的情况下,将其分解为姿态和平移两部分

2.1 将qcjz分解为固定轴欧拉角和平移向量

tfs.euler.mat2euler(T[0:3,0:3]),T[:3,3:4]

在这里插入图片描述

2.3 将qcjz分解为四元数和平移向量

tfs.quaternions.mat2quat(T[0:3,0:3]),T[:3,3:4]

在这里插入图片描述

3.齐次矩阵的乘法

对应numpy中矩阵的乘法np.dot讲两个矩阵相乘即可,我们以一道例题来讲解这个问题。

3.1 练习-眼在手外

如图🔓示,已知:

在这里插入图片描述

1.相机坐标系{C}为参考坐标系,工具坐标系{P}的位置矢量在相机坐标系{C}x,y,z各轴投影为 2 , 1 , 2 2,1,2 2,1,2,并且工具坐标系和相机坐标系姿态相同。

2.机器人基坐标系{B}为参考坐标系,相机坐标系{C}在的位置矢量在{B}各轴的投影为 0 , 0 , 3 0,0,3 0,0,3,坐标系{C}和绕着坐标系{B}的x轴转了180度

可以参考下图看题目

在这里插入图片描述

求:

{B}为参考坐标系,坐标系{P}的位置矢量和旋转矩阵

解体思路也很简单,我们只要得出

  • B到C的齐次变换矩阵 C B T ^B_CT CBT
  • C到P的齐次变换矩阵 P C T ^C_PT PCT

得到之后将两者相乘即可得出:
P B T = C B T P C T ^B_PT=^B_CT^C_PT PBT=CBTPCT
求出 P B T ^B_PT PBT我们再将其分解成位置矢量和旋转矩阵即可

动手写代码:

先求T_BC

import math
T_BC = tfs.affines.compose([0,0,3],tfs.euler.euler2mat(math.pi,0,0),[1,1,1])
T_BC

在这里插入图片描述

再求T_CP

T_CP =  T = tfs.affines.compose([2,1,2],np.identity(3),[1,1,1])
T_CP

在这里插入图片描述

求T_BP

T_BP = np.dot(T_BC,T_CP)
T_BP

在这里插入图片描述

分解成欧拉角对比结果

tfs.euler.mat2euler(T_BP[0:3,0:3]),T_BP[:3,3:4]

在这里插入图片描述

到这里我们就利用做了齐次矩阵的乘法完成了坐标的变换

3.齐次矩阵求逆

3.1练习-眼在手上

在这里插入图片描述

如图机器人基座坐标系为B、末端坐标系为E、相机坐标系为C、物品坐标系为O、其中相机固定在机械臂的末端。

已知
E B T = x y z : [ 0.5 , 0.6 , 0.8 ] , q w q x q y q z : [ 1 , 0 , 0 , 0 ] E C T = x y z : [ 0.00 , 0.05 , 0.05 ] , q w q x q y q z : [ 0.707 , 0.706 , 0 , 0 ] O C T = x y z : [ 0.00 , 0.02 , 0.85 ] , q w q x q y q z : [ 0.877 , 0.479 , 0 , 0 ] ^B_ET={ xyz:[0.5,0.6,0.8] ,qwqxqyqz:[1,0,0,0]} \\ ^C_ET={ xyz:[0.00,0.05,0.05] ,qwqxqyqz:[0.707, 0.706, 0,0]} \\ ^C_OT={ xyz:[0.00,0.02,0.85] ,qwqxqyqz:[0.877,0.479,0,0]} \\ EBT=xyz:[0.5,0.6,0.8],qwqxqyqz:[1,0,0,0]ECT=xyz:[0.00,0.05,0.05],qwqxqyqz:[0.707,0.706,0,0]OCT=xyz:[0.00,0.02,0.85],qwqxqyqz:[0.877,0.479,0,0]
求: O B T ^B_OT OBT
O B T = E B T C E T O C T C E T = E C T − 1 ^B_OT=^B_ET^E_CT^C_OT \\ ^E_CT=^C_ET^{-1} OBT=EBTCETOCTCET=ECT1
写代码:

T_BE = tfs.affines.compose([0.5,0.6,0.8],tfs.quaternions.quat2mat([1,0,0,0]),[1,1,1])
T_CE = tfs.affines.compose([0.00,0.05,0.05],tfs.quaternions.quat2mat([0.707,0.706,0,0]),[1,1,1])
T_CO = tfs.affines.compose([0.00,0.02,0.85],tfs.quaternions.quat2mat([0.877,0.479,0,0]),[1,1,1])
T_EC = np.linalg.inv(T_CE)
np.dot(np.dot(T_BE,T_EC),T_CO)

在这里插入图片描述

4.练习

4.1 map坐标系转换

在移动机器人导航中,存在这样一个坐标系关系.

地图坐标系(Map)->里程计坐标系(Odom)->机器人坐标系(BaseLink)

其中里程计到机器人坐标系关系一般是由底盘轮子编码器给出,而地图坐标系和里程计坐标系之间的关系是通过定位模块估算出来的。

所以请听题目:

现在通过地图匹配获取到机器人在地图中的位置为[1.5,2.3,0],姿态(固定轴欧拉角)为[0,0,3.14]

查看里程计上报的机器人坐标为:位置[1.0,3.2,0] 姿态(固定轴欧拉角)[0,0,1.0]

求地图坐标系和里程计坐标系之间的关系

4.2 机械臂运动学正解

已知一个3自由的机械臂,已知:

  • 关节1和关节2坐标关系为:[0,0,0.2] 固定轴欧拉角:[0,0,1.57]
  • 关节2和关节3坐标关系为:[0.5,0,0.0] 固定轴欧拉角:[0,0,1.0]

求关节1和关节3之间的关系?

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS2编程基础课程文档 ROS 2(机器人操作系统2)是用于机器人应用的开源开发套件。ROS 2之目的是为各行各业的开发人员提供标准的软件平台,从研究和原型设计再到部署和生产。 ROS 2建立在ROS 1的成功基础之上,ROS 1目前已在世界各地的无数机器人应用中得到应用。 特色 缩短上市时间 ROS 2提供了开发应用程序所需的机器人工具,库和功能,可以将时间花在对业务非常重要的工作上。因为它 是开源的,所以可以灵活地决定在何处以及如何使用ROS 2,以及根据实际的需求自由定制,使用ROS 2 可以大幅度提升产品和算法研发速度! 专为生产而设计 凭借在建立ROS 1作为机器人研发的事实上的全球标准方面的十年经验,ROS 2从一开始就被建立在工业级 基础上并可用于生产,包括高可靠性和安全关键系统。 ROS 2的设计选择、开发实践和项目管理基于行业利 益相关者的要求。 多平台支持 ROS 2在Linux,Windows和macOS上得到支持和测试,允许无缝开发和部署机器人自动化,后端管理和 用户界面。分层支持模型允许端口到新平台,例如实时和嵌入式操作系统,以便在获得兴趣和投资时引入和推 广。 丰富的应用领域 与之前的ROS 1一样,ROS 2可用于各种机器人应用,从室内到室外、从家庭到汽车、水下到太空、从消费 到工业。 没有供应商锁定 ROS 2建立在一个抽象层上,使机器人库和应用程序与通信技术隔离开来。抽象底层是通信代码的多种实现, 包括开源和专有解决方案。在抽象顶层,核心库和用户应用程序是可移植的。 建立在开放标准之上 ROS 2中的默认通信方法使用IDL、DDS和DDS-I RTPS等行业标准,这些标准已广泛应用于从工厂到航空 航天的各种工业应用中。 开源许可证 ROS 2代码在Apache 2.0许可下获得许可,在3条款(或“新”)BSD许可下使用移植的ROS 1代码。这两个 许可证允许允许使用软件,而不会影响用户的知识产权。 全球社区 超过10年的ROS项目通过发展一个由数十万开发人员和用户组成的全球社区,为机器人技术创建了一个庞大 的生态系统,他们为这些软件做出贡献并进行了改进。 ROS 2由该社区开发并为该社区开发,他们将成为未 来的管理者。 行业支持 正如ROS 2技术指导委员会成员所证明的那样,对ROS 2的行业支持很强。除了开发顶级产品外,来自世界 各地的大大小小公司都在投入资源为ROS 2做出开源贡献。 与ROS1的互操作性 ROS 2包括到ROS 1的桥接器,处理两个系统之间的双向通信。如果有一个现有的ROS 1应用程序, 可 以通过桥接器开始尝试使用ROS 2,并根据要求和可用资源逐步移植应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值