コード例 #1
0
]
entFCL = DynamicGraphFCL('entFCL')

# setup entity for FCL
collision_string = ''
for collision in collision_objects:
    collision_string += collision + str(':')
collision_string = collision_string[:-1]
print('setting collision objects: ' + str(collision_string))
entFCL.set_collision_joints(collision_string)

# plugging FK into FCL
for collision in collision_objects:
    robot.dynamic.createOpPoint(collision, collision)
    robot.dynamic.signal(collision).recompute(0)
    plug(robot.dynamic.signal(collision), entFCL.signal(collision))

for i in range(len(collision_objects)):
    for j in range(len(collision_objects)):
        if not (collision_objects[i] == collision_objects[j]):
            signal_name = str(collision_objects[i]) + str(collision_objects[j])
            entFCL.signal(signal_name).recompute(0)
'''
TORSO TEST
DYNOP FOR CLOSEST POINT CALUCLATION AND JACOBIAN TWIST
'''
# just for torso test!
#arm right
dynOP7right = DynamicOppointModifier('arm_right_7_joint')
plug(robot.dynamic.arm_right_7_joint, dynOP7right.positionIN)
plug(robot.dynamic.Jarm_right_7_joint, dynOP7right.jacobianIN)
This is valid, because the DG only computes the pointers which are actually
requested by some other entities.'''
'**********************************'

entFCL = DynamicGraphFCL('entFCL')
for collision in collision_objects:
    entFCL.addCollisionJoint(collision)
    robot.dynamic.createOpPoint(collision, collision)
    robot.dynamic.signal(collision).recompute(0)
entFCL.finalizeSignals()
# enable a rostopic publisher for capusle information
#entFCL.enableCapsuleTopic(True)

# plug the forward kinematics into the input signals
for collision in collision_objects:
    plug(robot.dynamic.signal(collision), entFCL.signal(collision))

# cross init signals/matrix
for i in range(len(collision_objects)):
    for j in range(len(collision_objects)):
        if not (collision_objects[i] == collision_objects[j]):
            signal_name = str(collision_objects[i]) + str(collision_objects[j])
            entFCL.signal(signal_name).recompute(0)

'**********************************'
'init oppoint modifiers'
''' this is going to be necessary for each active moving collision point (namely link1)
    for the collision avoidance task we need a jacobian at the closest point 
rather than at the link-origin. This being sad, the entfcl bring out oppoint_<name> signals
which are relative points of the closest point pairs w.r.t the link origin
dyanamic op point modifier takes this relative point as a transformation and outputs the according jacobian