diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8feeb1f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +include/ST/ +lib/ diff --git a/config/params.yaml b/config/params.yaml new file mode 100644 index 0000000..c8f188c --- /dev/null +++ b/config/params.yaml @@ -0,0 +1,26 @@ +sensorSettings: + frameSyncEnabled: true + lowLatencyIMU: true + applyExpensiveCorrection: true + depthEnabled: true + infraredEnabled: false + visibleEnabled: true + accelerometerEnabled: false + gyroscopeEnabled: true + depthRangeMode: 0 + infraredResolution: 0 + visibleResolution: 0 + visibleApplyGammaCorrection: true + infraredAutoExposureEnabled: true + imuUpdateRate: 0 + sensorSerial: 0 + sensorInitializationTimeout: 6000 + infraredFramerate: 15.0 + depthFramerate: 15.0 + visibleFramerate: 16.0 + initialInfraredExposure: 0.0146 + initialInfraredGain: 3.0 + disableInfraredIntensityBalance: true + latencyReducerEnabled: false + initialProjectorPower: 1.0 + diff --git a/launch/main.launch b/launch/main.launch new file mode 100644 index 0000000..90c9478 --- /dev/null +++ b/launch/main.launch @@ -0,0 +1,3 @@ + + + diff --git a/src/structure_driver.cpp b/src/structure_driver.cpp index 9613801..8ebade4 100644 --- a/src/structure_driver.cpp +++ b/src/structure_driver.cpp @@ -8,6 +8,7 @@ #include +//#include #include #include #include @@ -378,65 +379,100 @@ int main(int argc, char **argv) { settings.source = ST::CaptureSessionSourceId::StructureCore; /** @brief Set to true to enable frame synchronization between visible or color and depth. */ - settings.frameSyncEnabled = true; + pnh.getParam("/sensorSettings/frameSyncEnabled", settings.frameSyncEnabled) ; + /** @brief Set to true to deliver IMU events on a separate, dedicated background thread. Only supported for Structure Core, currently. */ - settings.lowLatencyIMU = true; + pnh.getParam("/sensorSettings/lowLatencyIMU", settings.lowLatencyIMU); + /** @brief Set to true to apply a correction filter to the depth before streaming. This may effect performance. */ - settings.applyExpensiveCorrection = true; + pnh.getParam("/sensorSettings/applyExpensiveCorrection", settings.applyExpensiveCorrection); + /** @brief Set to true to enable depth streaming. */ - settings.structureCore.depthEnabled = true; + pnh.getParam("/sensorSettings/depthEnabled", settings.structureCore.depthEnabled); + /** @brief Set to true to enable infrared streaming. */ - settings.structureCore.infraredEnabled = false; + pnh.getParam("/sensorSettings/infraredEnabled", settings.structureCore.infraredEnabled); + /** @brief Set to true to enable visible streaming. */ - settings.structureCore.visibleEnabled = true; + pnh.getParam("/sensorSettings/visibleEnabled", settings.structureCore.visibleEnabled); + /** @brief Set to true to enable accelerometer streaming. */ - settings.structureCore.accelerometerEnabled = false; + pnh.getParam("/sensorSettings/accelerometerEnabled", settings.structureCore.accelerometerEnabled); + /** @brief Set to true to enable gyroscope streaming. */ - settings.structureCore.gyroscopeEnabled = false; + pnh.getParam("/sensorSettings/gyroscopeEnabled", settings.structureCore.gyroscopeEnabled); + /** @brief The target resolution for streamed depth frames. @see StructureCoreDepthResolution */ + //pnh.getParam("/sensorSettings/depthResolution", settings.structureCore.depthResolution); settings.structureCore.depthResolution = ST::StructureCoreDepthResolution::SXGA; + + /** @brief The preset depth range mode for streamed depth frames. Modifies the min/max range of the depth values. */ + //pnh.getParam("/sensorSettings/depthRangeMode", settings.structureCore.depthRangeMode); settings.structureCore.depthRangeMode = ST::StructureCoreDepthRangeMode::Default; + /** @brief The target resolution for streamed depth frames. @see StructureCoreInfraredResolution Non-default infrared and visible resolutions are currently unavailable. */ + //pnh.getParam("/sensorSettings/infraredResolution", settings.structureCore.infraredResolution); settings.structureCore.infraredResolution = ST::StructureCoreInfraredResolution::Default; + /** @brief The target resolution for streamed visible frames. @see StructureCoreVisibleResolution Non-default infrared and visible resolutions are currently unavailable. */ - settings.structureCore.visibleResolution = ST::StructureCoreVisibleResolution::Default; - /** @brief Set to true to apply gamma correction to incoming visible frames. */ - settings.structureCore.visibleApplyGammaCorrection = true; - /** @brief Enable auto-exposure for infrared frames. */ - settings.structureCore.infraredAutoExposureEnabled = true; + //pnh.getParam("/sensorSettings/visibleResolution", settings.structureCore.visibleResolution); + settings.structureCore.visibleResolution = ST::StructureCoreVisibleResolution::Default; + /** @brief Specifies how to stream the infrared frames. @see StructureCoreInfraredMode */ - settings.structureCore.infraredMode = ST::StructureCoreInfraredMode::BothCameras; + //pnh.getParam("/sensorSettings/infraredMode", settings.structureCore.infraredMode); + settings.structureCore.infraredMode = ST::StructureCoreInfraredMode::BothCameras; + /** @brief The target stream rate for IMU data. (gyro and accel) */ - settings.structureCore.imuUpdateRate = ST::StructureCoreIMUUpdateRate::Default; + //pnh.getParam("/sensorSettings/imuUpdateRate", settings.structureCore.imuUpdateRate); + settings.structureCore.imuUpdateRate = ST::StructureCoreIMUUpdateRate::Default; + /** @brief Serial number of sensor to stream. If null, the first connected sensor will be used. */ settings.structureCore.sensorSerial = nullptr; + //pnh.getParam("/sensorSettings/sensorSerial", settings.structureCore.sensorSerial); + + /** @brief Set to true to apply gamma correction to incoming visible frames. */ + pnh.getParam("/sensorSettings/visibleApplyGammaCorrection", settings.structureCore.visibleApplyGammaCorrection); + + /** @brief Enable auto-exposure for infrared frames. */ + pnh.getParam("/sensorSettings/infraredAutoExposureEnabled", settings.structureCore.infraredAutoExposureEnabled); + /** @brief Maximum amount of time (in milliseconds) to wait for a sensor to connect before throwing a timeout error. */ - settings.structureCore.sensorInitializationTimeout = 6000; + pnh.getParam("/sensorSettings/sensorInitializationTimeout", settings.structureCore.sensorInitializationTimeout); + /** @brief The target framerate for the infrared camera. If the value is not supported, the default is 30. */ - settings.structureCore.infraredFramerate = 15.f; + pnh.getParam("/sensorSettings/infraredFramerate", settings.structureCore.infraredFramerate); + /** @brief The target framerate for the depth sensor. If the value is not supported, the default is 30. */ - settings.structureCore.depthFramerate = 15.f; + pnh.getParam("/sensorSettings/depthFramerate", settings.structureCore.depthFramerate); + + /** @brief The target framerate for the visible camera. If the value is not supported, the default is 30. */ - settings.structureCore.visibleFramerate = 15.f; + pnh.getParam("/sensorSettings/visibleFramerate", settings.structureCore.visibleFramerate); + /** @brief The initial visible exposure to start streaming with (milliseconds, but set in seconds). */ //settings.structureCore.initialVisibleExposure = 0.033f; + /** @brief The initial visible gain to start streaming with. Can be any number between 1 and 8. */ //settings.structureCore.initialVisibleGain = 4.0f; + /** @brief The initial infrared exposure to start streaming with. */ - settings.structureCore.initialInfraredExposure = 0.0146f; + pnh.getParam("/sensorSettings/initialInfraredExposure", settings.structureCore.initialInfraredExposure); + /** @brief The initial infrared gain to start streaming with. Can be 0, 1, 2, or 3. */ - settings.structureCore.initialInfraredGain = 3; + pnh.getParam("/sensorSettings/initialInfraredGain", settings.structureCore.initialInfraredGain); + /** @brief Setting this to true will eliminate saturation issues, but might result in sparser depth. */ - settings.structureCore.disableInfraredIntensityBalance = true; + pnh.getParam("/sensorSettings/disableInfraredIntensityBalance", settings.structureCore.disableInfraredIntensityBalance); + /** @brief Setting this to true will reduce latency, but might drop more frame */ - settings.structureCore.latencyReducerEnabled = false; + pnh.getParam("/sensorSettings/latencyReducerEnabled", settings.structureCore.latencyReducerEnabled); /** @brief Laser projector power setting from 0.0 to 1.0 inclusive. Projector will only activate if required by streaming configuration. */ - settings.structureCore.initialProjectorPower = 1.0f; + //pnh.getParam("/sensorSettings/settings.structureCore.initialProjectorPower); SessionDelegate delegate(n, pnh); ST::CaptureSession session;