Skip to content

Commit 39efd7d

Browse files
author
Matevz Morato
committed
Handle boolean auto calibration mode overrides
1 parent df37e59 commit 39efd7d

3 files changed

Lines changed: 22 additions & 2 deletions

File tree

depthai_ros_driver/include/depthai_ros_driver/param_handlers/driver_param_handler.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class DriverParamHandler : public BaseParamHandler {
2222
explicit DriverParamHandler(std::shared_ptr<rclcpp::Node> node, const std::string& name, const std::string& deviceName = "", bool rsCompat = false);
2323
~DriverParamHandler();
2424
void declareParams();
25+
std::string getPipelineAutoCalibrationMode();
2526
dai::UsbSpeed getUSBSpeed();
2627

2728
private:

depthai_ros_driver/src/driver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ void Driver::getDeviceType() {
192192

193193
void Driver::createPipeline() {
194194
generator = std::make_unique<pipeline_gen::PipelineGenerator>();
195-
const auto autoCalibrationMode = ph->getParam<std::string>("i_pipeline_auto_calibration_mode");
195+
const auto autoCalibrationMode = ph->getPipelineAutoCalibrationMode();
196196
if(!autoCalibrationMode.empty()) {
197197
pipeline->setAutoCalibrationMode(utils::parsePipelineAutoCalibrationMode(autoCalibrationMode));
198198
}

depthai_ros_driver/src/param_handlers/driver_param_handler.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
#include "depthai_ros_driver/utils.hpp"
55
#include "rclcpp/logger.hpp"
66
#include "rclcpp/node.hpp"
7+
#include "rclcpp/parameter.hpp"
8+
#include "rclcpp/parameter_value.hpp"
9+
10+
#include <stdexcept>
711

812
namespace depthai_ros_driver {
913
namespace param_handlers {
@@ -22,6 +26,17 @@ DriverParamHandler::~DriverParamHandler() = default;
2226
dai::UsbSpeed DriverParamHandler::getUSBSpeed() {
2327
return utils::getValFromMap(getParam<std::string>("i_usb_speed"), usbSpeedMap);
2428
}
29+
std::string DriverParamHandler::getPipelineAutoCalibrationMode() {
30+
rclcpp::Parameter param;
31+
getROSNode()->get_parameter(getFullParamName("i_pipeline_auto_calibration_mode"), param);
32+
if(param.get_type() == rclcpp::ParameterType::PARAMETER_STRING) {
33+
return param.as_string();
34+
}
35+
if(param.get_type() == rclcpp::ParameterType::PARAMETER_BOOL) {
36+
return param.as_bool() ? "ON_START" : "OFF";
37+
}
38+
throw std::invalid_argument("Invalid driver.i_pipeline_auto_calibration_mode parameter type. Use OFF, ON_START, CONTINUOUS, empty, true, or false.");
39+
}
2540
void DriverParamHandler::declareParams() {
2641
declareAndLogParam<bool>("i_enable_ir", true);
2742
declareAndLogParam<std::string>("i_usb_speed", "SUPER");
@@ -31,7 +46,11 @@ void DriverParamHandler::declareParams() {
3146
declareAndLogParam<bool>("i_pipeline_dump", false);
3247
declareAndLogParam<bool>("i_calibration_dump", false);
3348
declareAndLogParam<std::string>("i_external_calibration_path", "");
34-
declareAndLogParam<std::string>("i_pipeline_auto_calibration_mode", "");
49+
auto autoCalibrationDescriptor = rcl_interfaces::msg::ParameterDescriptor();
50+
autoCalibrationDescriptor.dynamic_typing = true;
51+
if(!getROSNode()->has_parameter(getFullParamName("i_pipeline_auto_calibration_mode"))) {
52+
getROSNode()->declare_parameter(getFullParamName("i_pipeline_auto_calibration_mode"), rclcpp::ParameterValue(std::string()), autoCalibrationDescriptor);
53+
}
3554
declareAndLogParam<float>("r_laser_dot_intensity", 0.6, getRangedFloatDescriptor(0.0, 1.0));
3655
declareAndLogParam<float>("r_floodlight_intensity", 0.6, getRangedFloatDescriptor(0.0, 1.0));
3756
declareAndLogParam<bool>("i_restart_on_diagnostics_error", false);

0 commit comments

Comments
 (0)