ros_driver.cpp
Go to the documentation of this file.
1 
34 #include <functional>
35 
36 #include <multisense_ros/laser.h>
37 #include <multisense_ros/camera.h>
38 #include <multisense_ros/pps.h>
39 #include <multisense_ros/imu.h>
40 #include <multisense_ros/status.h>
42 #include <ros/ros.h>
43 
44 using namespace crl::multisense;
45 
46 int main(int argc, char** argvPP)
47 {
48  ros::init(argc, argvPP, "multisense_driver");
49  ros::NodeHandle nh;
50  ros::NodeHandle nh_private_("~");
51 
52  //
53  // Get parameters from ROS/command-line
54 
55  std::string sensor_ip;
56  std::string tf_prefix;
57  int sensor_mtu;
58  int head_id;
59 
60 
61  nh_private_.param<std::string>("sensor_ip", sensor_ip, "10.66.171.21");
62  nh_private_.param<std::string>("tf_prefix", tf_prefix, "multisense");
63  nh_private_.param<int>("sensor_mtu", sensor_mtu, 7200);
64  nh_private_.param<int>("head_id", head_id, -1);
65 
66  Channel *d = NULL;
67 
68  try {
69 
70  RemoteHeadChannel rh_channel = 0;
71  switch(head_id) {
72  case 0:
73  rh_channel = Remote_Head_0;
74  break;
75  case 1:
76  rh_channel = Remote_Head_1;
77  break;
78  case 2:
79  rh_channel = Remote_Head_2;
80  break;
81  case 3:
82  rh_channel = Remote_Head_3;
83  break;
84  default:
85  rh_channel = Remote_Head_VPB;
86  break;
87  }
88 
89  d = Channel::Create(sensor_ip, rh_channel);
90  if (NULL == d) {
91  ROS_ERROR("multisense_ros: failed to create communication channel to sensor @ \"%s\" with head ID %d",
92  sensor_ip.c_str(), rh_channel);
93  return -2;
94  }
95 
96  Status status = d->setMtu(sensor_mtu);
97  if (Status_Ok != status) {
98  ROS_ERROR("multisense_ros: failed to set sensor MTU to %d: %s",
99  sensor_mtu, Channel::statusString(status));
100  Channel::Destroy(d);
101  return -3;
102  }
103 
104  //
105  // Anonymous namespace so objects can deconstruct before channel is destroyed
106  {
107  multisense_ros::Laser laser(d, tf_prefix);
108  multisense_ros::Camera camera(d, tf_prefix);
109  multisense_ros::Pps pps(d);
110  multisense_ros::Imu imu(d, tf_prefix);
111  multisense_ros::Status status(d);
113  std::bind(&multisense_ros::Camera::updateConfig, &camera, std::placeholders::_1),
114  std::bind(&multisense_ros::Camera::borderClipChanged, &camera,
115  std::placeholders::_1, std::placeholders::_2),
117  std::placeholders::_1),
118  std::bind(&multisense_ros::Camera::extrinsicsChanged, &camera,
119  std::placeholders::_1),
121  std::placeholders::_1));
122  ros::spin();
123  }
124 
125  Channel::Destroy(d);
126  return 0;
127 
128  } catch (const std::exception& e) {
129  ROS_ERROR("multisense_ros: caught exception: %s", e.what());
130  Channel::Destroy(d);
131  return -4;
132  }
133 }
d
void maxPointCloudRangeChanged(double range)
Definition: camera.cpp:888
static CRL_CONSTEXPR RemoteHeadChannel Remote_Head_VPB
static const char * statusString(Status status)
static Channel * Create(const std::string &sensorAddress)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
static CRL_CONSTEXPR RemoteHeadChannel Remote_Head_0
static CRL_CONSTEXPR RemoteHeadChannel Remote_Head_2
int16_t RemoteHeadChannel
void borderClipChanged(const BorderClip &borderClipType, double borderClipValue)
Definition: camera.cpp:879
bool param(const std::string &param_name, T &param_val, const T &default_val) const
void updateConfig(const crl::multisense::image::Config &config)
Definition: camera.cpp:2255
void groundSurfaceSplineDrawParametersChanged(const ground_surface_utilities::SplineDrawParameters &spline_draw_params)
Definition: camera.cpp:923
static CRL_CONSTEXPR Status Status_Ok
int main(int argc, char **argvPP)
Definition: ros_driver.cpp:46
void extrinsicsChanged(crl::multisense::system::ExternalCalibration extrinsics)
Definition: camera.cpp:893
static CRL_CONSTEXPR RemoteHeadChannel Remote_Head_1
ROSCPP_DECL void spin()
static void Destroy(Channel *instanceP)
static CRL_CONSTEXPR RemoteHeadChannel Remote_Head_3
int32_t Status
#define ROS_ERROR(...)


multisense_ros
Author(s):
autogenerated on Sat Jun 24 2023 03:01:30