news 2026/7/2 5:16:31

UR3 机械臂状态读取与多格式转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UR3 机械臂状态读取与多格式转换

代码由Qwen3-Max生成。

prompt:

设计一个读取UR3机械臂关节角度(两种格式输出:弧度和角度)和末端位姿的程序(3种格式:UR机械臂默认格式,欧拉角和旋转矩阵)。

1. 代码

ur3_state_reader.py

import rtde_receive import numpy as np from scipy.spatial.transform import Rotation # -- 全局配置 -- ROBOT_HOST = '192.168.1.101' # 请替换为你的 UR3 IP def get_robot_state(robot_host=ROBOT_HOST): """ 读取 UR3 机械臂当前状态,并以多种格式输出关节角和末端位姿。 返回: dict: 包含关节角(弧度/角度)和末端位姿(三种格式) """ try: rtde_r = rtde_receive.RTDEReceiveInterface(robot_host) # 1. 获取关节角度(弧度) q_rad = np.array(rtde_r.getActualQ()) # 单位:弧度 q_deg = np.rad2deg(q_rad) # 转换为角度 # 2. 获取末端位姿(UR 默认格式:[x, y, z, rx, ry, rz]) tcp_pose_ur = np.array(rtde_r.getActualTCPPose()) # 前3位位置(m),后3位轴角向量(rad) # 3. 提取旋转部分(轴角向量) rotvec = tcp_pose_ur[3:] # 4. 转换为旋转矩阵 R = Rotation.from_rotvec(rotvec).as_matrix() # 5. 转换为欧拉角(默认顺序 'XYZ',单位:度) euler_xyz_deg = Rotation.from_rotvec(rotvec).as_euler('xyz', degrees=True) # 关闭连接(RTDEReceiveInterface 通常不需要显式关闭,但可重用) # 注意:频繁创建/销毁 rtde_r 可能影响性能,建议在长期任务中复用实例 return { "joint_angles": { "radians": q_rad.tolist(), "degrees": q_deg.tolist() }, "tcp_pose": { "ur_format": tcp_pose_ur.tolist(), # [x, y, z, rx, ry, rz] "euler_xyz_degrees": euler_xyz_deg.tolist(), # [roll, pitch, yaw] in degrees "rotation_matrix": R.tolist() # 3x3 list of lists } } except Exception as e: print(f"❌ 读取机器人状态失败: {e}") return None def print_robot_state(state): """格式化打印机器人状态(用于调试或日志)""" if state is None: print("无法获取机器人状态。") return print("\n===== UR3 当前状态 =====") print("🔄 关节角度 (弧度):") for i, q in enumerate(state['joint_angles']['radians'], 1): print(f" q{i}: {q:.4f} rad") print("\n🔄 关节角度 (角度):") for i, q in enumerate(state['joint_angles']['degrees'], 1): print(f" q{i}: {q:.2f}°") print("\n📍 末端位姿 (UR 默认格式 [x,y,z,rx,ry,rz]):") pose = state['tcp_pose']['ur_format'] print(f" 位置 (m): [{pose[0]:.4f}, {pose[1]:.4f}, {pose[2]:.4f}]") print(f" 轴角 (rad): [{pose[3]:.4f}, {pose[4]:.4f}, {pose[5]:.4f}]") print("\n📍 末端位姿 (欧拉角 XYZ, 单位: 度):") euler = state['tcp_pose']['euler_xyz_degrees'] print(f" Roll (X): {euler[0]:.2f}°, Pitch (Y): {euler[1]:.2f}°, Yaw (Z): {euler[2]:.2f}°") print("\n📍 旋转矩阵 R = [r11 r12 r13; r21 r22 r23; r31 r32 r33]:") R = np.array(state['tcp_pose']['rotation_matrix']) print(R) if __name__ == '__main__': print("正在读取 UR3 机械臂当前状态...") state = get_robot_state() print_robot_state(state)

2. 依赖库安装

pip install ur_rtde scipy numpy

3. 输出

下面是两种不同TCP设置的输出。

