机械臂末端位姿和力传感器数据的提取与绘制——机器人操作进阶系列 · 数据提取篇

部署运行你感兴趣的模型镜像

概要

本文概述了机器人系统中的数据提取,处理与绘制的整个流程,具体的目标是获取机械臂抓取过程中末端位姿和接触力的同步变化数据,为类似的任务提供参考。

1 数据的提取(关节角和力传感数据)

本文是基于UR的ROS driver实现机械臂的控制的,所以想要获取机械臂末端位姿和力传感器的数值,就要先得到和位姿和传感器通讯的相关数据。可以使用以下指令查询相关话题:

$ rostopic list # 查看所有的话题
$ rostopic echo <topic_name> # 查看特定话题的消息内容

经过查询可以得知/joint_states记录了六个关节角的变化,关节角可以通过正运动学计算出末端位姿,/wrench记录了末端力传感器的数据,可以直接使用。

根据博客ROS中数据提取与导出,我们可以利用rosbag功能包录制话题消息,其指令如下所示:

# 同时录制/wrench和/joint_states话题
rosbag record /wrench /joint_states -o wrench_position.bag

当实验过程中录制完成之后,可以在离线状态下回放和提取数据,如下所示:

# terminal 1
roscore

# terminal 2,先指定话题保存路径,避免遗漏数据
rostopic echo -p /wrench/wrench/force/z > force_z.txt 
rostopic echo -p /joint_states/position > joint_angle.txt

# terminal 3,回放rosbag文件
rosbag play wrench_position.bag

获得关节角位置数据之后,想要转换为想要的末端位姿,需要对关节角进行正运动学计算,见下一小节。

2 关节角到末端位姿的正运动学计算

由机械臂的关节角求末端位姿为经典的机器人正运动学计算问题,对于ur5e这类经典的机械臂,我们可以在github上查询并获得ur5e机械臂的正运动学的计算程序,地址:https://github.com/Shaluols/ur5e-fk.

其中,在主函数中的重要函数如下:

    # Obtain the homogeneous matrix from six joint angles
    np_T = forward(q)

    # transfer the homogeneous matrix format into ros msg type
    ros_T = matrix2ros(np_T)

如果我们只是想获得其末端执行器在Z轴上的位移分量,可以使用如下指令

	# 末端执行器位姿Z轴位移的获取
	position_z = matrix2ros(forward(q)).position.z

3 数据的绘制

至此,我们已经获得了机械臂末端执行器的位姿和接触力的数据,然后就可以对数据文件进行绘制,这里以末端Z向接触力为例,给出基于Python的文件读取与绘制程序如下所示:

import matplotlib.pyplot as plt
import numpy as np

filename = "force_z3" # 指定数据源文件

#替换txt文档中的逗号
import re  # research
f=open(filename + ".txt", 'r')
alllines=f.readlines()
f.close()
f=open(filename + ".txt",'w+')
for eachline in alllines:
    a=re.sub(',',' ',eachline)
    f.writelines(a)
f.close()

# download data
file = filename + ".txt"
b = np.loadtxt(file)

# 指定时间(x)和Z向接触力(y)数据
for i in range(len(b)):
    b[i, 0] = i/500 # 消息频率为500Hz,将其转换为真实时间尺度
x = b[:, 0]
y = b[:,1]  # 读取Z向接触力

plt.ylabel('force_z', fontsize = 20)
plt.xlabel('time', fontsize = 20)
plt.yticks(fontsize = 15)
plt.xticks(fontsize = 15)

plt.plot(x, y)
plt.show()

按照以上程序最终获得的Z向位移和接触力的同步变化如下图所示:
在这里插入图片描述
然后基于位姿和接触力的同步分析,就可以看到抓取过程中详细的历程。

小结

本文给出了如何获取机械臂末端位姿和接触力的同步变化数据的详细过程,同样的,对于其他机器人系统的数据提取和绘制也可以参考本文的思路和程度。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ManiLab

赞赏是支持,更是共同成长的见证

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

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

打赏作者

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

抵扣说明:

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

余额充值