sick_generic_caller.cpp
Go to the documentation of this file.
1 
69 #include <stdio.h>
70 #include <stdlib.h>
71 #include <string.h>
72 #include <signal.h>
73 
75 #include "sick_scan/dataDumper.h"
77 
78 #define MAX_NAME_LEN (1024)
79 
80 
81 #include <algorithm> // for std::min
82 
83 
84 // std::string getVersionInfo();
85 
96 int main(int argc, char** argv)
97 {
98 
99  DataDumper::instance().writeToFileNameWhenBufferIsFull("/tmp/sickscan_debug.csv");
100  char nameId[] = "__name:=";
101  char nameVal[MAX_NAME_LEN] = { 0 };
102  char** argv_tmp; // argv_tmp[0][0] argv_tmp[0] identisch ist zu (*argv_tmp)
103  int argc_tmp;
104  std::string scannerName = "sick_scan";
105 
106  // sick_scan_xd::SickScanImu::imuParserTest();
107 
108  argc_tmp = argc;
109  argv_tmp = argv;
110 
111  const int MAX_STR_LEN = 1024;
112  char nameTagVal[MAX_STR_LEN] = { 0 };
113  char logTagVal[MAX_STR_LEN] = { 0 };
114  char internalDebugTagVal[MAX_STR_LEN] = { 0 };
115  char sensorEmulVal[MAX_STR_LEN] = { 0 };
116 
117  if (argc == 1) // just for testing without calling by roslaunch
118  {
119  strcpy(nameTagVal, "__name:=sick_tim_5xx");
120  strcpy(logTagVal, "__log:=/tmp/tmp.log");
121  strcpy(internalDebugTagVal, "__internalDebug:=1");
122  // strcpy(sensorEmulVal, "__emulSensor:=1");
123  strcpy(sensorEmulVal, "__emulSensor:=0");
124  argc_tmp = 5;
125  argv_tmp = (char**)malloc(sizeof(char*) * argc_tmp);
126 
127  argv_tmp[0] = argv[0];
128  argv_tmp[1] = nameTagVal;
129  argv_tmp[2] = logTagVal;
130  argv_tmp[3] = internalDebugTagVal;
131  argv_tmp[4] = sensorEmulVal;
132 
133  }
134  //
135  std::string versionInfo = std::string("sick_generic_caller V. ") + getVersionInfo();
137 
138 #if defined __ROS_VERSION && __ROS_VERSION == 2
139  // Pass command line arguments to rclcpp.
140  rclcpp::init(argc, argv);
141  bool ros_signal_handler = rclcpp::signal_handlers_installed();
142  ROS_INFO_STREAM("ROS2 signal handler are " << (ros_signal_handler? "" : " NOT") << "installed");
143  if (rclcpp::uninstall_signal_handlers())
144  ROS_INFO_STREAM("ROS2 signal handler uninstalled");
145  else
146  ROS_ERROR_STREAM("## ERROR: Failed to uninstall ROS2 signal handler");
147  rclcpp::NodeOptions node_options;
148  node_options.allow_undeclared_parameters(true);
149  //node_options.automatically_declare_initial_parameters(true);
150  rosNodePtr node = rclcpp::Node::make_shared("sick_scan", "", node_options);
151 #else
152  ros::init(argc, argv, scannerName, ros::init_options::NoSigintHandler); // scannerName holds the node-name
153  // signal(SIGINT, rosSignalHandler);
154  ros::NodeHandle nh("~");
155  rosNodePtr node = &nh;
156 #endif
157  signal(SIGINT, rosSignalHandler); // SIGINT = 2, Ctrl-C or kill -2
158  signal(SIGTERM, rosSignalHandler); // SIGTERM = 15, default kill level
159 
161  for (int i = 0; i < argc_tmp; i++)
162  {
163  if (strstr(argv_tmp[i], nameId) == argv_tmp[i])
164  {
165  strcpy(nameVal, argv_tmp[i] + strlen(nameId));
166  scannerName = nameVal;
167  }
168  ROS_INFO_STREAM("Program argument " << (i+1) << ": " << argv_tmp[i]);
169  }
170  ROS_INFO_STREAM("==========================================");
171 
172  int result = 0;
173  try
174  {
175  // result = mainGenericLaser(argc_tmp, argv_tmp, scannerName, node);
176  if (!startGenericLaser(argc_tmp, argv_tmp, scannerName, node, &result))
177  {
178  ROS_ERROR_STREAM("## ERROR in sick_generic_caller::main(): startGenericLaser() failed, could not start generic laser event loop");
179  }
180  else
181  {
182  rosSpin(node);
183  }
186  }
187  catch(const std::exception& e)
188  {
189  ROS_ERROR_STREAM("## ERROR in sick_generic_caller::main(): exception " << e.what());
190  }
191  catch(...)
192  {
193  ROS_ERROR_STREAM("## ERROR in sick_generic_caller::main(): unknown exception ");
194  }
195 
196  return result;
197 }
sick_generic_laser.h
ros::init
ROSCPP_DECL void init(const M_string &remappings, const std::string &name, uint32_t options=0)
alternate ROS initialization function.
DataDumper::instance
static DataDumper & instance()
Definition: dataDumper.h:15
DataDumper::writeToFileNameWhenBufferIsFull
int writeToFileNameWhenBufferIsFull(std::string filename)
Definition: dataDumper.cpp:61
angle_compensator.h
joinGenericLaser
void joinGenericLaser(void)
Waits until all GenericLaser jobs finished.
Definition: sick_generic_laser.cpp:855
roswrap::param::init
void init(const M_string &remappings)
Definition: param_modi.cpp:809
ROS_INFO_STREAM
#define ROS_INFO_STREAM(...)
Definition: sick_scan_ros2_example.cpp:71
versionInfo
static std::string versionInfo
Definition: sick_generic_laser.cpp:113
polar_to_cartesian_pointcloud_ros1.node
node
Definition: polar_to_cartesian_pointcloud_ros1.py:81
getVersionInfo
std::string getVersionInfo()
Definition: sick_generic_laser.cpp:121
ros::NodeHandle
rosSpin
void rosSpin(rosNodePtr nh)
Definition: sick_ros_wrapper.h:207
MAX_STR_LEN
static const int MAX_STR_LEN
Definition: sick_scan_common.cpp:118
startGenericLaser
bool startGenericLaser(int argc, char **argv, std::string nodeName, rosNodePtr nhPriv, int *exit_code)
Runs mainGenericLaser non-blocking in a new thread.
Definition: sick_generic_laser.cpp:837
dataDumper.h
ROS_ERROR_STREAM
#define ROS_ERROR_STREAM(...)
Definition: sick_scan_ros2_example.cpp:72
stopScannerAndExit
bool stopScannerAndExit(bool force_immediate_shutdown)
Definition: sick_generic_laser.cpp:190
setVersionInfo
void setVersionInfo(std::string _versionInfo)
Definition: sick_generic_laser.cpp:116
MAX_NAME_LEN
#define MAX_NAME_LEN
Definition: sick_generic_caller.cpp:78
ros::init_options::NoSigintHandler
NoSigintHandler
main
int main(int argc, char **argv)
Startup routine - if called with no argmuments we assume debug session. Set scanner name variable by ...
Definition: sick_generic_caller.cpp:96
rosSignalHandler
void rosSignalHandler(int signalRecv)
Definition: sick_generic_laser.cpp:211
ros::NodeHandle


sick_scan_xd
Author(s): Michael Lehning , Jochen Sprickerhof , Martin Günther
autogenerated on Fri Oct 25 2024 02:47:10