コード例 #1
0
ファイル: rys.cpp プロジェクト: GroupOfRobots/RobotSimulator
bool rys::isTheObstacleAhead(float distance)
{
	int state;
	simxGetIntegerSignal(clientID,positionSignal.c_str(),&state,simx_opmode_streaming);
	float linVel;
	simxGetFloatSignal(clientID,linVelSignal.c_str(),&linVel,simx_opmode_streaming);
	float orientation[3];
	simxGetObjectOrientation(clientID, cuboidHandle, -1, orientation, simx_opmode_streaming);
	if (state==1)
	{
		if (sensorUpVal>0 and sensorUpVal<distance)
			return true;
	}
	else if (state==0) 
	{
		if (orientation[1]<3*3.14/180 and orientation[1]>-3*3.14/180)
		{
			if (linVel<0) 
			{
				if (sensorBackVal>0 and sensorBackVal<distance+0.05)
					return true;
			}
			else
				if (sensorFrontVal>0 and sensorFrontVal<distance+0.05)
					return true;
		}
	}
	return false;	
}
コード例 #2
0
ファイル: main.cpp プロジェクト: maciek-slon/RobotSimulator
int MovetoPoint(float *GoalPosition, float minDistance, int clientID, int leftMotorHandle, int rightMotorHandle, int cuboidHandle)
{
	float radius=0.25;
	float axis=0.5;
	float P=0.7;
	float LinVel=0.3;
	float AngVel;

	float ObjectPosition[3];
	float ObjectOrientation[3]; //rotation about Z --> ObjectOrientation[2]
	float OrientationError;

	simxGetObjectPosition(clientID,cuboidHandle,-1,ObjectPosition,simx_opmode_oneshot_wait);
	
	float distance=sqrt(pow(ObjectPosition[0]-GoalPosition[0],2)+pow(ObjectPosition[1]-GoalPosition[1],2)+pow(ObjectPosition[2]-GoalPosition[2],2));
	auto snow = std::chrono::system_clock::now();
	auto sduration = snow.time_since_epoch();
	auto smillis = std::chrono::duration_cast<std::chrono::milliseconds>(sduration).count();
	
	while (distance>minDistance)
	{
		simxGetObjectOrientation(clientID, cuboidHandle, -1, ObjectOrientation, simx_opmode_streaming);
		simxGetObjectPosition(clientID,cuboidHandle,-1,ObjectPosition,simx_opmode_oneshot_wait);


		OrientationError=orientationError(ObjectPosition[0], ObjectPosition[1], ObjectOrientation[2], GoalPosition[0], GoalPosition[1]);
		
		AngVel=P*OrientationError;
		MoveandRotate(LinVel, AngVel, radius, axis, clientID, leftMotorHandle, rightMotorHandle);
		printf("Distance: %f Robot: %f Error: %f\n", distance, ObjectOrientation[2], OrientationError); 

		distance=sqrt(pow(ObjectPosition[0]-GoalPosition[0],2)+pow(ObjectPosition[1]-GoalPosition[1],2));
		
		//printing data to file
		
	
		
		
		auto now = std::chrono::system_clock::now();
		auto duration = now.time_since_epoch();
		auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
		
		//std::cout << millis-smillis << "\t" << ObjectPosition[0] << "\t" << ObjectPosition[1] << std::endl;
		
		
	}
	MoveandRotate(0, 0, radius, axis, clientID, leftMotorHandle, rightMotorHandle);
}
コード例 #3
0
ファイル: RobotVREP.cpp プロジェクト: osilvam/RobotLib
vector < double > RobotVREP::getObjectOrientation(Object * object, int relativeTo, simxInt operationMode)
{
	int uniqueId = object->getUniqueObjectId();
	int vrepHandlerVectorPosition = objectIdToVrepHandler_map.at(uniqueId);
	int * handler = VrepHandlerVector.at(vrepHandlerVectorPosition);
	float * ori = new float[3];

	int error = simxGetObjectOrientation(clientID,*handler, relativeTo, ori, operationMode);
	if(error != 0) vrep_error << "simxGetObjectOrientation - " << *handler << " : "<< error << endl;

	vector < double > orientation;

	orientation.push_back((double)ori[0]);
	orientation.push_back((double)ori[1]);
	orientation.push_back((double)ori[2]);

	delete[] ori;

	return orientation;
}