hector
User
 Junior Boarder
| Posts: 6 |   | Karma: 1
|
Dudas con el Pioneer 3DX real y simulado - 2010/07/09 14:40
Hola a todos:
Me gustaría, si es posible, que me ayudases a entender mejor el comportamiento del MRS en el siguiente caso:
En mi proyecto de fin de carrera, tengo que utilizar el robot Pioneer 3DX. Para ello primero he creado un servicio que simula el robot de forma similar al tutorial "Robotics Tutorial 4 - Drive-By-Wire" añadiendo algunos servicios mas, como el GPS Simulado, Sonar Simulado creados por Raúl. Y ahora querría trasladar lo que he hecho en el simulador, al robot Pioneer real.
Con lo que tendria que utilizar los servicios de Arcos (ArcosBumper, ArcosDrive, ArcosCore) y el servicio Arcos Sonar (de Raúl). Para ello he tomado como ejemplo, el servicio "Explorer" que viene en la distribución del RSD (RDS Local Code Location Path: samplesMiscExplorer).
Pero he visto que en ningún momento se subscribe a dichos servicios, y sí a las servicios genericos:
| Code: |
using bumper = Microsoft.Robotics.Services.ContactSensor.Proxy;
using drive = Microsoft.Robotics.Services.Drive.Proxy;
using sicklrf = Microsoft.Robotics.Services.Sensors.SickLRF.Proxy;
|
Por lo que tampoco se añade ninguna referencia de Arcos.
Pero en el manifiest de dicho servicio, si se hace referencia de estos servicios:
| Code: |
<Manifest
xmlns:arcosdrive="http://schemas.microsoft.com/robotics/2006/06/arcosdrive.user.html"
xmlns:explorer="http://schemas.microsoft.com/robotics/2006/07/explorer.user.html"
xmlns:arcosbumper="http://schemas.microsoft.com/robotics/2006/06/arcosbumper.user.html" xmlns:this="urn:uuid:8312abfc-c10e-4274-94fd-b0fde9c8cd84"
xmlns:arcoscore="http://schemas.microsoft.com/xw/2005/12/arcoscore.user.html"
xmlns:dssp="http://schemas.microsoft.com/xw/2004/10/dssp.html" xmlns="http://schemas.microsoft.com/xw/2004/10/manifest.html">
<!--
Starts the Explorer orchestration with partner services for MobilesRobots Pioneer 3DX.
-->
<CreateServiceList>
<ServiceRecordType>
<dssp:Contract>http://schemas.microsoft.com/robotics/2006/06/arcosbumper.user.html</dssp:Contract>
<dssp:PartnerList>
<dssp:Partner>
<dssp:Contract>http://schemas.microsoft.com/xw/2005/12/arcoscore.user.html</dssp:Contract>
<dssp:PartnerList />
<dssp:Name>arcosbumper:Arcos</dssp:Name>
<dssp:ServiceName>this:ArcosCore</dssp:ServiceName>
</dssp:Partner>
</dssp:PartnerList>
<Name>this:arcosbumper</Name>
</ServiceRecordType>
<ServiceRecordType>
<dssp:Contract>http://schemas.microsoft.com/robotics/2006/06/arcosdrive.user.html</dssp:Contract>
<dssp:PartnerList>
<dssp:Partner>
<dssp:Contract>http://schemas.microsoft.com/xw/2005/12/arcoscore.user.html</dssp:Contract>
<dssp:PartnerList />
<dssp:Name>arcosdrive:Arcos</dssp:Name>
<dssp:ServiceName>this:ArcosCore</dssp:ServiceName>
</dssp:Partner>
</dssp:PartnerList>
<Name>this:arcosdrive</Name>
</ServiceRecordType>
<ServiceRecordType>
<dssp:Contract>http://schemas.microsoft.com/robotics/2006/07/explorer.user.html</dssp:Contract>
<dssp:PartnerList>
<dssp:Partner>
<dssp:Contract>http://schemas.microsoft.com/2006/06/contactsensor.html</dssp:Contract>
<dssp:PartnerList />
<dssp:Name>explorer:Bumper</dssp:Name>
<dssp:ServiceName>this:arcosbumper</dssp:ServiceName>
</dssp:Partner>
<dssp:Partner>
<dssp:Contract>http://schemas.microsoft.com/robotics/2006/05/drive.html</dssp:Contract>
<dssp:PartnerList />
<dssp:Name>explorer:Drive</dssp:Name>
<dssp:ServiceName>this:arcosdrive</dssp:ServiceName>
</dssp:Partner>
</dssp:PartnerList>
<Name>this:explorer</Name>
</ServiceRecordType>
<ServiceRecordType>
<dssp:Contract>http://schemas.microsoft.com/xw/2005/12/arcoscore.user.html</dssp:Contract>
<dssp:PartnerList />
<Name>this:ArcosCore</Name>
</ServiceRecordType>
</CreateServiceList>
</Manifest>
|
Quizás parecerá absurda la duda, pero es que no entiendo por qué se hace de esta forma. Ya que mi idea era usar estos servicios directamente en el proyecto del VS. Es decir, agrerar referencias al proyecto de los componentes de Arcos y utilizarlos.
Luego también el proyecto del VS que simula el Pioneer, utilizo operaciones del Drive, que no está o no son iguales que en el ArcosDrive, un ejemplo:
En la simulación tengo:
| Code: |
drive = Microsoft.Robotics.Services.Drive.Proxy;
...
drive.DriveDistanceRequest re = new drive.DriveDistanceRequest();
re.Distance = 10.0;
re.Power = 1.0;
yield return Arbiter.Choice(
_drivePort.SetDrivePower(request),
delegate(DefaultUpdateResponseType response) { },
delegate(Fault fault)
{
LogError(null, "Unable to stop", fault);
}
);
...
|
En este caso, para movernos 10 metros, por ejemplo, debemos rellenar los atributos Distance y Power del objeto DriveDistanceRequest.
Pero segun el servicio de Arcos, según lo veo yo, se realiza de otra forma:
| Code: |
using arcosdrive = Microsoft.Robotics.Services.MobileRobots.ArcosDrive.Proxy;
...
arcosdrive.TranslateRequest request = new arcosdrive.TranslateRequest();
request.Distance = 10;
_drivePort.Translate(request);
|
En este caso, el objeto TranslateRequest solo tiene un atributo, Distance, y además es un objeto diferente al caso anterior.
Mi pregunta es por lo tanto, si el codigo realizado en la simulación, luego me serviria para utilizarlo con el robot real. Y si no se puediese, que cambios tendría que realizar, con respecto a la simulación.
Espero que mas o menos me haya explicado bien, y se entienda . Y muchisimas gracias por vuestra respuesta, que me será de mucho ayuda y utilizada.
Saludos.
Héctor.
|