def get_pos_vel_data(db_name):
    docs = DBUtils.get_docs(db_name, 'ros_amcl_pose')
    num_of_docs = len(docs)
    data = np.zeros((num_of_docs, 5))
    # data (nx6) is arranged as follows
    for i, doc in enumerate(docs):
        # get position information from amcl_pose localisation
        data[i][0] = DataUtils.get_var_value(doc, 'pose/pose/position/x')
        data[i][1] = DataUtils.get_var_value(doc, 'pose/pose/position/y')
        quat_x = DataUtils.get_var_value(doc, 'pose/pose/orientation/x')
        quat_y = DataUtils.get_var_value(doc, 'pose/pose/orientation/y')
        quat_z = DataUtils.get_var_value(doc, 'pose/pose/orientation/z')
        quat_w = DataUtils.get_var_value(doc, 'pose/pose/orientation/w')
        theta = tf.euler_from_quaternion((quat_w, quat_x, quat_y, quat_z))[2]
        data[i][2] = theta
        timestamp = DataUtils.get_var_value(doc, 'timestamp')

        # get velocity information from odom at the same timestamp as position
        odom_doc = DBUtils.get_last_doc_before(db_name, 'ros_ropod_odom',
                                               timestamp)
        vel_x = DataUtils.get_var_value(odom_doc, 'twist/twist/linear/x')
        vel_y = DataUtils.get_var_value(odom_doc, 'twist/twist/linear/y')
        data[i][3] = vel_x
        data[i][4] = vel_y

    return data
def get_handle_position(log_db_name, event_timestamp):
    object_detection_result = DBUtils.get_last_doc_before(log_db_name,
                                                          'ros_detect_handle_server_result',
                                                          event_timestamp)
    detected_handle = get_closest_handle(object_detection_result['result']['objects']['objects'])
    detected_handle_bb = detected_handle['bounding_box']
    center_position = [detected_handle_bb['center']['x'],
                       detected_handle_bb['center']['y'],
                       detected_handle_bb['center']['z']]
    return np.array(center_position)
def get_goal_pose(log_db_name, event_timestamp):
    goal_pose_doc = DBUtils.get_last_doc_before(log_db_name,
                                                'ros_grasped_handle_pose',
                                                 event_timestamp)

    goal_position = [goal_pose_doc['pose']['position']['x'],
                     goal_pose_doc['pose']['position']['y'],
                     goal_pose_doc['pose']['position']['z']]

    goal_orientation_q = [goal_pose_doc['pose']['orientation']['x'],
                          goal_pose_doc['pose']['orientation']['y'],
                          goal_pose_doc['pose']['orientation']['z'],
                          goal_pose_doc['pose']['orientation']['w']]

    orientation_euler = tf.euler_from_quaternion(goal_orientation_q)
    return np.array(goal_position), np.array(orientation_euler)
def get_handle_bbox(log_db_name, event_timestamp):
    object_detection_result = DBUtils.get_last_doc_before(log_db_name,
                                                          'ros_detect_handle_server_result',
                                                          event_timestamp)
    detected_handle = get_closest_handle(object_detection_result['result']['objects']['objects'])
    detected_handle_bb = detected_handle['bounding_box']

    bb_min = [detected_handle_bb['center']['x'] - (detected_handle_bb['dimensions']['x'] / 2.),
              detected_handle_bb['center']['y'] - (detected_handle_bb['dimensions']['y'] / 2.),
              detected_handle_bb['center']['z'] - (detected_handle_bb['dimensions']['z'] / 2.)]

    bb_max = [detected_handle_bb['center']['x'] + (detected_handle_bb['dimensions']['x'] / 2.),
              detected_handle_bb['center']['y'] + (detected_handle_bb['dimensions']['y'] / 2.),
              detected_handle_bb['center']['z'] + (detected_handle_bb['dimensions']['z'] / 2.)]

    return bb_min, bb_max
예제 #5
0
def get_object_pose(log_db_name, event_timestamp):
    goal_pose_doc = DBUtils.get_last_doc_before(
        log_db_name, 'ros_push_pull_object_server_goal', event_timestamp)

    goal_position = [
        goal_pose_doc['goal']['object_pose']['pose']['position']['x'],
        goal_pose_doc['goal']['object_pose']['pose']['position']['y'],
        goal_pose_doc['goal']['object_pose']['pose']['position']['z']
    ]

    goal_orientation_q = [
        goal_pose_doc['goal']['object_pose']['pose']['orientation']['x'],
        goal_pose_doc['goal']['object_pose']['pose']['orientation']['y'],
        goal_pose_doc['goal']['object_pose']['pose']['orientation']['z'],
        goal_pose_doc['goal']['object_pose']['pose']['orientation']['w']
    ]

    orientation_euler = tf.euler_from_quaternion(goal_orientation_q)
    return np.array(goal_position), np.array(orientation_euler)
예제 #6
0
def get_motion_duration(log_db_name, event_timestamp):
    duration_doc = DBUtils.get_last_doc_before(log_db_name,
                                               'ros_motion_duration',
                                               event_timestamp)
    return duration_doc['data']
예제 #7
0
def get_distance_from_edge(log_db_name, event_timestamp):
    distance_doc = DBUtils.get_last_doc_before(log_db_name,
                                               'ros_distance_from_edge',
                                               event_timestamp)
    return distance_doc['data']