In [1]:
import tf
import rospy
import json
import rospkg
import transformations
In [17]:
def frame_publisher(Cskeleton, sensor, Kskeleton=None):
tfb = tf.TransformBroadcaster()
rospy.sleep(1)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
for key in Cskeleton.keys():
if Kskeleton is not None:
tfb.sendTransform(Kskeleton[key][0], Kskeleton[key][1], rospy.Time.now(),
key+'_init', '/optitrack_frame')
tfb.sendTransform(Cskeleton[key][0], Cskeleton[key][1], rospy.Time.now(),
key, '/optitrack_frame')
rate.sleep()
In [18]:
rospy.init_node('test_calibration')
In [19]:
rospack = rospkg.RosPack()
In [20]:
sensor = 'opt'
In [ ]:
sensor = 'kinect'
In [27]:
skeleton_file = rospack.get_path("human_moveit_config")+'/tmp/skeleton.json'
# read the T pose from human
with open(skeleton_file) as data_file:
data_skeletons = json.load(data_file)
skeleton = data_skeletons[sensor]
In [28]:
calibration_file = rospack.get_path("human_moveit_config")+'/tmp/sensor_calibration.json'
# read the T pose from human
with open(calibration_file) as data_file:
data_calibration = json.load(data_file)
calibration = data_calibration[sensor]
In [29]:
KtB = skeleton['human/base']
In [30]:
# convert back all skeletons frames into kinect
Kskeleton = {}
for key, value in skeleton.iteritems():
if key != 'human/base':
Kskeleton[key] = transformations.multiply_transform(KtB, value)
else:
Kskeleton[key] = value
In [31]:
# convert all skeleton data to their calibrated values
Cskeleton = {}
base_transform = transformations.inverse_transform(calibration['human/base'])
for key, value in calibration.iteritems():
Cskeleton[key] = transformations.multiply_transform(Kskeleton[key], value)
In [12]:
frame_publisher(Cskeleton, sensor)
In [ ]:
frame_publisher(Cskeleton, sensor, Kskeleton)
In [ ]: