PFC – Instalación Player-2.1.1

Procedemos exactamente igual que enla instalacion del Player-2.1.2, es decir.

Actualizamos el SO

Descargamos la vesion 2.1.1 del Player desde la pagina oficial del proyecto. Lo descomprimimos, accedemos a la carpeta creada y hacemos lo siguiente para empezar con la instalación.

$ ./configure

$ sudo make install

y nos da un problema:

lms400_cola.cc: In member function ‘int lms400_cola::Disconnect()’:
lms400_cola.cc:61: error: ‘close’ no se declaró en este ámbito
lms400_cola.cc: In member function ‘player_laser_data_t lms400_cola::ReadMeasurement()’:
lms400_cola.cc:377: error: ‘read’ no se declaró en este ámbito
lms400_cola.cc: In member function ‘int lms400_cola::SendCommand(const char*)’:
lms400_cola.cc:491: error: ‘write’ no se declaró en este ámbito
lms400_cola.cc: In member function ‘int lms400_cola::ReadResult()’:
lms400_cola.cc:504: error: ‘read’ no se declaró en este ámbito

Parece ser que no somos los únicos a los que les ha salido esto, así que después de haber hecho una pequeña investigación por Internet, llegamos a esta página que nos dice la solución.

http://sourceforge.net/tracker/?func=detail&atid=433164&aid=2152155&group_id=42445

http://playerstage.svn.sourceforge.net/viewvc/playerstage/code/player/branches/release-2-1-patches/server/drivers/laser/lms400_cola.cc?r1=6499&r2=6738

tenemos que acceder al directorio:

$ cd /home/aaronmr/Escritorio/player-2.1.1/server/drivers/laser/

y editar el fichero lms400_cola.cc e insertar la siguiente línea que la pongo en negrita para que destaque.

$ vim lms400_cola.cc

/*
Desc: Driver for the SICK LMS400 unit
Author: Nico Blodow and Radu Bogdan Rusu
Date: 7 Feb 2007
CVS: $Id: lms400_cola.cc 6499 2008-06-10 01:13:51Z thjc $
*/
#include <sys/socket.h>
#include <netdb.h>
#include <libplayercore/playercore.h>

#include “lms400_cola.h”
#include <unistd.h>

Una vez hecho esto, procedemos a realizar de nuevo los pasos anteriores, pero antes de nada limpiamos lo que haya hecho el make.

$ make clean

$ ./configure

$ sudo make

Parece que los problemas no acaban aquí, ahora nos aparece el siguiente error.

src/geometry2D.cpp: In function ‘void Geom2D::intersection_line_point(Geom2D::Point&, const Geom2D::Line&, const Geom2D::Point&)’:
src/geometry2D.cpp:154: error: ‘printf’ no se declaró en este ámbito

No he encontrado nada al respecto sobre este error, pero me huele a que va a ser porque le falta un include, exactamente el stdio.h, ya que hace uso del printf, y al no tener el include con esta librería, da error, de tal forma la agregamos como se muestra a continuación.

$ cd server/drivers/mixed/mricp/src/

$ vim geometry2D.cpp

/* Simple 2D geometric operations with points, poses, and lines.
* Tim Bailey 2004.
*/

#include “geometry2D.h”
#include <cmath>
#include <cassert>
#include <stdio.h>

Hacemos lo mismo que antes.

$ make clean

$ ./configure

$ sudo make

Y otro problema más, en esta ocasión nos dice lo siguiente.

src/map.cpp:150: error: ‘system’ no se declaró en este ámbito
src/map.cpp:153: error: ‘exit’ no se declaró en este ámbito

Así que visto lo visto no es de extrañar que también le falte el include con la librería para las funciones system y exit, que si hacemos una pequeña busqueda en internet para el que no lo sepa, se encuentran declaradas dentro de la librería stdlib.h. Localizamos el archivo a editar y añadimos la librería al principio.

$ cd server/drivers/mixed/mricp/src/

$ vim map.cpp

#include “map.h”
#include <math.h>
#include <cassert>
#include <iostream>
#include <stdlib.h>

Hacemos los mismos pasos de antes y cruzamos los dedos a ver si esta vez todo va bien.

$ make clean

$ ./configure

$ sudo make

Otro error, parece que hoy no es nuestro día de suerte, nos aparece lo siguiente.

