-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1401 from taketwo/add-real-sense
Add RealSense SDK grabber and viewer
- Loading branch information
Showing
12 changed files
with
1,713 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
############################################################################### | ||
# Find Intel RealSense SDK | ||
# | ||
# find_package(RSSDK) | ||
# | ||
# Variables defined by this module: | ||
# | ||
# RSSDK_FOUND True if RealSense SDK was found | ||
# RSSDK_VERSION The version of RealSense SDK | ||
# RSSDK_INCLUDE_DIRS The location(s) of RealSense SDK headers | ||
# RSSDK_LIBRARIES Libraries needed to use RealSense SDK | ||
|
||
find_path(RSSDK_DIR include/pxcversion.h | ||
PATHS "$ENV{RSSDK_DIR}" | ||
"$ENV{PROGRAMFILES}/Intel/RSSDK" | ||
"$ENV{PROGRAMW6432}/Intel/RSSDK" | ||
"C:/Program Files (x86)/Intel/RSSDK" | ||
"C:/Program Files/Intel/RSSDK" | ||
DOC "RealSense SDK directory") | ||
|
||
if(RSSDK_DIR) | ||
|
||
# Include directories | ||
set(RSSDK_INCLUDE_DIRS ${RSSDK_DIR}/include) | ||
mark_as_advanced(RSSDK_INCLUDE_DIRS) | ||
|
||
# Libraries | ||
set(RSSDK_RELEASE_NAME libpxc.lib) | ||
set(RSSDK_DEBUG_NAME libpxc_d.lib) | ||
find_library(RSSDK_LIBRARY | ||
NAMES ${RSSDK_RELEASE_NAME} | ||
PATHS "${RSSDK_DIR}/lib/" NO_DEFAULT_PATH | ||
PATH_SUFFIXES x64 Win32) | ||
find_library(RSSDK_LIBRARY_DEBUG | ||
NAMES ${RSSDK_DEBUG_NAME} ${RSSDK_RELEASE_NAME} | ||
PATHS "${RSSDK_DIR}/lib/" NO_DEFAULT_PATH | ||
PATH_SUFFIXES x64 Win32) | ||
if(NOT RSSDK_LIBRARY_DEBUG) | ||
set(RSSDK_LIBRARY_DEBUG ${RSSDK_LIBRARY}) | ||
endif() | ||
set(RSSDK_LIBRARIES optimized ${RSSDK_LIBRARY} debug ${RSSDK_LIBRARY_DEBUG}) | ||
mark_as_advanced(RSSDK_LIBRARY RSSDK_LIBRARY_DEBUG) | ||
|
||
# Version | ||
set(RSSDK_VERSION 0) | ||
file(STRINGS "${RSSDK_INCLUDE_DIRS}/pxcversion.h" _pxcversion_H_CONTENTS REGEX "#define PXC_VERSION_.*") | ||
set(_RSSDK_VERSION_REGEX "([0-9]+)") | ||
foreach(v MAJOR MINOR BUILD REVISION) | ||
if("${_pxcversion_H_CONTENTS}" MATCHES ".*#define PXC_VERSION_${v} *${_RSSDK_VERSION_REGEX}.*") | ||
set(RSSDK_VERSION_${v} "${CMAKE_MATCH_1}") | ||
endif() | ||
endforeach() | ||
unset(_pxcversion_H_CONTENTS) | ||
set(RSSDK_VERSION "${RSSDK_VERSION_MAJOR}.${RSSDK_VERSION_MINOR}.${RSSDK_VERSION_BUILD}.${RSSDK_VERSION_REVISION}") | ||
|
||
endif() | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(RSSDK | ||
FOUND_VAR RSSDK_FOUND | ||
REQUIRED_VARS RSSDK_LIBRARIES RSSDK_INCLUDE_DIRS | ||
VERSION_VAR RSSDK_VERSION | ||
) | ||
|
||
if(MSVC) | ||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NODEFAULTLIB:LIBCMTD") | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
175 changes: 175 additions & 0 deletions
175
io/include/pcl/io/real_sense/real_sense_device_manager.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,175 @@ | ||
/* | ||
* Software License Agreement (BSD License) | ||
* | ||
* Point Cloud Library (PCL) - www.pointclouds.org | ||
* Copyright (c) 2015-, Open Perception, Inc. | ||
* | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* | ||
* * Redistributions of source code must retain the above copyright | ||
* notice, this list of conditions and the following disclaimer. | ||
* * Redistributions in binary form must reproduce the above | ||
* copyright notice, this list of conditions and the following | ||
* disclaimer in the documentation and/or other materials provided | ||
* with the distribution. | ||
* * Neither the name of the copyright holder(s) nor the names of its | ||
* contributors may be used to endorse or promote products derived | ||
* from this software without specific prior written permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
* POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
*/ | ||
|
||
#ifndef PCL_IO_REAL_SENSE_DEVICE_MANAGER_H | ||
#define PCL_IO_REAL_SENSE_DEVICE_MANAGER_H | ||
|
||
#include <boost/thread.hpp> | ||
#include <boost/utility.hpp> | ||
#include <boost/weak_ptr.hpp> | ||
#include <boost/shared_ptr.hpp> | ||
#include <boost/thread/mutex.hpp> | ||
|
||
#include <pcl/pcl_exports.h> | ||
|
||
#include <pxcsession.h> | ||
#include <pxccapture.h> | ||
#include <pxccapturemanager.h> | ||
|
||
namespace pcl | ||
{ | ||
|
||
class RealSenseGrabber; | ||
|
||
namespace io | ||
{ | ||
|
||
namespace real_sense | ||
{ | ||
|
||
class RealSenseDevice; | ||
|
||
class PCL_EXPORTS RealSenseDeviceManager : boost::noncopyable | ||
{ | ||
|
||
public: | ||
|
||
typedef boost::shared_ptr<RealSenseDeviceManager> Ptr; | ||
|
||
static Ptr& | ||
getInstance () | ||
{ | ||
static Ptr instance; | ||
if (!instance) | ||
{ | ||
boost::mutex::scoped_lock lock (mutex_); | ||
if (!instance) | ||
instance.reset (new RealSenseDeviceManager); | ||
} | ||
return (instance); | ||
} | ||
|
||
inline size_t | ||
getNumDevices () | ||
{ | ||
return (device_list_.size ()); | ||
} | ||
|
||
boost::shared_ptr<RealSenseDevice> | ||
captureDevice (); | ||
|
||
boost::shared_ptr<RealSenseDevice> | ||
captureDevice (size_t index); | ||
|
||
boost::shared_ptr<RealSenseDevice> | ||
captureDevice (const std::string& sn); | ||
|
||
~RealSenseDeviceManager (); | ||
|
||
private: | ||
|
||
struct DeviceInfo | ||
{ | ||
pxcUID iuid; | ||
pxcI32 didx; | ||
std::string serial; | ||
boost::weak_ptr<RealSenseDevice> device_ptr; | ||
inline bool isCaptured () { return (!device_ptr.expired ()); } | ||
}; | ||
|
||
/** If the device is already captured returns a pointer. */ | ||
boost::shared_ptr<RealSenseDevice> | ||
capture (DeviceInfo& device_info); | ||
|
||
RealSenseDeviceManager (); | ||
|
||
/** This function discovers devices that are capable of streaming | ||
* depth data. */ | ||
void | ||
populateDeviceList (); | ||
|
||
boost::shared_ptr<PXCSession> session_; | ||
boost::shared_ptr<PXCCaptureManager> capture_manager_; | ||
|
||
std::vector<DeviceInfo> device_list_; | ||
|
||
static boost::mutex mutex_; | ||
|
||
}; | ||
|
||
class PCL_EXPORTS RealSenseDevice : boost::noncopyable | ||
{ | ||
|
||
public: | ||
|
||
typedef boost::shared_ptr<RealSenseDevice> Ptr; | ||
|
||
inline const std::string& | ||
getSerialNumber () { return (device_id_); } | ||
|
||
inline PXCCapture::Device& | ||
getPXCDevice () { return (*device_); } | ||
|
||
/** Reset the state of given device by releasing and capturing again. */ | ||
static void | ||
reset (RealSenseDevice::Ptr& device) | ||
{ | ||
std::string id = device->getSerialNumber (); | ||
device.reset (); | ||
device = RealSenseDeviceManager::getInstance ()->captureDevice (id); | ||
} | ||
|
||
private: | ||
|
||
friend class RealSenseDeviceManager; | ||
|
||
std::string device_id_; | ||
boost::shared_ptr<PXCCapture> capture_; | ||
boost::shared_ptr<PXCCapture::Device> device_; | ||
|
||
RealSenseDevice (const std::string& id) : device_id_ (id) { }; | ||
|
||
}; | ||
|
||
} // namespace real_sense | ||
|
||
} // namespace io | ||
|
||
} // namespace pcl | ||
|
||
#endif /* PCL_IO_REAL_SENSE_DEVICE_MANAGER_H */ | ||
|
Oops, something went wrong.