(book_robot) robot@robot-cvai:~/workspace/book_robot/ur3$ python ur3_state_reader.py 正在读取 UR3 机械臂当前状态... ===== UR3 当前状态 ===== 🔄 关节角度 (弧度): q1: 1.5216 rad q2: -0.1532 rad q3: -1.9164 rad q4: 4.9550 rad q5: 4.5877 rad q6: -6.4484 rad 🔄 关节角度 (角度): q1: 87.18° q2: -8.78° q3: -109.80° q4: 283.90° q5: 262.85° q6: -369.47° 📍 末端位姿 (UR 默认格式 [x,y,z,rx,ry,rz]): 位置 (m): [0.0924, -0.2015, 0.4796] 轴角 (rad): [-0.0428, -1.7833, 2.2792] 📍 末端位姿 (欧拉角 XYZ, 单位: 度): Roll (X): -75.29°, Pitch (Y): -7.35°, Yaw (Z): 167.73° 📍 旋转矩阵 R = [r11 r12 r13; r21 r22 r23; r31 r32 r33]: [[-0.96913461 -0.1748315 -0.17381614] [ 0.21076242 -0.22179452 -0.95204327] [ 0.12789568 -0.959292 0.25179666]] (book_robot) robot@robot-cvai:~/workspace/book_robot/ur3$ python ur3_state_reader.py 正在读取 UR3 机械臂当前状态... ===== UR3 当前状态 ===== 🔄 关节角度 (弧度): q1: 1.5215 rad q2: -0.1532 rad q3: -1.9164 rad q4: 4.9550 rad q5: 4.5876 rad q6: -6.4485 rad 🔄 关节角度 (角度): q1: 87.18° q2: -8.78° q3: -109.80° q4: 283.90° q5: 262.85° q6: -369.47° 📍 末端位姿 (UR 默认格式 [x,y,z,rx,ry,rz]): 位置 (m): [0.0576, -0.3919, 0.5300] 轴角 (rad): [-0.0429, -1.7834, 2.2790] 📍 末端位姿 (欧拉角 XYZ, 单位: 度): Roll (X): -75.30°, Pitch (Y): -7.35°, Yaw (Z): 167.73° 📍 旋转矩阵 R = [r11 r12 r13; r21 r22 r23; r31 r32 r33]: [[-0.96911454 -0.17485003 -0.17390936] [ 0.21085012 -0.22172955 -0.95203899] [ 0.1279032 -0.95930364 0.25174848]] (book_robot) robot@robot-cvai:~/workspace/book_robot/ur3$
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 11:12:30

Windows功能解锁工具ViVeTool GUI:新手必备的5大实用场景指南

Windows功能解锁工具ViVeTool GUI:新手必备的5大实用场景指南 【免费下载链接】ViVeTool-GUI Windows Feature Control GUI based on ViVe / ViVeTool 项目地址: https://gitcode.com/gh_mirrors/vi/ViVeTool-GUI 还在为Windows系统中的隐藏功能而苦恼吗&…

作者头像 李华
网站建设 2026/7/2 0:54:38

百度网盘秒传链接超简单使用指南:新手零门槛快速上手

百度网盘秒传链接超简单使用指南:新手零门槛快速上手 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘下载限速而烦恼吗&a…

作者头像 李华
网站建设 2026/6/26 5:11:00

XposedRimetHelper 位置模拟方案操作指南

在远程办公日益普及的今天,钉钉考勤打卡的位置限制成为许多职场人士的实际困扰。XposedRimetHelper 作为一款基于 Xposed 框架的钉钉辅助模块,通过位置模拟功能有效解决了这一痛点。该工具支持钉钉 4.2.0 以上所有版本,为需要灵活工作地点的用…

作者头像 李华
网站建设 2026/6/28 17:45:15

追踪链路--使用iptables/ipvs来记录后端pod真实ip

前言 之前使用nginx-ingress-controller来记录后端真实ip,但是有位老哥说了,我没有用nginx-ingress-controller,而是用的原生nginx,这时候又当如何记录后端真实ip的问题呢 环境准备 nginx: upstream backend_ups {server backend-…

作者头像 李华
网站建设 2026/6/30 16:09:48

Obsidian代码执行插件:让笔记成为你的个人编程实验室

Obsidian代码执行插件:让笔记成为你的个人编程实验室 【免费下载链接】obsidian-execute-code Obsidian Plugin to execute code in a note. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-execute-code 你是否曾经在写学习笔记时,想要立…

作者头像 李华
网站建设 2026/7/1 11:34:59

Tiptap协作编辑完全指南:从零构建实时协同应用

Tiptap协作编辑完全指南:从零构建实时协同应用 【免费下载链接】tiptap The headless editor framework for web artisans. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiptap 在团队协作日益重要的今天,如何让多个用户同时编辑同一份文档…

作者头像 李华