Hallo zusammen,
wie mit dem Vertrieb von FESTO besprochen, wende ich mich mit meinem Problem um das Auslesen eines Laserscanners in das Forum.
Ich verwende den Robotino3 mit der RobotinoAPI2 und habe langfristig das Ziel, in C++ einen SLAM-Algorithmus zu implementieren.
Hierfür benötige ich unter anderem die Daten eines nachträglich installierten Hokuyo URG.
Ich habe nach Vorlage aus Beispielprogrammen und dem ROS package "robotino_node" folgenden Code verwendet:
#include <Eigen/Dense>
#include <chrono>
#include <cmath>
#include <iostream>
#include <thread>
#include "RobotinoCommunication.h"
#include "RobotinoDrive.h"
#include "RobotinoSense.h"
#include "Room.h"
#include "rec/robotino/api2/all.h"
using namespace rec::robotino::api2;
using namespace Eigen;
using namespace std;
void init(RobotinoCommunication &com, OmniDrive &omniDrive)
{
omniDrive.setComId(com.id());
std::cout << "Connecting..." << std::endl;
com.setAddress("172.26.1.1");
com.connectToServer();
std::cout << std::endl << "Connected" << std::endl;
}
void scanEvent(const LaserRangeFinderReadings &scan)
{
const float *readings;
unsigned int numReadings = scan.numRanges();
scan.ranges(&readings, &numReadings);
cout << "ranges = " << readings << endl;
std::vector<double> ranges(numReadings);
for(int i = 0; i < numReadings; i++)
{
ranges[i] = readings[i];
}
for(int i = 0; i < numReadings; i++)
{
cout << "ranges " << i << " = " << ranges[i] << endl;
}
}
void destroy(RobotinoCommunication &com)
{
com.disconnectFromServer();
}
int main()
{
OmniDrive omniDrive;
RobotinoCommunication com;
LaserRangeFinder laser;
LaserRangeFinderReadings scan;
init(com, omniDrive);
scan = laser.readings();
scanEvent(scan);
destroy(com);
}
Beim Ausführen des Programmes erhalte ich folgenden Output:
Constructor of RobotinoCommunication
Connecting...
Connected
sizeof readings: 0
ranges = 0
Nach mehrfachem Probieren wurde mir tatsächlich einmalig Array mit ranges ausgegeben, ohne an dem Programmcode eine Änderung durchzuführen. Beim wiederholten Ausführen erhielt ich jedoch erneut den oben beschriebenen Output.
Dem Anschein nach wird die erzeugte Instanz "scan" nicht mit Informationen gefüllt und wie im Header "LaserRangeFinderReadings.h" beschrieben lediglich mit Default-Werten initialisiert.
Vielen Dank im Voraus!
wie mit dem Vertrieb von FESTO besprochen, wende ich mich mit meinem Problem um das Auslesen eines Laserscanners in das Forum.
Ich verwende den Robotino3 mit der RobotinoAPI2 und habe langfristig das Ziel, in C++ einen SLAM-Algorithmus zu implementieren.
Hierfür benötige ich unter anderem die Daten eines nachträglich installierten Hokuyo URG.
Ich habe nach Vorlage aus Beispielprogrammen und dem ROS package "robotino_node" folgenden Code verwendet:
#include <Eigen/Dense>
#include <chrono>
#include <cmath>
#include <iostream>
#include <thread>
#include "RobotinoCommunication.h"
#include "RobotinoDrive.h"
#include "RobotinoSense.h"
#include "Room.h"
#include "rec/robotino/api2/all.h"
using namespace rec::robotino::api2;
using namespace Eigen;
using namespace std;
void init(RobotinoCommunication &com, OmniDrive &omniDrive)
{
omniDrive.setComId(com.id());
std::cout << "Connecting..." << std::endl;
com.setAddress("172.26.1.1");
com.connectToServer();
std::cout << std::endl << "Connected" << std::endl;
}
void scanEvent(const LaserRangeFinderReadings &scan)
{
const float *readings;
unsigned int numReadings = scan.numRanges();
scan.ranges(&readings, &numReadings);
cout << "ranges = " << readings << endl;
std::vector<double> ranges(numReadings);
for(int i = 0; i < numReadings; i++)
{
ranges[i] = readings[i];
}
for(int i = 0; i < numReadings; i++)
{
cout << "ranges " << i << " = " << ranges[i] << endl;
}
}
void destroy(RobotinoCommunication &com)
{
com.disconnectFromServer();
}
int main()
{
OmniDrive omniDrive;
RobotinoCommunication com;
LaserRangeFinder laser;
LaserRangeFinderReadings scan;
init(com, omniDrive);
scan = laser.readings();
scanEvent(scan);
destroy(com);
}
Beim Ausführen des Programmes erhalte ich folgenden Output:
Constructor of RobotinoCommunication
Connecting...
Connected
sizeof readings: 0
ranges = 0
Nach mehrfachem Probieren wurde mir tatsächlich einmalig Array mit ranges ausgegeben, ohne an dem Programmcode eine Änderung durchzuführen. Beim wiederholten Ausführen erhielt ich jedoch erneut den oben beschriebenen Output.
Dem Anschein nach wird die erzeugte Instanz "scan" nicht mit Informationen gefüllt und wie im Header "LaserRangeFinderReadings.h" beschrieben lediglich mit Default-Werten initialisiert.
Vielen Dank im Voraus!
Comment