python - 如何从一个函数调用中保存变量的值并将其用于下一个函数调用?
问题描述
我正在实现机器人操纵器的笛卡尔控制,您可以在下面看到产生关节速度以执行控制的函数:
def cartesian_control(joint_transforms, b_T_ee_current, b_T_ee_desired,
red_control, q_current, q0_desired):
num_joints = len(joint_transforms)
dq = numpy.zeros(num_joints)
ee_current_T_b = tf.transformations.inverse_matrix(b_T_ee_current)
current_T_desired = numpy.dot(ee_current_T_b, b_T_ee_desired)
current_P_desired = tf.transformations.translation_from_matrix(current_T_desired)
current_R_desired = current_T_desired[:3,:3]
angle, axis = rotation_from_matrix(current_T_desired)
rot_movement = numpy.dot(angle,axis)
desired_R_current = tf.transformations.inverse_matrix(current_R_desired)
delta_X = numpy.append(current_P_desired, rot_movement)
# Proportional - Derivative Controller
Kp = 5 # Proportional Gain
Kd = 1 # Derivative Gain
delta_delta_X = (delta_X - delta_X_prev)/0.01
x_dot = Kp*delta_X + Kd*delta_delta_X
# Scale translational and angular velocities for smoothness
for i in range(3):
if x_dot[i] > 1:
x_dot[i] = 1
for i in range(3,1,5):
if x_dot[i] > 0.1:
x_dot[i] = 0.1
J = numpy.empty((6,0))
V = numpy.zeros((6,6))
for i in range(num_joints):
b_T_joint = joint_transforms[i]
ee_T_joint = numpy.dot(ee_current_T_b, b_T_joint)
joint_T_ee = tf.transformations.inverse_matrix(ee_T_joint)
ee_R_joint = rotation_matrix(ee_T_joint)
joint_P_ee = tf.transformations.translation_from_matrix(joint_T_ee)
joint_skew_matrix = S_matrix(joint_P_ee)
V[:3,:3] = ee_R_joint
V[3:6,3:6] = ee_R_joint
V[:3, 3:6] = numpy.dot(-ee_R_joint, joint_skew_matrix)
J = numpy.column_stack((J, V[:,5]))
J_pseudoinv = numpy.linalg.pinv(J, rcond=0.01)
dq = numpy.dot(J_pseudoinv, x_dot)
# Scale joint velocities
for i in range(len(dq)):
if dq[i] > 0.1:
dq[i] = 0.1
return dq
如果我只实现一个比例控制器,上述功能可以完美运行,这意味着如果x_dot = Kp*delta_X + Kd*delta_delta_X1
我只有x_dot = Kp*delta_X
. 但是,我也想实现一个比例微分控制器,但我的问题是如何获得delta_X_prev
变量。这意味着我需要找到一种方法来保存delta_X
一个函数调用的变量值并在函数调用中使用它。做了一些搜索,我发现multiprocessing
python 模块会有所帮助,但真的没有理解它的整个概念。有没有其他更简单的方法可以做到这一点?
解决方案
推荐阅读
- r - 向量化多项式
- javascript - 将状态保存到 React 中的本地存储后无法设置状态
- selenium - 数据驱动的下拉菜单 Katalon 自动化记录器
- python - 从通知中心 windows 10 中删除通知
- instagram-api - 适用于搜索用户的 Instagram API
- batch-file - 在启动 shell 时在 cmd 中设置占位符命令而不自动执行命令
- django - ImportError using python if __name__ == "__main__"
- python - Matplotlib 子图标题与 x 刻度重叠
- php - MAX ID 计数仅每隔一次有效
- oracle-data-integrator - ODI 12C 使用 SDK 进行操作的智能导入