actarrayproxy.cc: In member function ‘player_actarray_actuator_t PlayerCc::ActArrayProxy::GetActuatorData(uint32_t) const’:
actarrayproxy.cc:246: error: ‘memset’ no se declaró en este ámbito
actarrayproxy.cc: In member function ‘player_actarray_actuatorgeom_t PlayerCc::ActArrayProxy::GetActuatorGeom(uint32_t) const’:
actarrayproxy.cc:259: error: ‘memset’ no se declaró en este ámbito

Pues como antes, me huele a mi que le falta algún include y ya me está mosqueando esto un poco, lo habré descargado mal???, estaba asi en el servidor??, seré tonto o algo por el estilo??.

editamos el fichero que esta dando error que esta en.

$ cd client_libs/libplayerc++

$ vim actarrayproxy.cc

Añadimos la línea que aparece en negrita.

/*
* $Id: actarrayproxy.cc 4323 2008-01-08 03:53:38Z thjc $
*
*/

#if HAVE_CONFIG_H
#include “config.h”
#endif

#include <cassert>
#include <sstream>
#include <iomanip>
#include <vector>
#include <string.h>

#include “playerc++.h”
#include “debug.h”

Y otra vez los mismos pasos de antes, limpiamos, configuramos y compilamos, a ver que fallo nos da ahora.

Otro error más, esta vez nos aparece.

opaqueproxy.cc:97: error: ‘memcpy’ no se declaró en este ámbito

Ya cansado como está uno, ya paso de investigar a ver de que es el error, me limito a abrir el fichero y a meter el include con la libreria string.h.

$ cd client_libs/libplayerc++

$ vim opaqueproxy.cc

#include <cassert>
#include <sstream>
#include <iomanip>
#include <string.h>

#include “playerc++.h”
#include “debug.h”

Otro error mas.

speechproxy.cc: In member function ‘void PlayerCc::SpeechProxy::Say(std::string)’:
speechproxy.cc:96: error: ‘strdup’ no se declaró en este ámbito

lo mismo que antes, metemos la libreria al principio del fichero, en este caso #include “cstring”.

$ vim /home/aaronmr/Escritorio/player-2.1.1/client_libs/libplayerc++/speechproxy.cc

#include “playerc++.h”
#include “cstring”

Compilamos de nuevo y a ver el fallo que nos da ahora.

El error, bueno, los errores que nos da ahora es el siguiente:

test.cc: In function ‘int main(int, const char**)’:
test.cc:33: error: ‘strcmp’ no se declaró en este ámbito
test.cc:86: error: ‘strncmp’ no se declaró en este ámbito
test.cc:90: error: ‘strdup’ no se declaró en este ámbito
test.cc:91: error: ‘strtok’ no se declaró en este ámbito
test.cc:107: error: ‘strcmp’ no se declaró en este ámbito
test.cc:109: error: ‘strcmp’ no se declaró en este ámbito
test.cc:111: error: ‘strcmp’ no se declaró en este ámbito
test.cc:113: error: ‘strcmp’ no se declaró en este ámbito
test.cc:121: error: ‘strcmp’ no se declaró en este ámbito
test.cc:123: error: ‘strcmp’ no se declaró en este ámbito
test.cc:134: error: ‘strcmp’ no se declaró en este ámbito
test.cc:147: error: ‘strcmp’ no se declaró en este ámbito
test.cc:155: error: ‘strcmp’ no se declaró en este ámbito
test.cc:159: error: ‘strcmp’ no se declaró en este ámbito
test.cc:172: error: ‘strcmp’ no se declaró en este ámbito
test.cc:174: error: ‘strcmp’ no se declaró en este ámbito
test.cc:187: error: ‘strcmp’ no se declaró en este ámbito
test.cc:217: error: ‘strcmp’ no se declaró en este ámbito
test.cc:233: error: ‘strcmp’ no se declaró en este ámbito
test.cc:236: error: ‘strcmp’ no se declaró en este ámbito
test.cc:239: error: ‘strcmp’ no se declaró en este ámbito

Pues lo mismo de antes, editamos el archivo test.cc y añadimos la libreria #include “cstring”.

$ vim /home/aaronmr/Escritorio/player-2.1.1/client_libs/libplayerc++/test/test.cc

