Exemple #1
0
void robot::setLocalRespondableMaskCummulative_alternate(int objHandle,bool bitSet)
{
	if (simGetObjectType(objHandle)==sim_object_shape_type)
	{
		int p;
		simGetObjectIntParameter(objHandle,3004,&p);
		if (p!=0)
		{
			if (bitSet)
				simSetObjectIntParameter(objHandle,3019,0xff01);
			else
				simSetObjectIntParameter(objHandle,3019,0xff02);
			bitSet=!bitSet;
		}
	}
	int index=0;
	while (true)
	{
		int childHandle=simGetObjectChild(objHandle,index++);
		if (childHandle==-1)
			break;
		setLocalRespondableMaskCummulative_alternate(childHandle,bitSet);
	}
}
Exemple #2
0
CSubscriberData::CSubscriberData(ros::NodeHandle* node,const char* _topicName,int queueSize,int _streamCmd,int _auxInt1,int _auxInt2,const char* _auxString,int _callbackTag_before,int _callbackTag_after,image_transport::ImageTransport* images_streamer[1],int& imgStreamerCnt)
{
	cmdID=_streamCmd;
	auxInt1=_auxInt1;
	auxInt2=_auxInt2;
	auxStr=_auxString;
	callbackTag_before=_callbackTag_before;
	callbackTag_after=_callbackTag_after;
	topicName=_topicName;
	isValid=false;

	if (cmdID==simros_strmcmd_add_status_bar_message)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::addStatusbarMessageCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_auxiliary_console_print)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::auxiliaryConsolePrintCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_clear_float_signal)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::clearFloatSignalCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_clear_integer_signal)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::clearIntegerSignalCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_clear_string_signal)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::clearStringSignalCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_set_array_parameter)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setArrayParameterCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_set_boolean_parameter)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setBooleanParameterCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_set_floating_parameter)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setFloatingParameterCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_set_integer_parameter)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setIntegerParameterCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_set_float_signal)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setFloatSignalCallback,this);
		isValid=true;
	}
	if (cmdID==simros_strmcmd_set_integer_signal)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setIntegerSignalCallback,this);
		isValid=true;
	}
	if (cmdID==simros_strmcmd_set_string_signal)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setStringSignalCallback,this);
		isValid=true;
	}
	if (cmdID==simros_strmcmd_append_string_signal)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::appendStringSignalCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_set_joint_force)
	{
		if (simGetObjectType(auxInt1)==sim_object_joint_type)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setJointForceCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_joint_position)
	{
		if (simGetObjectType(auxInt1)==sim_object_joint_type)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setJointPositionCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_joint_target_position)
	{
		if (simGetObjectType(auxInt1)==sim_object_joint_type)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setJointTargetPositionCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_joint_target_velocity)
	{
		if (simGetObjectType(auxInt1)==sim_object_joint_type)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setJointTargetVelocityCallback,this);
			isValid=true;
		}
	}
	if (cmdID==simros_strmcmd_set_twist_command)
	{
        	generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setTwistCommandCallback,this);
        	isValid=true;
	}
	if (cmdID==simros_strmcmd_set_tracks_vel_command)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setTracksVelCommandCallback,this);
        	isValid=true;
	}
	if (cmdID==simros_strmcmd_set_object_float_parameter)
	{
		if (simGetObjectType(auxInt1)!=-1)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setObjectFloatParameterCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_object_int_parameter)
	{
		if (simGetObjectType(auxInt1)!=-1)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setObjectIntParameterCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_object_pose)
	{
		if ( (simGetObjectType(auxInt1)!=-1)&&( (simGetObjectType(auxInt2)!=-1)||(auxInt2==sim_handle_parent)||(auxInt2==-1) ) )
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setObjectPoseCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_object_position)
	{
		if ( (simGetObjectType(auxInt1)!=-1)&&( (simGetObjectType(auxInt2)!=-1)||(auxInt2==sim_handle_parent)||(auxInt2==-1) ) )
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setObjectPositionCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_object_quaternion)
	{
		if ( (simGetObjectType(auxInt1)!=-1)&&( (simGetObjectType(auxInt2)!=-1)||(auxInt2==sim_handle_parent)||(auxInt2==-1) ) )
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setObjectQuaternionCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_object_selection)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setObjectSelectionCallback,this);
		isValid=true;
	}

	if (cmdID==simros_strmcmd_set_ui_button_label)
	{
		if (simGetUIButtonProperty(auxInt1,auxInt2)!=-1)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setUIButtonLabelCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_ui_button_property)
	{
		if (simGetUIButtonProperty(auxInt1,auxInt2)!=-1)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setUIButtonPropertyCallback,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_ui_slider)
	{
		if (simGetUIButtonProperty(auxInt1,auxInt2)!=-1)
		{
			generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setUISlider,this);
			isValid=true;
		}
	}

	if (cmdID==simros_strmcmd_set_vision_sensor_image)
	{
		if (simGetObjectType(auxInt1)==sim_object_visionsensor_type)
		{
			if (imgStreamerCnt==0)
				images_streamer[0]= new image_transport::ImageTransport(*node);
			imageSubscriber=images_streamer[0]->subscribe(topicName,queueSize,&CSubscriberData::setVisionSensorImageCallback,this);
			imgStreamerCnt++;
			isValid=true;
		}
	}

    if (cmdID==simros_strmcmd_set_joy_sensor)
    {
        generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setJoySensorCallback,this);
        isValid=true;
    }
	
	if (cmdID==simros_strmcmd_set_joint_state)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setJointStateCallback,this);
		isValid=true;
	}
