Go to the documentation of this file.00001
00034 #ifndef MULTISENSE_ROS_RECONFIGURE_H
00035 #define MULTISENSE_ROS_RECONFIGURE_H
00036
00037 #include <boost/shared_ptr.hpp>
00038 #include <boost/thread.hpp>
00039 #include <ros/ros.h>
00040
00041 #include <multisense_lib/MultiSenseChannel.hh>
00042
00043 #include <dynamic_reconfigure/server.h>
00044 #include <multisense_ros/sl_bm_cmv2000Config.h>
00045 #include <multisense_ros/sl_bm_cmv2000_imuConfig.h>
00046 #include <multisense_ros/sl_bm_cmv4000Config.h>
00047 #include <multisense_ros/sl_bm_cmv4000_imuConfig.h>
00048 #include <multisense_ros/sl_sgm_cmv2000_imuConfig.h>
00049 #include <multisense_ros/sl_sgm_cmv4000_imuConfig.h>
00050 #include <multisense_ros/bcam_imx104Config.h>
00051 #include <multisense_ros/st21_sgm_vga_imuConfig.h>
00052 #include <multisense_ros/mono_cmv2000Config.h>
00053 #include <multisense_ros/mono_cmv4000Config.h>
00054
00055 namespace multisense_ros {
00056
00057 class Reconfigure {
00058 public:
00059
00060 Reconfigure(crl::multisense::Channel* driver,
00061 boost::function<void ()> resolutionChangeCallback=0,
00062 boost::function<void (int, int)> borderClipChangeCallback=0);
00063
00064 ~Reconfigure();
00065
00066 void imuCallback(const crl::multisense::imu::Header& header);
00067
00068 private:
00069
00070
00071
00072
00073 void callback_sl_bm_cmv2000 (multisense_ros::sl_bm_cmv2000Config& config, uint32_t level);
00074 void callback_sl_bm_cmv2000_imu (multisense_ros::sl_bm_cmv2000_imuConfig& config, uint32_t level);
00075 void callback_sl_bm_cmv4000 (multisense_ros::sl_bm_cmv4000Config& config, uint32_t level);
00076 void callback_sl_bm_cmv4000_imu (multisense_ros::sl_bm_cmv4000_imuConfig& config, uint32_t level);
00077 void callback_sl_sgm_cmv2000_imu(multisense_ros::sl_sgm_cmv2000_imuConfig& config, uint32_t level);
00078 void callback_sl_sgm_cmv4000_imu(multisense_ros::sl_sgm_cmv4000_imuConfig& config, uint32_t level);
00079 void callback_bcam_imx104 (multisense_ros::bcam_imx104Config& config, uint32_t level);
00080 void callback_st21_vga (multisense_ros::st21_sgm_vga_imuConfig& config, uint32_t level);
00081 void callback_mono_cmv2000 (multisense_ros::mono_cmv2000Config& config, uint32_t level);
00082 void callback_mono_cmv4000 (multisense_ros::mono_cmv4000Config& config, uint32_t level);
00083
00084
00085
00086
00087 bool changeResolution(crl::multisense::image::Config& cfg,
00088 int32_t width, int32_t height, int32_t disparities);
00089 template<class T> void configureSgm(crl::multisense::image::Config& cfg, const T& dyn);
00090 template<class T> void configureCamera(crl::multisense::image::Config& cfg, const T& dyn);
00091 template<class T> void configureCropMode(crl::multisense::image::Config& cfg, const T& dyn);
00092 template<class T> void configureImu(const T& dyn);
00093 template<class T> void configureBorderClip(const T& dyn);
00094
00095
00096
00097
00098 crl::multisense::Channel* driver_;
00099
00100
00101
00102
00103 boost::function<void ()> resolution_change_callback_;
00104
00105
00106
00107
00108 ros::NodeHandle device_nh_;
00109
00110
00111
00112
00113 std::vector<crl::multisense::system::DeviceMode> device_modes_;
00114 uint32_t imu_samples_per_message_;
00115 std::vector<crl::multisense::imu::Config> imu_configs_;
00116
00117
00118
00119
00120 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::sl_bm_cmv2000Config> > server_sl_bm_cmv2000_;
00121 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::sl_bm_cmv2000_imuConfig> > server_sl_bm_cmv2000_imu_;
00122 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::sl_bm_cmv4000Config> > server_sl_bm_cmv4000_;
00123 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::sl_bm_cmv4000_imuConfig> > server_sl_bm_cmv4000_imu_;
00124 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::sl_sgm_cmv2000_imuConfig> > server_sl_sgm_cmv2000_imu_;
00125 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::sl_sgm_cmv4000_imuConfig> > server_sl_sgm_cmv4000_imu_;
00126 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::bcam_imx104Config> > server_bcam_imx104_;
00127 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::st21_sgm_vga_imuConfig> > server_st21_vga_;
00128 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::mono_cmv2000Config> > server_mono_cmv2000_;
00129 boost::shared_ptr< dynamic_reconfigure::Server<multisense_ros::mono_cmv4000Config> > server_mono_cmv4000_;
00130
00131
00132
00133
00134
00135 bool lighting_supported_;
00136 bool motor_supported_;
00137 bool crop_mode_changed_;
00138
00139
00140
00141
00142
00143 enum clip_ {RECTANGULAR, CIRCULAR};
00144
00145 int border_clip_type_;
00146 double border_clip_value_;
00147
00148
00149
00150
00151 boost::function<void (int, int)> border_clip_change_callback_;
00152 };
00153
00154 }
00155
00156 #endif