Я пытаюсь получить вывод из определенной функции, но не могу получить доступ к определенной переменной, определенной в предыдущей функции.
В соответствии с приведенным ниже кодом я подписываюсь на темы (/ curr_pose_r2) и (/ joint-angles_r2) для их соответствующих функций -> наблюдение_callback_pose () и наблюдение_callback_joint_angles () . Эти две функции сохраняют подписанное значение в соответствующих им переменных, т.е. obs_ja1 и obs_pose
Теперь мне нужно использовать эти две переменные для вычисления состояния которая находится внутри третьей функции take_observation () . Но когда я вызываю эту функцию в соответствии со строкой obs = take_observation () Она выдает мне следующую ошибку
Traceback (most recent call last):
File "./trial_pose.py", line 56, in <module>
obs = take_observation()
File "./trial_pose.py", line 38, in take_observation
joint_angles = np.array(obs_ja1.positions)
NameError: global name 'obs_ja1' is not defined
from trajectory_msgs.msg import JointTrajectory
from std_msgs.msg import Header
from trajectory_msgs.msg import JointTrajectoryPoint
import rospy
import sys
import copy
import moveit_commander #allow us to communicate with the MoveIt Rviz interface
import moveit_msgs.msg
import geometry_msgs.msg
from geometry_msgs.msg import Pose
import std_msgs
import random
import numpy as np
from copy import deepcopy
import transforms3d as tf3d
import gym
from gym import error, spaces, utils
from gym.utils import seeding
import rospkg
targetPosition = np.asarray([0.0947665050276, -0.528568951669, 0.906398012978])
target_orientation = np.asarray([0.500077733518, -0.499998982263, 0.499900998414, 0.500022269464])
def observation_callback_joint_angles(joint_angles):
obs_ja1 = joint_angles
#print(obs_ja1.positions)
#print(message)
return obs_ja1
def observation_callback_pose(poses):
obs_pose1 = poses
#print(obs_pose1)
return obs_pose1
def take_observation():
# Check that the observation is not prior to the action
joint_angles = np.array(obs_ja1.positions)
print(joint_angles)
curr_eef_position = np.array(obs_pose1.positions)
curr_eef_quat = np.ndarray.flatten(obs_pose1.orientation)
quat_error = tf3d.quaternions.qmult(curr_eef_quat, tf3d.quaternions.qconjugate(target_orientation))
eef_points = curr_eef_position - targetPosition
state = np.r_[np.reshape(joint_angles, -1),
np.reshape(eef_points, -1),
np.reshape(quat_error, -1)]
print (state)
return state
'''
RETURNS STATE
'''
obs = take_observation()