Пример #1
0
		LuaRef registerClass(lua_State* state)const
		{
			util::ScopedSavedStack save(state);
			if (class_userdata::newmetatable<class_type>(state))
			{
				LuaTable metatable(state, StackTop());
				metatable.push();
				registerMember(state);

				if (!traits::is_same<base_class_type, void>::value || !property_map_.empty())//if base class has property and derived class hasnt property. need property access metamethod
				{
					for (PropMapType::const_iterator it = property_map_.begin(); it != property_map_.end(); ++it)
					{
						int count = lua_type_traits<FunctorType>::push(state, it->second);
						if (count > 1)
						{
							lua_pop(state, count - 1);
							count = 1;
						}
						if (count == 1)
						{
							lua_setfield(state, -2, ("_prop_" + it->first).c_str());
						}
					}
					LuaFunction indexfun = kaguya::LuaFunction::loadstring(state, "local arg = {...};local metatable = arg[1];"
						"return function(table, index)"
//						" if type(table) == 'userdata' then "
						" local propfun = metatable['_prop_'..index];"
						" if propfun then return propfun(table) end "
//						" end "
						" return metatable[index]"
						" end")(metatable);

					metatable.setField("__index", indexfun);

					LuaFunction newindexfn = LuaFunction::loadstring(state, "local arg = {...};local metatable = arg[1];"
						" return function(table, index, value) "
						" if type(table) == 'userdata' then "
						" local propfun = metatable['_prop_'..index];"
						" if propfun then return propfun(table,value) end "
						" end "
						" rawset(table,index,value) "
						" end")(metatable);
					metatable.setField("__newindex", newindexfn);
				}
				else
				{
					metatable.setField("__index", metatable);
				}

				set_base_metatable(state, metatable, types::typetag<base_class_type>());

				return metatable;
			}
			else
			{
				except::OtherError(state, typeid(class_type*).name() + std::string(" is already registered"));
			}
			return LuaRef(state);
		}
Пример #2
0
		LuaTable createMatatable(lua_State* state)const
		{
			util::ScopedSavedStack save(state);
			if (class_userdata::newmetatable<class_type>(state))
			{
				LuaStackRef metatable(state, -1);
				registerMember(state);

				if (!traits::is_same<base_class_type, void>::value || !property_map_.empty())//if base class has property and derived class hasnt property. need property access metamethod
				{
					LuaFunction indexfun = kaguya::LuaFunction::loadstring(state, "local arg = {...};local metatable = arg[1];"
						"return function(table, index)"
						//						" if type(table) == 'userdata' then "
						" local propfun = metatable['_prop_'..index];"
						" if propfun then return propfun(table) end "
						//						" end "
						" return metatable[index]"
						" end")(metatable);

					metatable.setField("__index", indexfun);

					LuaFunction newindexfn = LuaFunction::loadstring(state, "local arg = {...};local metatable = arg[1];"
						" return function(table, index, value) "
						" if type(table) == 'userdata' then "
						" local propfun = metatable['_prop_'..index];"
						" if propfun then return propfun(table,value) end "
						" end "
						" rawset(table,index,value) "
						" end")(metatable);
					metatable.setField("__newindex", newindexfn);
				}
				else
				{
					metatable.setField("__index", metatable);
				}

				set_base_metatable(state, metatable, types::typetag<base_class_type>());

				return metatable;
			}
			else
			{
				except::OtherError(state, typeid(class_type*).name() + std::string(" is already registered"));
			}
			return LuaTable();
		}
