TypeError: наблюдение_callback_pose () принимает ровно 1 аргумент (задано 0) - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь запустить этот код, который имеет три функции, первые две функции имеют один аргумент, который важен для получения информации от подписчиков. В третьем я на самом деле вызываю первые две функции, чтобы получить эти переменные, но, поскольку у этих двух функций есть аргумент, он показывает некоторую ошибку. Как я могу передать пустой аргумент две эти две функции таким образом, чтобы он удовлетворял условию (что 1 аргумент был передан), а также я извлекаю информацию, хранящуюся в переменных, то есть obs_ja1 и obs_pose1

Я пыталсяпередавая некоторые аргументы, но я получаю следующую ошибку

Traceback (most recent call last):
  File "./trial_pose.py", line 58, in <module>
    take_observation()
  File "./trial_pose.py", line 38, in take_observation
    obs_ja1 = observation_callback_joint_angles()
TypeError: observation_callback_joint_angles() takes exactly 1 argument (0 given)

код

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
    obs_ja1 = observation_callback_joint_angles()
    obs_pose1 = observation_callback_pose()
    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
    '''

take_observation()

rospy.init_node('trial_pose', anonymous= True)


while not rospy.is_shutdown():
    # #*************** Uncomment this block if the node should send random points to the action function
    # #Gives a random number between 1 and 6, to move the robot randomly with the 6 actions.
    # action = random.randint(1,6)

    # #Calls move function, which sends the wanted movement to the robot
    #rospy.Subscriber("curr_pose_r1", geometry_msgs.msg.Pose, move_action)
    obs_sub_pose = rospy.Subscriber("curr_pose_r2", Pose, observation_callback_pose)
    obs_sub_ja = rospy.Subscriber("joint_angles_r2", JointTrajectoryPoint, observation_callback_joint_angles)
    rospy.spin()



1 Ответ

0 голосов
/ 11 ноября 2019

Как я понял, вам нужен параметр по умолчанию

def observation_callback_pose(poses = "invalid"):
    obs_pose1 = poses
    #print(obs_pose1)
    return obs_pose1

Например, когда вы вызываете эту функцию следующим образом:

observation_callback_pose("argument1")

она возвращает argument1,но когда вы звоните так:

observation_callback_pose()

возвращает "invalid".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...