30 int main(
int argc,
char** argv)
36 cerr <<
"Usage: " << argv[0] <<
" <sensor_id/sensor_serial\n";
37 cerr <<
"Example: " << argv[0] <<
" 0 \n";
47 unsigned sensor_id_or_serial = 0;
50 sensor_id_or_serial = atoi(argv[1]);
51 if (sensor_id_or_serial > 10)
63 cout <<
"OK " << rgbd_sensor.
getNumDevices() <<
" available devices." 65 cout <<
"\nUse device " << sensor_id_or_serial << endl << endl;
71 win3D.setCameraAzimuthDeg(140);
72 win3D.setCameraElevationDeg(20);
73 win3D.setCameraZoom(8.0);
75 win3D.setCameraPointingToPoint(2.5, 0, 0);
79 gl_points->setPointSize(2.5);
84 gl_2d_scan->enablePoints(
true);
85 gl_2d_scan->enableLine(
true);
86 gl_2d_scan->enableSurface(
true);
87 gl_2d_scan->setSurfaceColor(0, 0, 1, 0.3);
95 scene->insert(gl_points);
98 scene->insert(gl_2d_scan);
100 const double aspect_ratio = 480.0 / 640.0;
103 const int VW_HEIGHT = aspect_ratio * VW_WIDTH;
106 viewInt = scene->createViewport(
"view2d_int");
107 viewInt->setViewportPosition(5, 30, VW_WIDTH, VW_HEIGHT);
108 win3D.addTextMessage(
109 10, 30 + VW_HEIGHT + 10,
"Intensity data",
TColorf(1, 1, 1), 2,
112 win3D.addTextMessage(
113 5, 5,
format(
"'o'/'i'-zoom out/in, ESC: quit"),
116 win3D.unlockAccess3DScene();
123 bool bObs =
false, bError =
true;
126 while (!win3D.keyHit())
135 if (bObs && !bError && newObs &&
137 newObs->timestamp != last_obs_tim)
140 last_obs_tim = newObs->timestamp;
143 if (newObs->hasRangeImage)
152 newObs->convertTo2DScan(*obs_2d, p2s);
157 win3D.get3DSceneAndLock();
160 win3D.addTextMessage(
170 if (newObs->hasIntensityImage)
172 viewInt->setImageView(
173 newObs->intensityImage);
177 win3D.unlockAccess3DScene();
187 if (newObs->hasRangeImage)
190 win3D.get3DSceneAndLock();
193 newObs->project3DPointsFromDepthImageInto(
195 win3D.unlockAccess3DScene();
199 gl_2d_scan->setScan(*obs_2d);
205 cout <<
"\nClosing RGBD sensor...\n";
209 catch (
const std::exception& e)
216 printf(
"Untyped exception!!");
int getNumDevices() const
The number of available devices at initialization.
static Ptr Create(Args &&... args)
static Ptr Create(Args &&... args)
double DEG2RAD(const double x)
Degrees to radians.
std::string sensorLabel
The sensor label that will have the newly created observation.
double angle_sup
(Default=5 degrees) [Only if use_origin_sensor_pose=false] The upper & lower half-FOV angle (in radia...
void getNextObservation(mrpt::obs::CObservation3DRangeScan &out_obs, bool &there_is_obs, bool &hardware_error)
The main data retrieving function, to be called after calling loadConfig() and initialize().
Contains classes for various device interfaces.
static Ptr Create(Args &&... args)
A class for grabing "range images", intensity images (either RGB or IR) and other information from an...
mrpt::Clock::time_point TTimeStamp
A system independent time type, it holds the the number of 100-nanosecond intervals since January 1...
static Ptr Create(Args &&... args)
void setSerialToOpen(const unsigned serial)
Set the serial number of the device to open.
Used in CObservation3DRangeScan::convertTo2DScan()
This namespace contains representation of robot actions and observations.
void setSensorIDToOpen(const unsigned sensor_id)
Set the sensor_id of the device to open.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
CSetOfObjects::Ptr CornerXYZ(float scale=1.0)
Returns three arrows representing a X,Y,Z 3D corner.
std::string format(const char *fmt,...) MRPT_printf_format_check(1
A std::string version of C sprintf.
Used in CObservation3DRangeScan::project3DPointsFromDepthImageInto()
A RGB color - floats in the range [0,1].
The namespace for 3D scene representation and rendering.
std::string exception_to_str(const std::exception &e)
Builds a nice textual representation of a nested exception, which if generated using MRPT macros (THR...
void initialize() override
Initializes the 3D camera - should be invoked after calling loadConfig() or setting the different par...
std::string dateTimeLocalToString(const mrpt::system::TTimeStamp t)
Convert a timestamp into this textual form (in local time): YEAR/MONTH/DAY,HH:MM:SS.MMM.
renders glyphs as filled polygons
static Ptr Create(Args &&... args)
#define INVALID_TIMESTAMP
Represents an invalid timestamp, where applicable.
bool takeIntoAccountSensorPoseOnRobot
(Default: false) If false, local (sensor-centric) coordinates of points are generated.
A graphical user interface (GUI) for efficiently rendering 3D scenes in real-time.