Пример #3
0
// The init() method should be called after construction.
// Here, all config variables are registered to build a descriptor meta
// structure that allows index and key based access to their values.
// If you don't want to see a certain member on the gui, there is no
// need to register it.
void Config::init()
{
    registerMember("captureStep.Cy", &Cy, 0.33);
    registerMember("captureStep.dy", &dy, 0.01);
    registerMember("captureStep.alpha", &alpha, 0.01);
    registerMember("captureStep.delta", &delta, 0.01);
    registerMember("captureStep.omega", &omega, 0.01);
    registerMember("captureStep.D", &D, 0.01);
    registerMember("captureStep.Z", &Z, 0.01);
    registerMember("captureStep.mu", &mu, 0.01 * PI);
    registerMember("captureStep.sigma", &sigma, 0.01);
    registerMember("captureStep.energy", &energy, 0.01);
    registerMember("captureStep.stepDelay", &stepDelay, 0.01);
    registerMember("captureStep.intensity", &intensity, 0.1);
    registerMember("captureStep.stepSizeFactorY", &stepSizeFactorY, 0.01);
    registerMember("captureStep.minEnergyDev", &minEnergyDev, 0.01);

    registerMember("motionInterface.inversePose.leftArmPose.handPosition.x", &motionInterface.inversePose.leftArmPose.handPosition.x, 0.01);
    registerMember("motionInterface.inversePose.leftArmPose.handPosition.y", &motionInterface.inversePose.leftArmPose.handPosition.y, 0.01);
    registerMember("motionInterface.inversePose.leftArmPose.handPosition.z", &motionInterface.inversePose.leftArmPose.handPosition.z, 0.01);
    registerMember("motionInterface.inversePose.rightArmPose.handPosition.x", &motionInterface.inversePose.rightArmPose.handPosition.x, 0.01);
    registerMember("motionInterface.inversePose.rightArmPose.handPosition.y", &motionInterface.inversePose.rightArmPose.handPosition.y, 0.01);
    registerMember("motionInterface.inversePose.rightArmPose.handPosition.z", &motionInterface.inversePose.rightArmPose.handPosition.z, 0.01);
    registerMember("motionInterface.inversePose.leftLegPose.footPosition.x", &motionInterface.inversePose.leftLegPose.footPosition.x, 0.01);
    registerMember("motionInterface.inversePose.leftLegPose.footPosition.y", &motionInterface.inversePose.leftLegPose.footPosition.y, 0.01);
    registerMember("motionInterface.inversePose.leftLegPose.footPosition.z", &motionInterface.inversePose.leftLegPose.footPosition.z, 0.01);
    registerMember("motionInterface.inversePose.leftLegPose.footAngle.x", &motionInterface.inversePose.leftLegPose.footAngle.x, 0.01);
    registerMember("motionInterface.inversePose.leftLegPose.footAngle.y", &motionInterface.inversePose.leftLegPose.footAngle.y, 0.01);
    registerMember("motionInterface.inversePose.leftLegPose.footAngle.z", &motionInterface.inversePose.leftLegPose.footAngle.z, 0.01);
    registerMember("motionInterface.inversePose.rightLegPose.footPosition.x", &motionInterface.inversePose.rightLegPose.footPosition.x, 0.01);
    registerMember("motionInterface.inversePose.rightLegPose.footPosition.y", &motionInterface.inversePose.rightLegPose.footPosition.y, 0.01);
    registerMember("motionInterface.inversePose.rightLegPose.footPosition.z", &motionInterface.inversePose.rightLegPose.footPosition.z, 0.01);
    registerMember("motionInterface.inversePose.rightLegPose.footAngle.x", &motionInterface.inversePose.rightLegPose.footAngle.x, 0.01);
    registerMember("motionInterface.inversePose.rightLegPose.footAngle.y", &motionInterface.inversePose.rightLegPose.footAngle.y, 0.01);
    registerMember("motionInterface.inversePose.rightLegPose.footAngle.z", &motionInterface.inversePose.rightLegPose.footAngle.z, 0.01);

    registerMember("motionInterface.abstractPose.leftArmPose.armAngle.x", &motionInterface.abstractPose.leftArmPose.armAngle.x, 0.01 * PI);
    registerMember("motionInterface.abstractPose.leftArmPose.armAngle.y", &motionInterface.abstractPose.leftArmPose.armAngle.y, 0.01 * PI);
    registerMember("motionInterface.abstractPose.leftArmPose.armAngle.z", &motionInterface.abstractPose.leftArmPose.armAngle.z, 0.01 * PI);
    registerMember("motionInterface.abstractPose.leftArmPose.armExtension", &motionInterface.abstractPose.leftArmPose.armExtension, 0.01);
    registerMember("motionInterface.abstractPose.rightArmPose.armAngle.x", &motionInterface.abstractPose.rightArmPose.armAngle.x, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightArmPose.armAngle.y", &motionInterface.abstractPose.rightArmPose.armAngle.y, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightArmPose.armAngle.z", &motionInterface.abstractPose.rightArmPose.armAngle.z, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightArmPose.armExtension", &motionInterface.abstractPose.rightArmPose.armExtension, 0.01);
    registerMember("motionInterface.abstractPose.leftLegPose.legAngle.x", &motionInterface.abstractPose.leftLegPose.legAngle.x, 0.01 * PI);
    registerMember("motionInterface.abstractPose.leftLegPose.legAngle.y", &motionInterface.abstractPose.leftLegPose.legAngle.y, 0.01 * PI);
    registerMember("motionInterface.abstractPose.leftLegPose.legAngle.z", &motionInterface.abstractPose.leftLegPose.legAngle.z, 0.01 * PI);
    registerMember("motionInterface.abstractPose.leftLegPose.legExtension", &motionInterface.abstractPose.leftLegPose.legExtension, 0.01);
    registerMember("motionInterface.abstractPose.leftLegPose.footAngle.x", &motionInterface.abstractPose.leftLegPose.footAngle.x, 0.01 * PI);
    registerMember("motionInterface.abstractPose.leftLegPose.footAngle.y", &motionInterface.abstractPose.leftLegPose.footAngle.y, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightLegPose.legAngle.x", &motionInterface.abstractPose.rightLegPose.legAngle.x, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightLegPose.legAngle.y", &motionInterface.abstractPose.rightLegPose.legAngle.y, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightLegPose.legAngle.z", &motionInterface.abstractPose.rightLegPose.legAngle.z, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightLegPose.legExtension", &motionInterface.abstractPose.rightLegPose.legExtension, 0.01);
    registerMember("motionInterface.abstractPose.rightLegPose.footAngle.x", &motionInterface.abstractPose.rightLegPose.footAngle.x, 0.01 * PI);
    registerMember("motionInterface.abstractPose.rightLegPose.footAngle.y", &motionInterface.abstractPose.rightLegPose.footAngle.y, 0.01 * PI);

    registerMember("motionInterface.pose.headPose.neck.y", &motionInterface.pose.headPose.neck.y, 0.01 * PI);
    registerMember("motionInterface.pose.headPose.neck.z", &motionInterface.pose.headPose.neck.z, 0.01 * PI);
    registerMember("motionInterface.pose.leftArmPose.shoulder.x", &motionInterface.pose.leftArmPose.shoulder.x, 0.01 * PI);
    registerMember("motionInterface.pose.leftArmPose.shoulder.y", &motionInterface.pose.leftArmPose.shoulder.y, 0.01 * PI);
    registerMember("motionInterface.pose.leftArmPose.shoulder.z", &motionInterface.pose.leftArmPose.shoulder.z, 0.01 * PI);
    registerMember("motionInterface.pose.leftArmPose.elbow.y", &motionInterface.pose.leftArmPose.elbow.y, 0.01 * PI);
    registerMember("motionInterface.pose.leftLegPose.hip.x", &motionInterface.pose.leftLegPose.hip.x, 0.01 * PI);
    registerMember("motionInterface.pose.leftLegPose.hip.y", &motionInterface.pose.leftLegPose.hip.y, 0.01 * PI);
    registerMember("motionInterface.pose.leftLegPose.hip.z", &motionInterface.pose.leftLegPose.hip.z, 0.01 * PI);
    registerMember("motionInterface.pose.leftLegPose.knee.y", &motionInterface.pose.leftLegPose.knee.y, 0.01 * PI);
    registerMember("motionInterface.pose.leftLegPose.ankle.x", &motionInterface.pose.leftLegPose.ankle.x, 0.01 * PI);
    registerMember("motionInterface.pose.leftLegPose.ankle.y", &motionInterface.pose.leftLegPose.ankle.y, 0.01 * PI);
    registerMember("motionInterface.pose.rightArmPose.shoulder.x", &motionInterface.pose.rightArmPose.shoulder.x, 0.01 * PI);
    registerMember("motionInterface.pose.rightArmPose.shoulder.y", &motionInterface.pose.rightArmPose.shoulder.y, 0.01 * PI);
    registerMember("motionInterface.pose.rightArmPose.shoulder.z", &motionInterface.pose.rightArmPose.shoulder.z, 0.01 * PI);
    registerMember("motionInterface.pose.rightArmPose.elbow.y", &motionInterface.pose.rightArmPose.elbow.y, 0.01 * PI);
    registerMember("motionInterface.pose.rightLegPose.hip.x", &motionInterface.pose.rightLegPose.hip.x, 0.01 * PI);
    registerMember("motionInterface.pose.rightLegPose.hip.y", &motionInterface.pose.rightLegPose.hip.y, 0.01 * PI);
    registerMember("motionInterface.pose.rightLegPose.hip.z", &motionInterface.pose.rightLegPose.hip.z, 0.01 * PI);
    registerMember("motionInterface.pose.rightLegPose.knee.y", &motionInterface.pose.rightLegPose.knee.y, 0.01 * PI);
    registerMember("motionInterface.pose.rightLegPose.ankle.x", &motionInterface.pose.rightLegPose.ankle.x, 0.01 * PI);
    registerMember("motionInterface.pose.rightLegPose.ankle.y", &motionInterface.pose.rightLegPose.ankle.y, 0.01 * PI);

    registerMember("haltPosition.armOffsetX", &armOffsetX, 0.01);
    registerMember("haltPosition.armOffsetY", &armOffsetY, 0.01);
    registerMember("haltPosition.armOffsetZ", &armOffsetZ, 0.01);
    registerMember("haltPosition.footOffsetX", &footOffsetX, 0.01);
    registerMember("haltPosition.footOffsetY", &footOffsetY, 0.01);
    registerMember("haltPosition.footOffsetZ", &footOffsetZ, 0.01);
    registerMember("haltPosition.footAngleX", &footAngleX, 0.01);
    registerMember("haltPosition.footAngleY", &footAngleY, 0.01);

    registerMember("haltPosition.footShiftY", &footShiftY, 0.005);

    registerMember("haltPosition.complianceTrunk", &complianceTrunk, 0.01);
    registerMember("haltPosition.complianceArm", &complianceArm, 0.01);
    registerMember("haltPosition.complianceLeg", &complianceLeg, 0.01);
    registerMember("haltPosition.complianceAnkle", &complianceAnkle, 0.01);

    registerMember("dynamicGait.gaitFrequency", &gaitFrequency, 0.1);
    registerMember("dynamicGait.gaitFrequencySlopeY", &gaitFrequencySlopeY, 0.1);
    registerMember("dynamicGait.gaitFrequencySlopeX", &gaitFrequencySlopeX, 0.01);
    registerMember("dynamicGait.accelerationBackward", &accelerationBackward, 0.01);
    registerMember("dynamicGait.accelerationForward", &accelerationForward, 0.01);
    registerMember("dynamicGait.accelerationRotational", &accelerationRotational, 0.01);
    registerMember("dynamicGait.accelerationSideward", &accelerationSideward, 0.1);
    registerMember("dynamicGait.decelerationFactor", &decelerationFactor, 0.1);
    registerMember("dynamicGait.GCVNormP", &GCVNormP, 0.1);
    registerMember("dynamicGait.pushHeight", &pushHeight, 0.01);
    registerMember("dynamicGait.pushHeightSlope", &pushHeightSlope, 0.01);
    registerMember("dynamicGait.stepHeight", &stepHeight, 0.01);
    registerMember("dynamicGait.stepHeightSlope", &stepHeightSlope, 0.01);
    registerMember("dynamicGait.swingStartTiming", &swingStartTiming, 0.01);
    registerMember("dynamicGait.swingStopTiming", &swingStopTiming, 0.01 * PI);
    registerMember("dynamicGait.armSwing", &armSwing, 0.01);
    registerMember("dynamicGait.armSwingSlope", &armSwingSlope, 0.01);
    registerMember("dynamicGait.stepLengthYSlope", &stepLengthYSlope, 0.01);
    registerMember("dynamicGait.stepLengthXPushout", &stepLengthXPushout, 0.01);
    registerMember("dynamicGait.stepLengthYPushout", &stepLengthYPushout, 0.01);
    registerMember("dynamicGait.stepLengthZPushout", &stepLengthZPushout, 0.01);
    registerMember("dynamicGait.stepLengthZSlope", &stepLengthZSlope, 0.01);
    registerMember("dynamicGait.stepLengthZVPushout", &stepLengthZVPushout, 0.05);
    registerMember("dynamicGait.stepLengthXSlopeFwd", &stepLengthXSlopeFwd, 0.01);
    registerMember("dynamicGait.stepLengthXSlopeBwd", &stepLengthXSlopeBwd, 0.01);
    registerMember("dynamicGait.lateralHipSwing", &lateralHipSwing, 0.001);
    registerMember("dynamicGait.lateralHipSwingSlope", &lateralHipSwingSlope, 0.001);
    registerMember("dynamicGait.rotationalHipSwingSlope", &rotationalHipSwingSlope, 0.01);
    registerMember("dynamicGait.firstStepDuration", &firstStepDuration, 0.01);
    registerMember("dynamicGait.firstStepHipSwing", &firstStepHipSwing, 0.01);
    registerMember("dynamicGait.stoppingVelocity", &stoppingVelocity, 0.01);
    registerMember("dynamicGait.tiltSpeedBwd", &tiltSpeedBwd, 0.01);
    registerMember("dynamicGait.tiltSpeedFwd", &tiltSpeedFwd, 0.01);
    registerMember("dynamicGait.tiltRotLean", &tiltRotLean, 0.01);
    registerMember("dynamicGait.supportSlope", &supportSlope, 0.05);
    registerMember("dynamicGait.footOffsetXAccSlope", &footOffsetXAccSlope, 0.001);
    registerMember("dynamicGait.stableSagAngleFront", &stableSagAngleFront, 0.01*PI);
    registerMember("dynamicGait.stableSagAngleSlope", &stableSagAngleSlope, 1);

    registerMember("damping.Minimum", &dampingMinimum, 0.01);
    registerMember("damping.Maximum", &dampingMaximum, 0.01);
    registerMember("damping.LateralSlope", &dampingLateralSlope, 0.01);
    registerMember("damping.SagittalSlope", &dampingSagittalSlope, 0.01);
    registerMember("damping.SlopeArmX", &dampingSlopeArmX, 0.01);
    registerMember("damping.SlopeArmY", &dampingSlopeArmY, 0.01);

    registerMember("fallProtectionRelaxAngle", &fallProtectionRelaxAngle, 1.0);
    registerMember("systemIterationTime", &systemIterationTime, 0.001);
    registerMember("fusedAngleCorrectionX", &fusedAngleCorrectionX, 0.001);
    registerMember("fusedAngleCorrectionY", &fusedAngleCorrectionY, 0.001);

    registerMember("simulation.solverIterations", &solverIterations, 1.0);
    registerMember("simulation.simulationFrequency", &simulationFrequency, 1.0);

    registerMember("dynamicGait.balanceOffset", &balanceOffset, 0.01);
}