Skip to content

Commit cd10caf

Browse files
committed
Windows: fixed CameraRealSense2 driver freezing on close.
1 parent 736cf0e commit cd10caf

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

corelib/include/rtabmap/core/camera/CameraRealSense2.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ class RTABMAP_EXP CameraRealSense2 :
134134
bool dualMode_;
135135
Transform dualExtrinsics_;
136136
std::string jsonConfig_;
137+
bool closing_;
137138

138139
static Transform realsense2PoseRotation_;
139140
static Transform realsense2PoseRotationInv_;

corelib/src/CameraThread.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ CameraThread::CameraThread(Camera * camera, const ParametersMap & parameters) :
7474

7575
CameraThread::~CameraThread()
7676
{
77-
UDEBUG("");
7877
join(true);
7978
delete _camera;
8079
delete _distortionModel;
@@ -139,7 +138,6 @@ void CameraThread::mainLoopBegin()
139138
void CameraThread::mainLoop()
140139
{
141140
UTimer totalTime;
142-
UDEBUG("");
143141
CameraInfo info;
144142
SensorData data = _camera->takeImage(&info);
145143

@@ -161,7 +159,6 @@ void CameraThread::mainLoop()
161159

162160
void CameraThread::mainLoopKill()
163161
{
164-
UDEBUG("");
165162
if(dynamic_cast<CameraFreenect2*>(_camera) != 0)
166163
{
167164
int i=20;

corelib/src/camera/CameraRealSense2.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ CameraRealSense2::CameraRealSense2(
7777
cameraHeight_(480),
7878
cameraFps_(30),
7979
publishInterIMU_(false),
80-
dualMode_(false)
80+
dualMode_(false),
81+
closing_(false)
8182
#endif
8283
{
8384
UDEBUG("");
@@ -86,12 +87,15 @@ CameraRealSense2::CameraRealSense2(
8687
CameraRealSense2::~CameraRealSense2()
8788
{
8889
#ifdef RTABMAP_REALSENSE2
90+
closing_ = true;
8991
try
9092
{
93+
UDEBUG("Closing device(s)...");
9194
for(size_t i=0; i<dev_.size(); ++i)
9295
{
9396
if(dev_[i])
9497
{
98+
UDEBUG("Closing %d sensor(s) from device %d...", (int)dev_[i]->query_sensors().size(), (int)i);
9599
for(rs2::sensor _sensor : dev_[i]->query_sensors())
96100
{
97101
try
@@ -104,6 +108,7 @@ CameraRealSense2::~CameraRealSense2()
104108
UWARN("%s", error.what());
105109
}
106110
}
111+
dev_[i]->hardware_reset(); // To avoid freezing on some Windows computers in the following destructor
107112
delete dev_[i];
108113
}
109114
}
@@ -519,7 +524,14 @@ bool CameraRealSense2::init(const std::string & calibrationFolder, const std::st
519524
{
520525
if (info.was_removed(*dev_[i]))
521526
{
522-
UERROR("The device has been disconnected!");
527+
if (closing_)
528+
{
529+
UDEBUG("The device %d has been disconnected!", i);
530+
}
531+
else
532+
{
533+
UERROR("The device %d has been disconnected!", i);
534+
}
523535
}
524536
}
525537
}

0 commit comments

Comments
 (0)