/*	
	if (cmdID==simros_strmcmd_set_joint_trajectory)
	{
		generalSubscriber=node->subscribe(topicName,queueSize,&CSubscriberData::setJointTrajectoryCallback,this);
		isValid=true;
	}
*/
}
void LUA_GRAB_CALLBACK(SLuaCallBack* p)
{ // the callback function of the new Lua command
	int retVal=0; // Means error

	if (p->inputArgCount>1)
	{ // Ok, we have at least 2 input argument
		if ( (p->inputArgTypeAndSize[0*2+0]==sim_lua_arg_int)&&(p->inputArgTypeAndSize[1*2+0]==sim_lua_arg_int) )
		{ // Ok, we have (at least) 2 ints as argument
			if ( (countCaptureDevices()>p->inputInt[0])&&(p->inputInt[0]>=0)&&(p->inputInt[0]<4) )
			{
				if (startCountPerDevice[p->inputInt[0]]>0)
				{
					if (openCaptureDevices[p->inputInt[0]])
					{
						int errorModeSaved;
						simGetIntegerParameter(sim_intparam_error_report_mode,&errorModeSaved);
						simSetIntegerParameter(sim_intparam_error_report_mode,sim_api_errormessage_ignore);
						int t=simGetObjectType(p->inputInt[1]);
						simSetIntegerParameter(sim_intparam_error_report_mode,errorModeSaved); // restore previous settings
						if (t==sim_object_visionsensor_type)
						{
							int r[2]={0,0};
							simGetVisionSensorResolution(p->inputInt[1],r);
							if ( (r[0]==captureInfo[p->inputInt[0]].mWidth)&&(r[1]==captureInfo[p->inputInt[0]].mHeight) )
							{
								float* buff=new float[r[0]*r[1]*3];

								for (int i=0;i<r[1];i++)
								{
									int y0=r[0]*i;
									int y1=r[0]*(r[1]-i-1);
									for (int j=0;j<r[0];j++)
									{ // Info is provided as BGR!! (and not RGB)
										buff[3*(y0+j)+0]=float(((BYTE*)captureInfo[p->inputInt[0]].mTargetBuf)[4*(y1+j)+2])/255.0f;
										buff[3*(y0+j)+1]=float(((BYTE*)captureInfo[p->inputInt[0]].mTargetBuf)[4*(y1+j)+1])/255.0f;
										buff[3*(y0+j)+2]=float(((BYTE*)captureInfo[p->inputInt[0]].mTargetBuf)[4*(y1+j)+0])/255.0f;
									}
								}
								simSetVisionSensorImage(p->inputInt[1],buff);
								delete[] buff;
								retVal=1;								
							}
							else
								simSetLastError(LUA_GRAB,"Resolutions do not match."); // output an error
						}
						else
							simSetLastError(LUA_GRAB,"Invalid vision sensor handle."); // output an error
					}
					else
						simSetLastError(LUA_GRAB,"Resolution was not set."); // output an error
				}
				else
					simSetLastError(LUA_GRAB,"simExtCamStart was not called."); // output an error
			}
			else
				simSetLastError(LUA_GRAB,"Wrong index."); // output an error
		}
		else
			simSetLastError(LUA_GRAB,"Wrong argument type/size."); // output an error
	}
	else
		simSetLastError(LUA_GRAB,"Not enough arguments."); // output an error

	// Now we prepare the return value:
	p->outputArgCount=1; // 1 return value
	p->outputArgTypeAndSize=(simInt*)simCreateBuffer(p->outputArgCount*2*sizeof(simInt)); // x return values takes x*2 simInt for the type and size buffer
	p->outputArgTypeAndSize[2*0+0]=sim_lua_arg_int;	// The return value is an int
	p->outputArgTypeAndSize[2*0+1]=1;				// Not used (table size if the return value was a table)
	p->outputInt=(simInt*)simCreateBuffer(1*sizeof(retVal)); // 1 int return value
	p->outputInt[0]=retVal; // This is the int value we want to return
}