From: kamil d. <kdr...@gm...> - 2009-07-15 10:22:51
|
Hi, I have been developing a player plugin driver for my robot and I was testing it with Playerv and it works fine, but now i want to create my own client to implement some intelligence algorithms. The result is that my client gets block when it tries to create instance of position2d. This is my client: #include <iostream> #include <libplayerc++/playerc++.h> using namespace PlayerCc; int main(int argc, char *argv[]) { const char *host = "localhost"; int port = 6665; PlayerClient *robot_; Position2dProxy *positionProxy_; std::cout << "Driver: Connecting to player on host " << host << ", port " << port << std::endl; // player throws exceptions on creation if we fail try { std::cout << "Driver: Creating Robot proxy...................." ; robot_ = new PlayerClient( host, port ); std::cout << "Ready" << std::endl; std::cout << "Driver: Creating Position2d proxy..............." ; positionProxy_ = new Position2dProxy( robot_, 0 ); std::cout << "Ready" << std::endl; std::cout << "Driver: Getting data from driver................" ; robot_->Read(); std::cout << "Ready" << std::endl; std::cout << "Driver: Getting motor status from driver........" ; positionProxy_->SetMotorEnable( true ); std::cout << "Ready" << std::endl; } catch ( const PlayerError & e ) { std::cout << "Driver: " << e; } catch (...) { std::cout << "Driver: Unknown error"; } // read from the proxies robot_->Read(); double initX = positionProxy_->GetXPos(); //double initY = pp.GetYPos(); double turnrate = 0; double speed = 0.100; for(;;) { // read from the proxies robot_->Read(); std::cout << "X = " << positionProxy_->GetXPos() << " :: Y = " << positionProxy_->GetYPos() << std::endl; if (initX > positionProxy_->GetXPos() + 1) speed = 0.100; if (initX < positionProxy_->GetXPos()) speed = -0.100; //turnrate = dtor(-20); // turn 20 degrees per second //turnrate = dtor(20); //speed = 0; //speed = 0.100; // command the motors positionProxy_->SetSpeed(speed, turnrate); } } I get the following output before it get freeze: Driver: Connecting to player on host localhost, port 6665 Driver: Creating Robot proxy....................Ready Any Idea of what can be hapening? Regards, Kamil |
From: Toby C. <tco...@pl...> - 2009-07-15 11:41:24
|
Any output from the server side? Toby 2009/7/15 kamil ducheckev <kdr...@gm...> > Hi, > > I have been developing a player plugin driver for my robot and I was > testing it with Playerv and it works fine, but now i want to create my own > client to implement some intelligence algorithms. The result is that my > client gets block when it tries to create instance of position2d. > > This is my client: > > #include <iostream> > #include <libplayerc++/playerc++.h> > > using namespace PlayerCc; > > int main(int argc, char *argv[]) > { > const char *host = "localhost"; > int port = 6665; > > PlayerClient *robot_; > Position2dProxy *positionProxy_; > > std::cout << "Driver: Connecting to player on host " > << host << ", port " << port << std::endl; > > // player throws exceptions on creation if we fail > try > { > std::cout << "Driver: Creating Robot proxy...................." ; > robot_ = new PlayerClient( host, port ); > std::cout << "Ready" << std::endl; > > std::cout << "Driver: Creating Position2d proxy..............." ; > positionProxy_ = new Position2dProxy( robot_, 0 ); > std::cout << "Ready" << std::endl; > > std::cout << "Driver: Getting data from driver................" ; > robot_->Read(); > std::cout << "Ready" << std::endl; > > std::cout << "Driver: Getting motor status from driver........" ; > positionProxy_->SetMotorEnable( true ); > std::cout << "Ready" << std::endl; > } > catch ( const PlayerError & e ) > { > std::cout << "Driver: " << e; > } > catch (...) > { > std::cout << "Driver: Unknown error"; > } > > // read from the proxies > robot_->Read(); > > double initX = positionProxy_->GetXPos(); > //double initY = pp.GetYPos(); > > double turnrate = 0; > double speed = 0.100; > > for(;;) > { > // read from the proxies > robot_->Read(); > > std::cout << "X = " << positionProxy_->GetXPos() << > " :: Y = " << positionProxy_->GetYPos() << std::endl; > > if (initX > positionProxy_->GetXPos() + 1) > speed = 0.100; > if (initX < positionProxy_->GetXPos()) > speed = -0.100; > > //turnrate = dtor(-20); // turn 20 degrees per second > //turnrate = dtor(20); > > //speed = 0; > //speed = 0.100; > > // command the motors > positionProxy_->SetSpeed(speed, turnrate); > } > } > > I get the following output before it get freeze: > > Driver: Connecting to player on host localhost, port 6665 > Driver: Creating Robot proxy....................Ready > > Any Idea of what can be hapening? > > Regards, > Kamil > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > -- This email is intended for the addressee only and may contain privileged and/or confidential information |
From: kamil d. <kdr...@gm...> - 2009-07-15 12:00:27
|
Yes, I get all the messeges from the setup function but none from the main. //////////////////////////////////////////////////////////////////////////////// // Constructor. Retrieve options from the configuration file and do any // pre-Setup() setup. MotorI2C::MotorI2C(ConfigFile* cf, int section) : Driver(cf, section) { // Inicializing memories memset(&my_pos1d, 0, sizeof(my_pos1d )); memset(&my_pos2d, 0, sizeof(my_pos2d )); /// This is composed by: /// /// - Registring my interface Position1D for the elevator if (cf->ReadDeviceAddr(&my_pos1d.addr, section,"provides", PLAYER_POSITION1D_CODE, -1, NULL) == 0) { if (AddInterface(my_pos1d.addr) != 0){ this->SetError(-1); return; } else my_pos1d.enable = true; } /// - Registring my interface Position2D for the odometry if (cf->ReadDeviceAddr(&my_pos2d.addr, section,"provides", PLAYER_POSITION2D_CODE, -1, NULL) == 0) { if (AddInterface(my_pos2d.addr) != 0){ this->SetError(-1); return; } else my_pos2d.enable = true; } /// Getting the parameters from the configuration file port = cf->ReadString(section, "port", "/dev/ttyUSB0"); my_pos2d.rightDriverAddr = /*static_cast<uint8_t>*/(cf->ReadInt(section, "right_addr", DEFAULT_RIGHT_ADDR)); my_pos2d.leftDriverAddr = /*static_cast<uint8_t>*/(cf->ReadInt(section, "left_addr" , DEFAULT_LEFT_ADDR )); } //////////////////////////////////////////////////////////////////////////////// // Set up the device. Return 0 if things go well, and -1 otherwise. int MotorI2C::Setup() { #ifdef _DEBUG_START_UP_ PLAYER_MSG1(1,"MotorI2C driver initialising... Opening %s", port); #endif // Here you do whatever else is necessary to setup the device, like open and // configure a serial port. unsigned int speed = B19200; char comm_options[] = "8N2"; usbi2c = new SerialComm((char*)port, speed, comm_options); ///////////////////////////////////////////////////////////////////////////////////////// /// Configurando el modulo de odometria position2D if (my_pos2d.enable) { #ifdef _DEBUG_START_UP_ puts("\n ======== Configuring Odometry Module ========="); #endif odometry = new Odometry(my_pos2d.rightDriverAddr, my_pos2d.leftDriverAddr, usbi2c, &my_pos2d); odometry->updateEncoder(); // TEMPORAL A FALTA DE COMPROBAR EL FUNCIONAMIENTO. if (!odometry->enabled()) // One of the motors, at least, is not conected { PLAYER_ERROR("Error starting the odometry module."); this->SetError(-1); return (-1); } #ifdef _DEBUG_START_UP_ PLAYER_MSG0(0,"\nMotorI2C driver ready.\n"); #endif #ifdef _DEBUG_ODOMETRY_ PLAYER_MSG0(2, " ========== Odometry ========== "); #endif odometry->updateEncoder(); PublishData_POS2D(); } // Start the device thread; spawns a new thread and executes // MotorI2C::Main(), which contains the main loop for the driver. this->StartThread(); return(0); } //////////////////////////////////////////////////////////////////////////////// // Main function for device thread void MotorI2C::Main() { // The main loop; interact with the device here for(;;) { //system("clear"); // Test if we are supposed to cancel pthread_testcancel(); // Process incoming messages. TSevenDriver::ProcessMessage() is // called on each message. Incoming data and commands are stored in // the class. ProcessMessages(); /// Odometria ////////////////////////////////////////////// if (odometry->enabled()) { #ifdef _DEBUG_ODOMETRY_ PLAYER_MSG0(2, " ========== Odometry ========== "); #endif odometry->updateEncoder(); PublishData_POS2D(); } } return; } 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> > > Any output from the server side? > > Toby > > 2009/7/15 kamil ducheckev <kdr...@gm...> > >> Hi, >> >> I have been developing a player plugin driver for my robot and I was >> testing it with Playerv and it works fine, but now i want to create my own >> client to implement some intelligence algorithms. The result is that my >> client gets block when it tries to create instance of position2d. >> >> This is my client: >> >> #include <iostream> >> #include <libplayerc++/playerc++.h> >> >> using namespace PlayerCc; >> >> int main(int argc, char *argv[]) >> { >> const char *host = "localhost"; >> int port = 6665; >> >> PlayerClient *robot_; >> Position2dProxy *positionProxy_; >> >> std::cout << "Driver: Connecting to player on host " >> << host << ", port " << port << std::endl; >> >> // player throws exceptions on creation if we fail >> try >> { >> std::cout << "Driver: Creating Robot proxy...................." ; >> robot_ = new PlayerClient( host, port ); >> std::cout << "Ready" << std::endl; >> >> std::cout << "Driver: Creating Position2d proxy..............." ; >> positionProxy_ = new Position2dProxy( robot_, 0 ); >> std::cout << "Ready" << std::endl; >> >> std::cout << "Driver: Getting data from driver................" ; >> robot_->Read(); >> std::cout << "Ready" << std::endl; >> >> std::cout << "Driver: Getting motor status from driver........" ; >> positionProxy_->SetMotorEnable( true ); >> std::cout << "Ready" << std::endl; >> } >> catch ( const PlayerError & e ) >> { >> std::cout << "Driver: " << e; >> } >> catch (...) >> { >> std::cout << "Driver: Unknown error"; >> } >> >> // read from the proxies >> robot_->Read(); >> >> double initX = positionProxy_->GetXPos(); >> //double initY = pp.GetYPos(); >> >> double turnrate = 0; >> double speed = 0.100; >> >> for(;;) >> { >> // read from the proxies >> robot_->Read(); >> >> std::cout << "X = " << positionProxy_->GetXPos() << >> " :: Y = " << positionProxy_->GetYPos() << std::endl; >> >> if (initX > positionProxy_->GetXPos() + 1) >> speed = 0.100; >> if (initX < positionProxy_->GetXPos()) >> speed = -0.100; >> >> //turnrate = dtor(-20); // turn 20 degrees per second >> //turnrate = dtor(20); >> >> //speed = 0; >> //speed = 0.100; >> >> // command the motors >> positionProxy_->SetSpeed(speed, turnrate); >> } >> } >> >> I get the following output before it get freeze: >> >> Driver: Connecting to player on host localhost, port 6665 >> Driver: Creating Robot proxy....................Ready >> >> Any Idea of what can be hapening? >> >> Regards, >> Kamil >> >> >> ------------------------------------------------------------------------------ >> Enter the BlackBerry Developer Challenge >> This is your chance to win up to $100,000 in prizes! For a limited time, >> vendors submitting new applications to BlackBerry App World(TM) will have >> the opportunity to enter the BlackBerry Developer Challenge. See full >> prize >> details at: http://p.sf.net/sfu/Challenge >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> > > > -- > This email is intended for the addressee only and may contain privileged > and/or confidential information > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > |
From: Toby C. <tco...@pl...> - 2009-07-15 12:06:49
|
what version of player are you using? 2009/7/15 kamil ducheckev <kdr...@gm...> > Yes, I get all the messeges from the setup function but none from the main. > > > //////////////////////////////////////////////////////////////////////////////// > // Constructor. Retrieve options from the configuration file and do any > // pre-Setup() setup. > MotorI2C::MotorI2C(ConfigFile* cf, int section) : Driver(cf, section) > { > // Inicializing memories > memset(&my_pos1d, 0, sizeof(my_pos1d )); > memset(&my_pos2d, 0, sizeof(my_pos2d )); > > /// This is composed by: > /// > /// - Registring my interface Position1D for the elevator > if (cf->ReadDeviceAddr(&my_pos1d.addr, section,"provides", > PLAYER_POSITION1D_CODE, -1, NULL) == 0) > { > if (AddInterface(my_pos1d.addr) != 0){ > this->SetError(-1); > return; > } > else > my_pos1d.enable = true; > } > > /// - Registring my interface Position2D for the odometry > if (cf->ReadDeviceAddr(&my_pos2d.addr, section,"provides", > PLAYER_POSITION2D_CODE, -1, NULL) == 0) > { > if (AddInterface(my_pos2d.addr) != 0){ > this->SetError(-1); > return; > } > else > my_pos2d.enable = true; > } > > /// Getting the parameters from the configuration file > port = cf->ReadString(section, "port", "/dev/ttyUSB0"); > my_pos2d.rightDriverAddr = > /*static_cast<uint8_t>*/(cf->ReadInt(section, "right_addr", > DEFAULT_RIGHT_ADDR)); > my_pos2d.leftDriverAddr = > /*static_cast<uint8_t>*/(cf->ReadInt(section, "left_addr" , > DEFAULT_LEFT_ADDR )); > > } > > > //////////////////////////////////////////////////////////////////////////////// > // Set up the device. Return 0 if things go well, and -1 otherwise. > int MotorI2C::Setup() > { > #ifdef _DEBUG_START_UP_ > PLAYER_MSG1(1,"MotorI2C driver initialising... Opening %s", port); > #endif > > // Here you do whatever else is necessary to setup the device, like open > and > // configure a serial port. > unsigned int speed = B19200; > char comm_options[] = "8N2"; > > usbi2c = new SerialComm((char*)port, speed, comm_options); > > > ///////////////////////////////////////////////////////////////////////////////////////// > /// Configurando el modulo de odometria position2D > if (my_pos2d.enable) > { > #ifdef _DEBUG_START_UP_ > puts("\n ======== Configuring Odometry Module ========="); > #endif > odometry = new Odometry(my_pos2d.rightDriverAddr, > my_pos2d.leftDriverAddr, usbi2c, &my_pos2d); > odometry->updateEncoder(); > > // TEMPORAL A FALTA DE COMPROBAR EL FUNCIONAMIENTO. > > if (!odometry->enabled()) // One of the motors, at least, is not > conected > { > PLAYER_ERROR("Error starting the odometry module."); > this->SetError(-1); > return (-1); > } > #ifdef _DEBUG_START_UP_ > PLAYER_MSG0(0,"\nMotorI2C driver ready.\n"); > #endif > > #ifdef _DEBUG_ODOMETRY_ > PLAYER_MSG0(2, " ========== Odometry ========== "); > #endif > odometry->updateEncoder(); > PublishData_POS2D(); > } > > // Start the device thread; spawns a new thread and executes > // MotorI2C::Main(), which contains the main loop for the driver. > this->StartThread(); > > return(0); > } > > > //////////////////////////////////////////////////////////////////////////////// > // Main function for device thread > void MotorI2C::Main() > { > > // The main loop; interact with the device here > for(;;) > { > //system("clear"); > > // Test if we are supposed to cancel > pthread_testcancel(); > > // Process incoming messages. TSevenDriver::ProcessMessage() is > // called on each message. Incoming data and commands are stored > in > // the class. > ProcessMessages(); > > /// Odometria ////////////////////////////////////////////// > if (odometry->enabled()) > { > #ifdef _DEBUG_ODOMETRY_ > PLAYER_MSG0(2, " ========== Odometry ========== "); > #endif > odometry->updateEncoder(); > PublishData_POS2D(); > } > } > return; > } > > 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> > > > > Any output from the server side? >> >> Toby >> >> 2009/7/15 kamil ducheckev <kdr...@gm...> >> >>> Hi, >>> >>> I have been developing a player plugin driver for my robot and I was >>> testing it with Playerv and it works fine, but now i want to create my own >>> client to implement some intelligence algorithms. The result is that my >>> client gets block when it tries to create instance of position2d. >>> >>> This is my client: >>> >>> #include <iostream> >>> #include <libplayerc++/playerc++.h> >>> >>> using namespace PlayerCc; >>> >>> int main(int argc, char *argv[]) >>> { >>> const char *host = "localhost"; >>> int port = 6665; >>> >>> PlayerClient *robot_; >>> Position2dProxy *positionProxy_; >>> >>> std::cout << "Driver: Connecting to player on host " >>> << host << ", port " << port << std::endl; >>> >>> // player throws exceptions on creation if we fail >>> try >>> { >>> std::cout << "Driver: Creating Robot proxy...................." ; >>> robot_ = new PlayerClient( host, port ); >>> std::cout << "Ready" << std::endl; >>> >>> std::cout << "Driver: Creating Position2d proxy..............." ; >>> positionProxy_ = new Position2dProxy( robot_, 0 ); >>> std::cout << "Ready" << std::endl; >>> >>> std::cout << "Driver: Getting data from driver................" ; >>> robot_->Read(); >>> std::cout << "Ready" << std::endl; >>> >>> std::cout << "Driver: Getting motor status from driver........" ; >>> positionProxy_->SetMotorEnable( true ); >>> std::cout << "Ready" << std::endl; >>> } >>> catch ( const PlayerError & e ) >>> { >>> std::cout << "Driver: " << e; >>> } >>> catch (...) >>> { >>> std::cout << "Driver: Unknown error"; >>> } >>> >>> // read from the proxies >>> robot_->Read(); >>> >>> double initX = positionProxy_->GetXPos(); >>> //double initY = pp.GetYPos(); >>> >>> double turnrate = 0; >>> double speed = 0.100; >>> >>> for(;;) >>> { >>> // read from the proxies >>> robot_->Read(); >>> >>> std::cout << "X = " << positionProxy_->GetXPos() << >>> " :: Y = " << positionProxy_->GetYPos() << std::endl; >>> >>> if (initX > positionProxy_->GetXPos() + 1) >>> speed = 0.100; >>> if (initX < positionProxy_->GetXPos()) >>> speed = -0.100; >>> >>> //turnrate = dtor(-20); // turn 20 degrees per second >>> //turnrate = dtor(20); >>> >>> //speed = 0; >>> //speed = 0.100; >>> >>> // command the motors >>> positionProxy_->SetSpeed(speed, turnrate); >>> } >>> } >>> >>> I get the following output before it get freeze: >>> >>> Driver: Connecting to player on host localhost, port 6665 >>> Driver: Creating Robot proxy....................Ready >>> >>> Any Idea of what can be hapening? >>> >>> Regards, >>> Kamil >>> >>> >>> ------------------------------------------------------------------------------ >>> Enter the BlackBerry Developer Challenge >>> This is your chance to win up to $100,000 in prizes! For a limited time, >>> vendors submitting new applications to BlackBerry App World(TM) will have >>> the opportunity to enter the BlackBerry Developer Challenge. See full >>> prize >>> details at: http://p.sf.net/sfu/Challenge >>> _______________________________________________ >>> Playerstage-users mailing list >>> Pla...@li... >>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>> >>> >> >> >> -- >> This email is intended for the addressee only and may contain privileged >> and/or confidential information >> >> >> ------------------------------------------------------------------------------ >> Enter the BlackBerry Developer Challenge >> This is your chance to win up to $100,000 in prizes! For a limited time, >> vendors submitting new applications to BlackBerry App World(TM) will have >> the opportunity to enter the BlackBerry Developer Challenge. See full >> prize >> details at: http://p.sf.net/sfu/Challenge >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > -- This email is intended for the addressee only and may contain privileged and/or confidential information |
From: kamil d. <kdr...@gm...> - 2009-07-15 12:09:18
|
Currently 2.1.0 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> > > what version of player are you using? > > > 2009/7/15 kamil ducheckev <kdr...@gm...> > >> Yes, I get all the messeges from the setup function but none from the >> main. >> >> >> //////////////////////////////////////////////////////////////////////////////// >> // Constructor. Retrieve options from the configuration file and do any >> // pre-Setup() setup. >> MotorI2C::MotorI2C(ConfigFile* cf, int section) : Driver(cf, section) >> { >> // Inicializing memories >> memset(&my_pos1d, 0, sizeof(my_pos1d )); >> memset(&my_pos2d, 0, sizeof(my_pos2d )); >> >> /// This is composed by: >> /// >> /// - Registring my interface Position1D for the elevator >> if (cf->ReadDeviceAddr(&my_pos1d.addr, section,"provides", >> PLAYER_POSITION1D_CODE, -1, NULL) == 0) >> { >> if (AddInterface(my_pos1d.addr) != 0){ >> this->SetError(-1); >> return; >> } >> else >> my_pos1d.enable = true; >> } >> >> /// - Registring my interface Position2D for the odometry >> if (cf->ReadDeviceAddr(&my_pos2d.addr, section,"provides", >> PLAYER_POSITION2D_CODE, -1, NULL) == 0) >> { >> if (AddInterface(my_pos2d.addr) != 0){ >> this->SetError(-1); >> return; >> } >> else >> my_pos2d.enable = true; >> } >> >> /// Getting the parameters from the configuration file >> port = cf->ReadString(section, "port", "/dev/ttyUSB0"); >> my_pos2d.rightDriverAddr = >> /*static_cast<uint8_t>*/(cf->ReadInt(section, "right_addr", >> DEFAULT_RIGHT_ADDR)); >> my_pos2d.leftDriverAddr = >> /*static_cast<uint8_t>*/(cf->ReadInt(section, "left_addr" , >> DEFAULT_LEFT_ADDR )); >> >> } >> >> >> //////////////////////////////////////////////////////////////////////////////// >> // Set up the device. Return 0 if things go well, and -1 otherwise. >> int MotorI2C::Setup() >> { >> #ifdef _DEBUG_START_UP_ >> PLAYER_MSG1(1,"MotorI2C driver initialising... Opening %s", port); >> #endif >> >> // Here you do whatever else is necessary to setup the device, like open >> and >> // configure a serial port. >> unsigned int speed = B19200; >> char comm_options[] = "8N2"; >> >> usbi2c = new SerialComm((char*)port, speed, comm_options); >> >> >> ///////////////////////////////////////////////////////////////////////////////////////// >> /// Configurando el modulo de odometria position2D >> if (my_pos2d.enable) >> { >> #ifdef _DEBUG_START_UP_ >> puts("\n ======== Configuring Odometry Module ========="); >> #endif >> odometry = new Odometry(my_pos2d.rightDriverAddr, >> my_pos2d.leftDriverAddr, usbi2c, &my_pos2d); >> odometry->updateEncoder(); >> >> // TEMPORAL A FALTA DE COMPROBAR EL FUNCIONAMIENTO. >> >> if (!odometry->enabled()) // One of the motors, at least, is not >> conected >> { >> PLAYER_ERROR("Error starting the odometry module."); >> this->SetError(-1); >> return (-1); >> } >> #ifdef _DEBUG_START_UP_ >> PLAYER_MSG0(0,"\nMotorI2C driver ready.\n"); >> #endif >> >> #ifdef _DEBUG_ODOMETRY_ >> PLAYER_MSG0(2, " ========== Odometry ========== "); >> #endif >> odometry->updateEncoder(); >> PublishData_POS2D(); >> } >> >> // Start the device thread; spawns a new thread and executes >> // MotorI2C::Main(), which contains the main loop for the driver. >> this->StartThread(); >> >> return(0); >> } >> >> >> //////////////////////////////////////////////////////////////////////////////// >> // Main function for device thread >> void MotorI2C::Main() >> { >> >> // The main loop; interact with the device here >> for(;;) >> { >> //system("clear"); >> >> // Test if we are supposed to cancel >> pthread_testcancel(); >> >> // Process incoming messages. TSevenDriver::ProcessMessage() is >> // called on each message. Incoming data and commands are stored >> in >> // the class. >> ProcessMessages(); >> >> /// Odometria ////////////////////////////////////////////// >> if (odometry->enabled()) >> { >> #ifdef _DEBUG_ODOMETRY_ >> PLAYER_MSG0(2, " ========== Odometry ========== "); >> #endif >> odometry->updateEncoder(); >> PublishData_POS2D(); >> } >> } >> return; >> } >> >> 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> >> > >> >> Any output from the server side? >>> >>> Toby >>> >>> 2009/7/15 kamil ducheckev <kdr...@gm...> >>> >>>> Hi, >>>> >>>> I have been developing a player plugin driver for my robot and I was >>>> testing it with Playerv and it works fine, but now i want to create my own >>>> client to implement some intelligence algorithms. The result is that my >>>> client gets block when it tries to create instance of position2d. >>>> >>>> This is my client: >>>> >>>> #include <iostream> >>>> #include <libplayerc++/playerc++.h> >>>> >>>> using namespace PlayerCc; >>>> >>>> int main(int argc, char *argv[]) >>>> { >>>> const char *host = "localhost"; >>>> int port = 6665; >>>> >>>> PlayerClient *robot_; >>>> Position2dProxy *positionProxy_; >>>> >>>> std::cout << "Driver: Connecting to player on host " >>>> << host << ", port " << port << std::endl; >>>> >>>> // player throws exceptions on creation if we fail >>>> try >>>> { >>>> std::cout << "Driver: Creating Robot proxy...................." ; >>>> robot_ = new PlayerClient( host, port ); >>>> std::cout << "Ready" << std::endl; >>>> >>>> std::cout << "Driver: Creating Position2d proxy..............." ; >>>> positionProxy_ = new Position2dProxy( robot_, 0 ); >>>> std::cout << "Ready" << std::endl; >>>> >>>> std::cout << "Driver: Getting data from driver................" ; >>>> robot_->Read(); >>>> std::cout << "Ready" << std::endl; >>>> >>>> std::cout << "Driver: Getting motor status from driver........" ; >>>> positionProxy_->SetMotorEnable( true ); >>>> std::cout << "Ready" << std::endl; >>>> } >>>> catch ( const PlayerError & e ) >>>> { >>>> std::cout << "Driver: " << e; >>>> } >>>> catch (...) >>>> { >>>> std::cout << "Driver: Unknown error"; >>>> } >>>> >>>> // read from the proxies >>>> robot_->Read(); >>>> >>>> double initX = positionProxy_->GetXPos(); >>>> //double initY = pp.GetYPos(); >>>> >>>> double turnrate = 0; >>>> double speed = 0.100; >>>> >>>> for(;;) >>>> { >>>> // read from the proxies >>>> robot_->Read(); >>>> >>>> std::cout << "X = " << positionProxy_->GetXPos() << >>>> " :: Y = " << positionProxy_->GetYPos() << std::endl; >>>> >>>> if (initX > positionProxy_->GetXPos() + 1) >>>> speed = 0.100; >>>> if (initX < positionProxy_->GetXPos()) >>>> speed = -0.100; >>>> >>>> //turnrate = dtor(-20); // turn 20 degrees per second >>>> //turnrate = dtor(20); >>>> >>>> //speed = 0; >>>> //speed = 0.100; >>>> >>>> // command the motors >>>> positionProxy_->SetSpeed(speed, turnrate); >>>> } >>>> } >>>> >>>> I get the following output before it get freeze: >>>> >>>> Driver: Connecting to player on host localhost, port 6665 >>>> Driver: Creating Robot proxy....................Ready >>>> >>>> Any Idea of what can be hapening? >>>> >>>> Regards, >>>> Kamil >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Enter the BlackBerry Developer Challenge >>>> This is your chance to win up to $100,000 in prizes! For a limited time, >>>> vendors submitting new applications to BlackBerry App World(TM) will >>>> have >>>> the opportunity to enter the BlackBerry Developer Challenge. See full >>>> prize >>>> details at: http://p.sf.net/sfu/Challenge >>>> _______________________________________________ >>>> Playerstage-users mailing list >>>> Pla...@li... >>>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>>> >>>> >>> >>> >>> -- >>> This email is intended for the addressee only and may contain privileged >>> and/or confidential information >>> >>> >>> ------------------------------------------------------------------------------ >>> Enter the BlackBerry Developer Challenge >>> This is your chance to win up to $100,000 in prizes! For a limited time, >>> vendors submitting new applications to BlackBerry App World(TM) will have >>> the opportunity to enter the BlackBerry Developer Challenge. See full >>> prize >>> details at: http://p.sf.net/sfu/Challenge >>> _______________________________________________ >>> Playerstage-users mailing list >>> Pla...@li... >>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>> >>> >> >> >> ------------------------------------------------------------------------------ >> Enter the BlackBerry Developer Challenge >> This is your chance to win up to $100,000 in prizes! For a limited time, >> vendors submitting new applications to BlackBerry App World(TM) will have >> the opportunity to enter the BlackBerry Developer Challenge. See full >> prize >> details at: http://p.sf.net/sfu/Challenge >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> > > > -- > This email is intended for the addressee only and may contain privileged > and/or confidential information > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > |
From: Toby C. <tco...@pl...> - 2009-07-15 12:26:08
|
My guess is that the position2d proxy is making a request that your driver is not responding to, if the main loop is not running this will almost certainly be the case as ProcessMessages will not be being called. Toby 2009/7/15 kamil ducheckev <kdr...@gm...> > Currently 2.1.0 > > > 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> > > > >> what version of player are you using? >> >> >> 2009/7/15 kamil ducheckev <kdr...@gm...> >> >>> Yes, I get all the messeges from the setup function but none from the >>> main. >>> >>> >>> //////////////////////////////////////////////////////////////////////////////// >>> // Constructor. Retrieve options from the configuration file and do any >>> // pre-Setup() setup. >>> MotorI2C::MotorI2C(ConfigFile* cf, int section) : Driver(cf, section) >>> { >>> // Inicializing memories >>> memset(&my_pos1d, 0, sizeof(my_pos1d )); >>> memset(&my_pos2d, 0, sizeof(my_pos2d )); >>> >>> /// This is composed by: >>> /// >>> /// - Registring my interface Position1D for the elevator >>> if (cf->ReadDeviceAddr(&my_pos1d.addr, section,"provides", >>> PLAYER_POSITION1D_CODE, -1, NULL) == 0) >>> { >>> if (AddInterface(my_pos1d.addr) != 0){ >>> this->SetError(-1); >>> return; >>> } >>> else >>> my_pos1d.enable = true; >>> } >>> >>> /// - Registring my interface Position2D for the odometry >>> if (cf->ReadDeviceAddr(&my_pos2d.addr, section,"provides", >>> PLAYER_POSITION2D_CODE, -1, NULL) == 0) >>> { >>> if (AddInterface(my_pos2d.addr) != 0){ >>> this->SetError(-1); >>> return; >>> } >>> else >>> my_pos2d.enable = true; >>> } >>> >>> /// Getting the parameters from the configuration file >>> port = cf->ReadString(section, "port", "/dev/ttyUSB0"); >>> my_pos2d.rightDriverAddr = >>> /*static_cast<uint8_t>*/(cf->ReadInt(section, "right_addr", >>> DEFAULT_RIGHT_ADDR)); >>> my_pos2d.leftDriverAddr = >>> /*static_cast<uint8_t>*/(cf->ReadInt(section, "left_addr" , >>> DEFAULT_LEFT_ADDR )); >>> >>> } >>> >>> >>> //////////////////////////////////////////////////////////////////////////////// >>> // Set up the device. Return 0 if things go well, and -1 otherwise. >>> int MotorI2C::Setup() >>> { >>> #ifdef _DEBUG_START_UP_ >>> PLAYER_MSG1(1,"MotorI2C driver initialising... Opening %s", port); >>> #endif >>> >>> // Here you do whatever else is necessary to setup the device, like >>> open and >>> // configure a serial port. >>> unsigned int speed = B19200; >>> char comm_options[] = "8N2"; >>> >>> usbi2c = new SerialComm((char*)port, speed, comm_options); >>> >>> >>> ///////////////////////////////////////////////////////////////////////////////////////// >>> /// Configurando el modulo de odometria position2D >>> if (my_pos2d.enable) >>> { >>> #ifdef _DEBUG_START_UP_ >>> puts("\n ======== Configuring Odometry Module ========="); >>> #endif >>> odometry = new Odometry(my_pos2d.rightDriverAddr, >>> my_pos2d.leftDriverAddr, usbi2c, &my_pos2d); >>> odometry->updateEncoder(); >>> >>> // TEMPORAL A FALTA DE COMPROBAR EL FUNCIONAMIENTO. >>> >>> if (!odometry->enabled()) // One of the motors, at least, is not >>> conected >>> { >>> PLAYER_ERROR("Error starting the odometry module."); >>> this->SetError(-1); >>> return (-1); >>> } >>> #ifdef _DEBUG_START_UP_ >>> PLAYER_MSG0(0,"\nMotorI2C driver ready.\n"); >>> #endif >>> >>> #ifdef _DEBUG_ODOMETRY_ >>> PLAYER_MSG0(2, " ========== Odometry ========== "); >>> #endif >>> odometry->updateEncoder(); >>> PublishData_POS2D(); >>> } >>> >>> // Start the device thread; spawns a new thread and executes >>> // MotorI2C::Main(), which contains the main loop for the driver. >>> this->StartThread(); >>> >>> return(0); >>> } >>> >>> >>> //////////////////////////////////////////////////////////////////////////////// >>> // Main function for device thread >>> void MotorI2C::Main() >>> { >>> >>> // The main loop; interact with the device here >>> for(;;) >>> { >>> //system("clear"); >>> >>> // Test if we are supposed to cancel >>> pthread_testcancel(); >>> >>> // Process incoming messages. TSevenDriver::ProcessMessage() is >>> // called on each message. Incoming data and commands are stored >>> in >>> // the class. >>> ProcessMessages(); >>> >>> /// Odometria ////////////////////////////////////////////// >>> if (odometry->enabled()) >>> { >>> #ifdef _DEBUG_ODOMETRY_ >>> PLAYER_MSG0(2, " ========== Odometry ========== "); >>> #endif >>> odometry->updateEncoder(); >>> PublishData_POS2D(); >>> } >>> } >>> return; >>> } >>> >>> 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> >>> > >>> >>> Any output from the server side? >>>> >>>> Toby >>>> >>>> 2009/7/15 kamil ducheckev <kdr...@gm...> >>>> >>>>> Hi, >>>>> >>>>> I have been developing a player plugin driver for my robot and I was >>>>> testing it with Playerv and it works fine, but now i want to create my own >>>>> client to implement some intelligence algorithms. The result is that my >>>>> client gets block when it tries to create instance of position2d. >>>>> >>>>> This is my client: >>>>> >>>>> #include <iostream> >>>>> #include <libplayerc++/playerc++.h> >>>>> >>>>> using namespace PlayerCc; >>>>> >>>>> int main(int argc, char *argv[]) >>>>> { >>>>> const char *host = "localhost"; >>>>> int port = 6665; >>>>> >>>>> PlayerClient *robot_; >>>>> Position2dProxy *positionProxy_; >>>>> >>>>> std::cout << "Driver: Connecting to player on host " >>>>> << host << ", port " << port << std::endl; >>>>> >>>>> // player throws exceptions on creation if we fail >>>>> try >>>>> { >>>>> std::cout << "Driver: Creating Robot proxy...................." ; >>>>> robot_ = new PlayerClient( host, port ); >>>>> std::cout << "Ready" << std::endl; >>>>> >>>>> std::cout << "Driver: Creating Position2d proxy..............." ; >>>>> positionProxy_ = new Position2dProxy( robot_, 0 ); >>>>> std::cout << "Ready" << std::endl; >>>>> >>>>> std::cout << "Driver: Getting data from driver................" ; >>>>> robot_->Read(); >>>>> std::cout << "Ready" << std::endl; >>>>> >>>>> std::cout << "Driver: Getting motor status from driver........" ; >>>>> positionProxy_->SetMotorEnable( true ); >>>>> std::cout << "Ready" << std::endl; >>>>> } >>>>> catch ( const PlayerError & e ) >>>>> { >>>>> std::cout << "Driver: " << e; >>>>> } >>>>> catch (...) >>>>> { >>>>> std::cout << "Driver: Unknown error"; >>>>> } >>>>> >>>>> // read from the proxies >>>>> robot_->Read(); >>>>> >>>>> double initX = positionProxy_->GetXPos(); >>>>> //double initY = pp.GetYPos(); >>>>> >>>>> double turnrate = 0; >>>>> double speed = 0.100; >>>>> >>>>> for(;;) >>>>> { >>>>> // read from the proxies >>>>> robot_->Read(); >>>>> >>>>> std::cout << "X = " << positionProxy_->GetXPos() << >>>>> " :: Y = " << positionProxy_->GetYPos() << std::endl; >>>>> >>>>> if (initX > positionProxy_->GetXPos() + 1) >>>>> speed = 0.100; >>>>> if (initX < positionProxy_->GetXPos()) >>>>> speed = -0.100; >>>>> >>>>> //turnrate = dtor(-20); // turn 20 degrees per second >>>>> //turnrate = dtor(20); >>>>> >>>>> //speed = 0; >>>>> //speed = 0.100; >>>>> >>>>> // command the motors >>>>> positionProxy_->SetSpeed(speed, turnrate); >>>>> } >>>>> } >>>>> >>>>> I get the following output before it get freeze: >>>>> >>>>> Driver: Connecting to player on host localhost, port 6665 >>>>> Driver: Creating Robot proxy....................Ready >>>>> >>>>> Any Idea of what can be hapening? >>>>> >>>>> Regards, >>>>> Kamil >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Enter the BlackBerry Developer Challenge >>>>> This is your chance to win up to $100,000 in prizes! For a limited >>>>> time, >>>>> vendors submitting new applications to BlackBerry App World(TM) will >>>>> have >>>>> the opportunity to enter the BlackBerry Developer Challenge. See full >>>>> prize >>>>> details at: http://p.sf.net/sfu/Challenge >>>>> _______________________________________________ >>>>> Playerstage-users mailing list >>>>> Pla...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>>>> >>>>> >>>> >>>> >>>> -- >>>> This email is intended for the addressee only and may contain privileged >>>> and/or confidential information >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Enter the BlackBerry Developer Challenge >>>> This is your chance to win up to $100,000 in prizes! For a limited time, >>>> vendors submitting new applications to BlackBerry App World(TM) will >>>> have >>>> the opportunity to enter the BlackBerry Developer Challenge. See full >>>> prize >>>> details at: http://p.sf.net/sfu/Challenge >>>> _______________________________________________ >>>> Playerstage-users mailing list >>>> Pla...@li... >>>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>>> >>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Enter the BlackBerry Developer Challenge >>> This is your chance to win up to $100,000 in prizes! For a limited time, >>> vendors submitting new applications to BlackBerry App World(TM) will have >>> the opportunity to enter the BlackBerry Developer Challenge. See full >>> prize >>> details at: http://p.sf.net/sfu/Challenge >>> _______________________________________________ >>> Playerstage-users mailing list >>> Pla...@li... >>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>> >>> >> >> >> -- >> This email is intended for the addressee only and may contain privileged >> and/or confidential information >> >> >> ------------------------------------------------------------------------------ >> Enter the BlackBerry Developer Challenge >> This is your chance to win up to $100,000 in prizes! For a limited time, >> vendors submitting new applications to BlackBerry App World(TM) will have >> the opportunity to enter the BlackBerry Developer Challenge. See full >> prize >> details at: http://p.sf.net/sfu/Challenge >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > -- This email is intended for the addressee only and may contain privileged and/or confidential information |
From: kamil d. <kdr...@gm...> - 2009-07-15 12:36:54
|
Then the question is why the driver is not responding to my client and it does to playerv. Here is my ProcessMessages function: int MotorI2C::ProcessMessage(QueuePointer & resp_queue, player_msghdr * hdr, void * data) { PLAYER_MSG0(3," * Message recieved: "); ///////////////////////////////////////////////////////////////// /// Handle new data from "set odometry car speed" if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_CMD, PLAYER_POSITION2D_CMD_CAR, my_pos2d.addr)) { // get and send the latest motor command. memcpy(&my_pos2d.cmd_car, data, sizeof(my_pos2d.cmd_car)); #ifdef _DEBUG_SPEED_CAR_ PLAYER_MSG2(3,"Recieving robot car commands %f:%f", my_pos2d.cmd_car.velocity, my_pos2d.cmd_car.angle); #endif my_pos2d.cmd_vel.vel.px = my_pos2d.cmd_car.velocity; my_pos2d.cmd_vel.vel.pa = my_pos2d.cmd_car.angle; if (!odometry->updateSpeed()) PLAYER_ERROR("failed to set speeds to the robot."); return(0); } ///////////////////////////////////////////////////////////////// /// Handle new data from "set odometry differential speed" if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_CMD, PLAYER_POSITION2D_CMD_VEL, my_pos2d.addr)) { // get and send the latest motor command. memcpy(&my_pos2d.cmd_vel, data, sizeof(my_pos2d.cmd_vel)); #ifdef _DEBUG_SPEED_DIF_ PLAYER_MSG2(3,"Recieving robot differential commands %f:%f", my_pos2d.cmd_vel.vel.px, my_pos2d.cmd_vel.vel.pa); #endif if (!odometry->updateSpeed()) PLAYER_ERROR("failed to set speeds to the robot."); return(0); } ///////////////////////////////////////////////////////////////// /// Handle new data from "Robot shape request" if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ, PLAYER_POSITION2D_REQ_GET_GEOM, my_pos2d.addr)) { #ifdef _DEBUG_ROBOT_GEOM_ PLAYER_MSG0(3,"Robot geometry requested."); #endif Publish(my_pos2d.addr, PLAYER_MSGTYPE_RESP_ACK, PLAYER_POSITION2D_REQ_GET_GEOM, (void*)&my_pos2d.geom, sizeof(my_pos2d.geom)); return 0; } ///////////////////////////////////////////////////////////////// /// Handle new data from "Robot motor power request" if(Message::MatchMessage(hdr, PLAYER_MSGTYPE_REQ, PLAYER_POSITION2D_REQ_MOTOR_POWER, my_pos2d.addr)) { #ifdef _DEBUG_ROBOT_PWR_ PLAYER_MSG0(3,"Robot motor power requested."); #endif Publish(my_pos2d.addr, PLAYER_MSGTYPE_RESP_ACK, PLAYER_POSITION2D_REQ_MOTOR_POWER);//, //(void*)&my_pos2d.power, sizeof(my_pos2d.power)); return 0; } // Tell the caller that you don't know how to handle this message PLAYER_WARN(" WARNING: Unknown message recieved."); return(-1); } 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> > > My guess is that the position2d proxy is making a request that your driver > is not responding to, if the main loop is not running this will almost > certainly be the case as ProcessMessages will not be being called. > > > Toby > > 2009/7/15 kamil ducheckev <kdr...@gm...> > >> Currently 2.1.0 >> >> >> 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> >> > >> >>> what version of player are you using? >>> >>> >>> 2009/7/15 kamil ducheckev <kdr...@gm...> >>> >>>> Yes, I get all the messeges from the setup function but none from the >>>> main. >>>> >>>> >>>> //////////////////////////////////////////////////////////////////////////////// >>>> // Constructor. Retrieve options from the configuration file and do any >>>> // pre-Setup() setup. >>>> MotorI2C::MotorI2C(ConfigFile* cf, int section) : Driver(cf, section) >>>> { >>>> // Inicializing memories >>>> memset(&my_pos1d, 0, sizeof(my_pos1d )); >>>> memset(&my_pos2d, 0, sizeof(my_pos2d )); >>>> >>>> /// This is composed by: >>>> /// >>>> /// - Registring my interface Position1D for the elevator >>>> if (cf->ReadDeviceAddr(&my_pos1d.addr, section,"provides", >>>> PLAYER_POSITION1D_CODE, -1, NULL) == 0) >>>> { >>>> if (AddInterface(my_pos1d.addr) != 0){ >>>> this->SetError(-1); >>>> return; >>>> } >>>> else >>>> my_pos1d.enable = true; >>>> } >>>> >>>> /// - Registring my interface Position2D for the odometry >>>> if (cf->ReadDeviceAddr(&my_pos2d.addr, section,"provides", >>>> PLAYER_POSITION2D_CODE, -1, NULL) == 0) >>>> { >>>> if (AddInterface(my_pos2d.addr) != 0){ >>>> this->SetError(-1); >>>> return; >>>> } >>>> else >>>> my_pos2d.enable = true; >>>> } >>>> >>>> /// Getting the parameters from the configuration file >>>> port = cf->ReadString(section, "port", "/dev/ttyUSB0"); >>>> my_pos2d.rightDriverAddr = >>>> /*static_cast<uint8_t>*/(cf->ReadInt(section, "right_addr", >>>> DEFAULT_RIGHT_ADDR)); >>>> my_pos2d.leftDriverAddr = >>>> /*static_cast<uint8_t>*/(cf->ReadInt(section, "left_addr" , >>>> DEFAULT_LEFT_ADDR )); >>>> >>>> } >>>> >>>> >>>> //////////////////////////////////////////////////////////////////////////////// >>>> // Set up the device. Return 0 if things go well, and -1 otherwise. >>>> int MotorI2C::Setup() >>>> { >>>> #ifdef _DEBUG_START_UP_ >>>> PLAYER_MSG1(1,"MotorI2C driver initialising... Opening %s", port); >>>> #endif >>>> >>>> // Here you do whatever else is necessary to setup the device, like >>>> open and >>>> // configure a serial port. >>>> unsigned int speed = B19200; >>>> char comm_options[] = "8N2"; >>>> >>>> usbi2c = new SerialComm((char*)port, speed, comm_options); >>>> >>>> >>>> ///////////////////////////////////////////////////////////////////////////////////////// >>>> /// Configurando el modulo de odometria position2D >>>> if (my_pos2d.enable) >>>> { >>>> #ifdef _DEBUG_START_UP_ >>>> puts("\n ======== Configuring Odometry Module ========="); >>>> #endif >>>> odometry = new Odometry(my_pos2d.rightDriverAddr, >>>> my_pos2d.leftDriverAddr, usbi2c, &my_pos2d); >>>> odometry->updateEncoder(); >>>> >>>> // TEMPORAL A FALTA DE COMPROBAR EL FUNCIONAMIENTO. >>>> >>>> if (!odometry->enabled()) // One of the motors, at least, is not >>>> conected >>>> { >>>> PLAYER_ERROR("Error starting the odometry module."); >>>> this->SetError(-1); >>>> return (-1); >>>> } >>>> #ifdef _DEBUG_START_UP_ >>>> PLAYER_MSG0(0,"\nMotorI2C driver ready.\n"); >>>> #endif >>>> >>>> #ifdef _DEBUG_ODOMETRY_ >>>> PLAYER_MSG0(2, " ========== Odometry ========== "); >>>> #endif >>>> odometry->updateEncoder(); >>>> PublishData_POS2D(); >>>> } >>>> >>>> // Start the device thread; spawns a new thread and executes >>>> // MotorI2C::Main(), which contains the main loop for the driver. >>>> this->StartThread(); >>>> >>>> return(0); >>>> } >>>> >>>> >>>> //////////////////////////////////////////////////////////////////////////////// >>>> // Main function for device thread >>>> void MotorI2C::Main() >>>> { >>>> >>>> // The main loop; interact with the device here >>>> for(;;) >>>> { >>>> //system("clear"); >>>> >>>> // Test if we are supposed to cancel >>>> pthread_testcancel(); >>>> >>>> // Process incoming messages. TSevenDriver::ProcessMessage() is >>>> // called on each message. Incoming data and commands are >>>> stored in >>>> // the class. >>>> ProcessMessages(); >>>> >>>> /// Odometria ////////////////////////////////////////////// >>>> if (odometry->enabled()) >>>> { >>>> #ifdef _DEBUG_ODOMETRY_ >>>> PLAYER_MSG0(2, " ========== Odometry ========== "); >>>> #endif >>>> odometry->updateEncoder(); >>>> PublishData_POS2D(); >>>> } >>>> } >>>> return; >>>> } >>>> >>>> 2009/7/15 Toby Collett <tco...@pl...<tcollett%2Bp...@pl...> >>>> > >>>> >>>> Any output from the server side? >>>>> >>>>> Toby >>>>> >>>>> 2009/7/15 kamil ducheckev <kdr...@gm...> >>>>> >>>>>> Hi, >>>>>> >>>>>> I have been developing a player plugin driver for my robot and I was >>>>>> testing it with Playerv and it works fine, but now i want to create my own >>>>>> client to implement some intelligence algorithms. The result is that my >>>>>> client gets block when it tries to create instance of position2d. >>>>>> >>>>>> This is my client: >>>>>> >>>>>> #include <iostream> >>>>>> #include <libplayerc++/playerc++.h> >>>>>> >>>>>> using namespace PlayerCc; >>>>>> >>>>>> int main(int argc, char *argv[]) >>>>>> { >>>>>> const char *host = "localhost"; >>>>>> int port = 6665; >>>>>> >>>>>> PlayerClient *robot_; >>>>>> Position2dProxy *positionProxy_; >>>>>> >>>>>> std::cout << "Driver: Connecting to player on host " >>>>>> << host << ", port " << port << std::endl; >>>>>> >>>>>> // player throws exceptions on creation if we fail >>>>>> try >>>>>> { >>>>>> std::cout << "Driver: Creating Robot proxy...................." ; >>>>>> robot_ = new PlayerClient( host, port ); >>>>>> std::cout << "Ready" << std::endl; >>>>>> >>>>>> std::cout << "Driver: Creating Position2d proxy..............." ; >>>>>> positionProxy_ = new Position2dProxy( robot_, 0 ); >>>>>> std::cout << "Ready" << std::endl; >>>>>> >>>>>> std::cout << "Driver: Getting data from driver................" ; >>>>>> robot_->Read(); >>>>>> std::cout << "Ready" << std::endl; >>>>>> >>>>>> std::cout << "Driver: Getting motor status from driver........" ; >>>>>> positionProxy_->SetMotorEnable( true ); >>>>>> std::cout << "Ready" << std::endl; >>>>>> } >>>>>> catch ( const PlayerError & e ) >>>>>> { >>>>>> std::cout << "Driver: " << e; >>>>>> } >>>>>> catch (...) >>>>>> { >>>>>> std::cout << "Driver: Unknown error"; >>>>>> } >>>>>> >>>>>> // read from the proxies >>>>>> robot_->Read(); >>>>>> >>>>>> double initX = positionProxy_->GetXPos(); >>>>>> //double initY = pp.GetYPos(); >>>>>> >>>>>> double turnrate = 0; >>>>>> double speed = 0.100; >>>>>> >>>>>> for(;;) >>>>>> { >>>>>> // read from the proxies >>>>>> robot_->Read(); >>>>>> >>>>>> std::cout << "X = " << positionProxy_->GetXPos() << >>>>>> " :: Y = " << positionProxy_->GetYPos() << std::endl; >>>>>> >>>>>> if (initX > positionProxy_->GetXPos() + 1) >>>>>> speed = 0.100; >>>>>> if (initX < positionProxy_->GetXPos()) >>>>>> speed = -0.100; >>>>>> >>>>>> //turnrate = dtor(-20); // turn 20 degrees per second >>>>>> //turnrate = dtor(20); >>>>>> >>>>>> //speed = 0; >>>>>> //speed = 0.100; >>>>>> >>>>>> // command the motors >>>>>> positionProxy_->SetSpeed(speed, turnrate); >>>>>> } >>>>>> } >>>>>> >>>>>> I get the following output before it get freeze: >>>>>> >>>>>> Driver: Connecting to player on host localhost, port 6665 >>>>>> Driver: Creating Robot proxy....................Ready >>>>>> >>>>>> Any Idea of what can be hapening? >>>>>> >>>>>> Regards, >>>>>> Kamil >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Enter the BlackBerry Developer Challenge >>>>>> This is your chance to win up to $100,000 in prizes! For a limited >>>>>> time, >>>>>> vendors submitting new applications to BlackBerry App World(TM) will >>>>>> have >>>>>> the opportunity to enter the BlackBerry Developer Challenge. See full >>>>>> prize >>>>>> details at: http://p.sf.net/sfu/Challenge >>>>>> _______________________________________________ >>>>>> Playerstage-users mailing list >>>>>> Pla...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> This email is intended for the addressee only and may contain >>>>> privileged and/or confidential information >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Enter the BlackBerry Developer Challenge >>>>> This is your chance to win up to $100,000 in prizes! For a limited >>>>> time, >>>>> vendors submitting new applications to BlackBerry App World(TM) will >>>>> have >>>>> the opportunity to enter the BlackBerry Developer Challenge. See full >>>>> prize >>>>> details at: http://p.sf.net/sfu/Challenge >>>>> _______________________________________________ >>>>> Playerstage-users mailing list >>>>> Pla...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>>>> >>>>> >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Enter the BlackBerry Developer Challenge >>>> This is your chance to win up to $100,000 in prizes! For a limited time, >>>> vendors submitting new applications to BlackBerry App World(TM) will >>>> have >>>> the opportunity to enter the BlackBerry Developer Challenge. See full >>>> prize >>>> details at: http://p.sf.net/sfu/Challenge >>>> _______________________________________________ >>>> Playerstage-users mailing list >>>> Pla...@li... >>>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>>> >>>> >>> >>> >>> -- >>> This email is intended for the addressee only and may contain privileged >>> and/or confidential information >>> >>> >>> ------------------------------------------------------------------------------ >>> Enter the BlackBerry Developer Challenge >>> This is your chance to win up to $100,000 in prizes! For a limited time, >>> vendors submitting new applications to BlackBerry App World(TM) will have >>> the opportunity to enter the BlackBerry Developer Challenge. See full >>> prize >>> details at: http://p.sf.net/sfu/Challenge >>> _______________________________________________ >>> Playerstage-users mailing list >>> Pla...@li... >>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>> >>> >> >> >> ------------------------------------------------------------------------------ >> Enter the BlackBerry Developer Challenge >> This is your chance to win up to $100,000 in prizes! For a limited time, >> vendors submitting new applications to BlackBerry App World(TM) will have >> the opportunity to enter the BlackBerry Developer Challenge. See full >> prize >> details at: http://p.sf.net/sfu/Challenge >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> > > > -- > This email is intended for the addressee only and may contain privileged > and/or confidential information > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > |
From: Toby C. <tob...@gm...> - 2009-07-15 15:12:51
|
Possibly Position2DProxy is making (or not making) a request that playerv doesnt, playerc uses the c client API and you are using the c++ one. Is any of the output from your process message method being displayed with the c++ client? what are the differences in output between playerv and your client from the server side. 2009/7/15 kamil ducheckev <kdr...@gm...> > Then the question is why the driver is not responding to my client and it > does to playerv. Here is my ProcessMessages function: > |
From: kamil d. <kdr...@gm...> - 2009-07-16 08:13:13
|
Hello Toby, I checked and from my c++ client I don't get any output from my process message method because seems I don't get any message, but it looks obvious when the client gets block when is creating the Position2DProxy. When I use Playerv I get messages for geometry and all the command (speed, car, ...) requires. Do you think the reason could be Position2DProxy is not subscribing correctly to Player? Or maybe the problem could be related to the StartThread() method? Thank you for you help. Kamil. 2009/7/15 Toby Collett <tob...@gm...> > Possibly Position2DProxy is making (or not making) a request that playerv > doesnt, playerc uses the c client API and you are using the c++ one. Is any > of the output from your process message method being displayed with the c++ > client? what are the differences in output between playerv and your client > from the server side. > > 2009/7/15 kamil ducheckev <kdr...@gm...> > >> Then the question is why the driver is not responding to my client and it >> does to playerv. Here is my ProcessMessages function: >> > > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > |
From: Toby C. <tob...@gm...> - 2009-07-16 09:24:58
|
It seems a very odd problem, can you try connecting first with playerv and then with your client? does playerprint position2d give any output? 2009/7/16 kamil ducheckev <kdr...@gm...> > Hello Toby, > > I checked and from my c++ client I don't get any output from my process > message method because seems I don't get any message, but it looks obvious > when the client gets block when is creating the Position2DProxy. When I use > Playerv I get messages for geometry and all the command (speed, car, ...) > requires. > > Do you think the reason could be Position2DProxy is not subscribing > correctly to Player? > Or maybe the problem could be related to the StartThread() method? > > Thank you for you help. > Kamil. > > 2009/7/15 Toby Collett <tob...@gm...> > >> Possibly Position2DProxy is making (or not making) a request that playerv >> doesnt, playerc uses the c client API and you are using the c++ one. Is any >> of the output from your process message method being displayed with the c++ >> client? what are the differences in output between playerv and your client >> from the server side. >> >> 2009/7/15 kamil ducheckev <kdr...@gm...> >> >>> Then the question is why the driver is not responding to my client and it >>> does to playerv. Here is my ProcessMessages function: >>> >> >> >> >> ------------------------------------------------------------------------------ >> Enter the BlackBerry Developer Challenge >> This is your chance to win up to $100,000 in prizes! For a limited time, >> vendors submitting new applications to BlackBerry App World(TM) will have >> the opportunity to enter the BlackBerry Developer Challenge. See full >> prize >> details at: http://p.sf.net/sfu/Challenge >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > -- This email is intended for the addressee only and may contain privileged and/or confidential information |
From: kamil d. <kdr...@gm...> - 2009-07-21 08:16:03
|
Thank you Toby for your help, Finally I found the problem, it was I was trying to publish data in the setup. Now everything works fine. Regards. 2009/7/16 Toby Collett <tob...@gm...> > It seems a very odd problem, can you try connecting first with playerv and > then with your client? does playerprint position2d give any output? > > 2009/7/16 kamil ducheckev <kdr...@gm...> > > Hello Toby, >> >> I checked and from my c++ client I don't get any output from my process >> message method because seems I don't get any message, but it looks obvious >> when the client gets block when is creating the Position2DProxy. When I use >> Playerv I get messages for geometry and all the command (speed, car, ...) >> requires. >> >> Do you think the reason could be Position2DProxy is not subscribing >> correctly to Player? >> Or maybe the problem could be related to the StartThread() method? >> >> Thank you for you help. >> Kamil. >> >> 2009/7/15 Toby Collett <tob...@gm...> >> >>> Possibly Position2DProxy is making (or not making) a request that >>> playerv doesnt, playerc uses the c client API and you are using the c++ one. >>> Is any of the output from your process message method being displayed with >>> the c++ client? what are the differences in output between playerv and your >>> client from the server side. >>> >>> 2009/7/15 kamil ducheckev <kdr...@gm...> >>> >>>> Then the question is why the driver is not responding to my client and >>>> it does to playerv. Here is my ProcessMessages function: >>>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Enter the BlackBerry Developer Challenge >>> This is your chance to win up to $100,000 in prizes! For a limited time, >>> vendors submitting new applications to BlackBerry App World(TM) will have >>> the opportunity to enter the BlackBerry Developer Challenge. See full >>> prize >>> details at: http://p.sf.net/sfu/Challenge >>> _______________________________________________ >>> Playerstage-users mailing list >>> Pla...@li... >>> https://lists.sourceforge.net/lists/listinfo/playerstage-users >>> >>> >> >> >> ------------------------------------------------------------------------------ >> Enter the BlackBerry Developer Challenge >> This is your chance to win up to $100,000 in prizes! For a limited time, >> vendors submitting new applications to BlackBerry App World(TM) will have >> the opportunity to enter the BlackBerry Developer Challenge. See full >> prize >> details at: http://p.sf.net/sfu/Challenge >> _______________________________________________ >> Playerstage-users mailing list >> Pla...@li... >> https://lists.sourceforge.net/lists/listinfo/playerstage-users >> >> > > > -- > This email is intended for the addressee only and may contain privileged > and/or confidential information > > > ------------------------------------------------------------------------------ > Enter the BlackBerry Developer Challenge > This is your chance to win up to $100,000 in prizes! For a limited time, > vendors submitting new applications to BlackBerry App World(TM) will have > the opportunity to enter the BlackBerry Developer Challenge. See full prize > details at: http://p.sf.net/sfu/Challenge > _______________________________________________ > Playerstage-users mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-users > > |