名称错误:未定义全局名称“obs\u ja1”

2024-04-16 20:43:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从已定义的函数中获取输出,但无法访问前一个函数中定义的特定变量。你知道吗

根据下面的代码,我将主题(/curr\u pose\u r2)和(/joint-angles\u r2)订阅到它们各自的函数-->;observation\u callback\u pose()observation\u callback\u joint\u angles()。这两个函数将预订值存储到各自的变量,即obs\u ja1obs\u pose

现在我需要使用这两个变量来计算状态,它位于第三个函数take\u observation()中。但是当我按照obs=take\u 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()

Tags: 函数fromimportnpmsganglestakeobservation