/***************************************************************************
* Desc: Test program for the Player C client
* Author: Andrew Howard, Richard Vaughan
* Date: 13 May 2002
# CVS: $Id: test.cc 4346 2008-02-07 02:23:00Z rtv $
**************************************************************************/
#include <unistd.h>
#include “cstring”

Compilamos de nuevo y vemos que nos da otro error.

clientgraphics.cc: In function ‘int main(int, char**)’:
clientgraphics.cc:53: error: ‘memset’ no se declaró en este ámbito

Editamos el fichero clientgraphics.cc e insertamos al principio la librería #include “cstring”.

$ vim /home/aaronmr/Escritorio/player-2.1.1/examples/libplayerc++/clientgraphics.cc

/*
* laserobstacleavoid.cc
*
* a simple obstacle avoidance demo
*
* @todo: this has been ported to libplayerc++, but not tested
*/

#include <libplayerc++/playerc++.h>
#include <iostream>

#include “args.h”
#include “cstring”

Y volvemos a compilar y vemos el siguiente fallo.

clientgraphics3d.cc: In function ‘int main(int, char**)’:
clientgraphics3d.cc:54: error: ‘memset’ no se declaró en este ámbito

Editamos el fichero clientgraphics3d.cc e insertamos la librería que falta que es #include “cstring”.

$ vim /home/aaronmr/Escritorio/player-2.1.1/examples/libplayerc++/clientgraphics3d.cc

/*
* laserobstacleavoid.cc
*
* a simple obstacle avoidance demo
*
* @todo: this has been ported to libplayerc++, but not tested
*/

#include <libplayerc++/playerc++.h>
#include <iostream>

#include “args.h”
#include “cstring”

Volvemos a compilar y nos da el siguiente error.

playerprop.cpp: In function ‘int main(int, char**)’:
playerprop.cpp:192: error: ‘strncmp’ no se declaró en este ámbito

Editamos el archivo playerprop.cpp e incluimos la librería  #include <string.h> al principio

$ vim /home/aaronmr/Escritorio/player-2.1.1/utils/playerprop/playerprop.cpp

#include <unistd.h>
#include <iostream>
#include <string.h>

Compilamos y parece que ya está todo correcto. entonces ahora hacemos

$ sudo make install

Por fin ya se ha instalado todo sin ningún problema.

Para resumir, los archivos que han sido modificados con sus respectivas modificaciones son los siguientes:

/home/aaronmr/Escritorio/player-2.1.1/server/drivers/laser/lms400_cola.cc  –> #include <unistd.h>

/home/aaronmr/Escritorio/player-2.1.1/server/drivers/mixed/mricp/src/geometry2D.cpp  –> #include <stdio.h>

/home/aaronmr/Escritorio/player-2.1.1/server/drivers/mixed/mricp/src/map.cpp –> #include <stdlib.h>

/home/aaronmr/Escritorio/player-2.1.1/client_libs/libplayerc++/actarrayproxy.cc –> #include <string.h>

/home/aaronmr/Escritorio/player-2.1.1/client_libs/libplayerc++/opaqueproxy.cc –> #include <string.h>

/home/aaronmr/Escritorio/player-2.1.1/client_libs/libplayerc++/speechproxy.cc –> #include “cstring”

/home/aaronmr/Escritorio/player-2.1.1/client_libs/libplayerc++/test/test.cc –>  #include “cstring”

/home/aaronmr/Escritorio/player-2.1.1/examples/libplayerc++/clientgraphics.cc –> #include “cstring”

/home/aaronmr/Escritorio/player-2.1.1/examples/libplayerc++/clientgraphics3d.cc –> #include “cstring”

/home/aaronmr/Escritorio/player-2.1.1/utils/playerprop/playerprop.cpp –> #include <string.h>

Si cuando ejecutemos el player nos de un error similar al siguiente:

player: error while loading shared libraries: libplayerdrivers.so.2: cannot open shared object file: No such file or directory

En este caso hay que exportar el path:

export LD_LIBRARY_PATH=/usr/local/lib

Un consejo es que se ponga en el fichero “.bashrc” para que cada vez que se habrá un terminal se ejecute automaticamente.

Gracias por vuestra atención y gracias a Jose y Sory por estar ahi aguantandome con las 1000 y 1 preguntas sobre el player :D


About admin