机体右手笛卡尔坐标系下roll、pitch 和 yaw 旋转

本文介绍了右手笛卡尔坐标系中,x-、y-、z-轴的旋转——roll、pitch和yaw。roll对应翻滚角ϕ,绕x轴逆时针旋转;pitch为俯仰角θ,绕y轴逆时针旋转;yaw表示侧航角ψ,绕z轴逆时针旋转。详细讨论了Rx、Ry、Rz旋转矩阵及其右手螺旋法则。

在这里插入图片描述
关于如上右手笛卡尔坐标系的 x-、y- 和 z- 轴的旋转分别叫做 roll、pitch 和 yaw 旋转:
roll:翻滚角ϕ
pitch:俯仰角θ
yaw:侧航角ψ

绕 x-轴的主动旋转定义为:
Rx​(θx​),这里的 θx​ 是 roll 角,和右手螺旋的方向相同 (在 yz 平面逆时针)。

绕 y-轴的主动旋转定义为:
Ry​(θy​),这里的 θy​ 是 pitch 角,和右手螺旋的方向相同 (在 zx 平面逆时针)。

绕 z-轴的主动旋转定义为:
Rz​(θz​),这里的 θz​ 是 yaw 角,和右手螺旋的方向相同 (在 xy 平面逆时针)。

在 PyBullet 中,如果你想要**获得某个物体或连杆在笛卡尔坐标系中的位置姿态**(即三维空间中的位置方向),可以使用以下方法: --- ### ✅ 方法一:获取物体或连杆的笛卡尔位置与姿态 #### 🔹 获取基础物体(base)的位置姿态 ```python import pybullet as p # 连接物理引擎 p.connect(p.GUI) # 加载一个物体(例如:KUKA 机械臂) robot_id = p.loadURDF("kuka.urdf", useFixedBase=True) # 获取基础物体(base)的位置姿态 position, orientation = p.getBasePositionAndOrientation(robot_id) print("基础位置(笛卡尔坐标):", position) print("基础姿态(四元数):", orientation) # 断开连接 p.disconnect() ``` --- #### 🔹 获取某个连杆(link)的位置姿态 如果你加载的是一个多关节的机器人(如 KUKA),你可以获取某个连杆的位置: ```python # 获取第3个连杆的位置姿态 link_index = 3 link_state = p.getLinkState(robot_id, link_index) # link_state 包含: # - 连杆的笛卡尔位置 (x, y, z) # - 连杆的姿态(四元数) # - 如果需要,还可以获取世界坐标系下的线速度角速度 print("连杆位置(笛卡尔坐标):", link_state[0]) print("连杆姿态(四元数):", link_state[1]) ``` --- ### ✅ 方法二:在主循环中实时获取位置 ```python import time p.connect(p.GUI) robot_id = p.loadURDF("kuka.urdf", useFixedBase=True) while True: pos, orn = p.getBasePositionAndOrientation(robot_id) print("当前位置:", pos) p.stepSimulation() time.sleep(1./240) ``` --- ### ✅ 方法三:将四元数换为欧拉角(更易读) PyBullet 返回的姿态是四元数 `(x, y, z, w)`,你可以将其换为欧拉角(roll, pitch, yaw): ```python import pybullet as p euler_angles = p.getEulerFromQuaternion(orientation) print("欧拉角(roll, pitch, yaw):", euler_angles) ``` --- ### ✅ 总结对比 | 函数 | 用途 | 输出内容 | |------|------|----------| | `p.getBasePositionAndOrientation(bodyUniqueId)` | 获取物体基础位置姿态 | `(position, orientation)` | | `p.getLinkState(bodyUniqueId, linkIndex)` | 获取连杆的位置姿态 | `(linkWorldPosition, linkWorldOrientation)` | | `p.getEulerFromQuaternion(orn)` | 四元数欧拉角 | `(roll, pitch, yaw)` | | `p.getLinkStates()` | 批量获取所有连杆状态 | 列表,包含多个连杆状态 | --- ### ✅ 注意事项 - `position` 是一个三维元组 `(x, y, z)`,表示笛卡尔坐标。 - `orientation` 是一个四元数 `(x, y, z, w)`,也可以用 `p.getEulerFromQuaternion()` 换为欧拉角。 - 使用 `p.getLinkState()` 可以获得机器人末端执行器(例如机械臂末端)的精确位置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JoannaJuanCV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值