#include "Shared/RobotInfo.h"
#include "Behaviors/StateMachine.h"
#if defined(TGT_HAS_ARMS) && defined(TGT_HAS_HEAD)

#include "Behaviors/Nodes/PostureNode.h"
#include "Behaviors/Transitions/EventTrans.h"
#include "Motion/MotionPtr.h"

$nodeclass GripperTrackCamera2 : StateNode {

  $nodeclass ArmMover : PostureNode : doStart {
    fmat::Column<3> targetCam = fmat::pack(0, 0, 300);
    fmat::Column<3> targetBase = kine->linkToBase(CameraFrameOffset) * targetCam;
    fmat::Column<3> noOffset = fmat::pack(0, 0, 0);
#ifdef TGT_IS_CALLIOPE5
		unsigned int link = LeftFingerFrameOffset;
#else
		unsigned int link = GripperFrameOffset;
#endif
    getMC()->solveLinkPosition(targetBase, link, noOffset);
  }

  virtual void setup() {
	//max speed in radians per second 
	//(set arbitrarily by what looks safe in mirage)
	float maxSpeed = deg2rad((float)45);
	MotionPtr<PostureMC>()->setMaxSpeed(ArmOffset,maxSpeed);

	MotionManager::MC_ID posturemc = addMotion(MotionPtr<PostureMC>());

    	$statemachine{
  		startnode: ArmMover[setMC(posturemc)] =E(sensorEGID)=> startnode
    }
  }

}

REGISTER_BEHAVIOR(GripperTrackCamera2);

#endif
