diff --git a/CMakeLists.txt b/CMakeLists.txt index fb1be61..91bde50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,8 +6,8 @@ cmake_minimum_required(VERSION 2.8.3) # build options: set OFF for relese version, ON for development and test -option(ENABLE_EMULATOR "Build emulator for offline and unittests" OFF) # OFF (release) or ON (development) -option(BUILD_DEBUG_TARGET "Build debug target" OFF) # OFF (release) or ON (development) +option(ENABLE_EMULATOR "Build emulator for offline and unittests" ON) # OFF (release) or ON (development) +option(BUILD_DEBUG_TARGET "Build debug target" ON) # OFF (release) or ON (development) # set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") # set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpedantic") diff --git a/README.md b/README.md old mode 100644 new mode 100755 index e1bf31b..58fde00 --- a/README.md +++ b/README.md @@ -213,7 +213,7 @@ The use of the parameters can be looked up in the launch files. This is also rec - Angle compensation: For highest angle accuracy the NAV-Lidar series supports an [angle compensation mechanism](./doc/angular_compensation.md). -- The **TiM7xxS** family has [extended settings for field monitoring](./doc/tim7xxs_extensions.md). +- The **TiM7xx** and **TiM7xxS** families have [extended settings for field monitoring](./doc/tim7xxs_extensions.md). ## Sopas Mode This driver supports both COLA-B (binary) and COLA-A (ASCII) communication with the laser scanner. Binary mode is activated by default. Since this mode generates less network traffic. diff --git a/doc/tim7xxs_extensions.md b/doc/tim7xxs_extensions.md index 438210e..e9761df 100755 --- a/doc/tim7xxs_extensions.md +++ b/doc/tim7xxs_extensions.md @@ -1,12 +1,12 @@ # Extensions for TiM7xxS -The TiM7xxS family has the following extended settings for field monitoring: +The TiM7xx and TiM7xxS families have the following extended settings for field monitoring: ## Field monitoring messages -TiM7xxS scanner support field monitoring. Fields can be configured by Sopas ET. Once they are configured, sick_scan publishes ros messages containing the monitoring information from the lidar. +TiM7xx and TiM7xxS scanner support field monitoring. Fields can be configured by Sopas ET. Once they are configured, sick_scan publishes ros messages containing the monitoring information from the lidar. -By default, field monitoring is enabled in the launch file [sick_tim_7xxS.launch](../launch/sick_tim_7xxS.launch) by following settings: +By default, field monitoring is enabled in the launch file [sick_tim_7xx.launch](../launch/sick_tim_7xx.launch) resp. [sick_tim_7xxS.launch](../launch/sick_tim_7xxS.launch) by following settings: ``` diff --git a/driver/src/sick_generic_parser.cpp b/driver/src/sick_generic_parser.cpp index c6cdcc0..6542d81 100644 --- a/driver/src/sick_generic_parser.cpp +++ b/driver/src/sick_generic_parser.cpp @@ -332,13 +332,16 @@ namespace sick_scan return (useSafetyPasWD); } - bool ScannerBasicParam::getUseSafetyFields(){ - return(useSafetyFields); + EVAL_FIELD_SUPPORT ScannerBasicParam::getUseEvalFields() + { + return this->useEvalFields; } - void ScannerBasicParam::setUseSafetyFields(bool _useSafetyFields){ - this->useSafetyFields=_useSafetyFields; + void ScannerBasicParam::setUseEvalFields(EVAL_FIELD_SUPPORT _useEvalFields) + { + this->useEvalFields = _useEvalFields; } + /*! \brief Construction of parameter object @@ -346,7 +349,7 @@ namespace sick_scan ScannerBasicParam::ScannerBasicParam() : numberOfLayers(0), numberOfShots(0), numberOfMaximumEchos(0), elevationDegreeResolution(0), angleDegressResolution(0), expectedFrequency(0), useBinaryProtocol(false), IntensityResolutionIs16Bit(false), deviceIsRadar(false), useSafetyPasWD(false), encoderMode(0), - CartographerCompatibility(false), scanMirroredAndShifted(false), useSafetyFields(false) + CartographerCompatibility(false), scanMirroredAndShifted(false), useEvalFields(EVAL_FIELD_UNSUPPORTED) { this->elevationDegreeResolution = 0.0; this->setUseBinaryProtocol(false); @@ -420,7 +423,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_LMS_1XXX_NAME) == 0) // LMS1000 - 4 layer, 1101 shots per scan @@ -436,7 +439,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_TIM_240_NAME) == 0) // TIM_5xx - 1 Layer, max. 811 shots per scan @@ -451,7 +454,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_TIM_5XX_NAME) == @@ -467,8 +470,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); - + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_LMS_4XXX_NAME) == 0) // LMS_4xxx - 1 Layer, 600 Hz { @@ -482,7 +484,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_TIM_7XX_NAME) == 0) // TIM_7xx - 1 Layer Scanner { @@ -496,7 +498,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(USE_EVAL_FIELD_TIM7XX_LOGIC); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_TIM_7XXS_NAME) == 0) // TIM_7xxS - 1 layer Safety Scanner { @@ -510,7 +512,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(true); // Safety scanner basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(true); + basicParams[i].setUseEvalFields(USE_EVAL_FIELD_TIM7XX_LOGIC); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_LMS_5XX_NAME) == 0) // LMS_5xx - 1 Layer { @@ -524,7 +526,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_LMS_1XX_NAME) == 0) // LMS_1xx - 1 Layer { @@ -538,7 +540,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_MRS_6XXX_NAME) == 0) // { @@ -553,7 +555,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_RMS_3XX_NAME) == 0) // Radar @@ -569,7 +571,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_NAV_3XX_NAME) == 0) // Nav 3xx { @@ -581,7 +583,7 @@ namespace sick_scan basicParams[i].setUseBinaryProtocol(true); basicParams[i].setDeviceIsRadar(false); // Default basicParams[i].setScanMirroredAndShifted(true); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_NAV_2XX_NAME) == 0) // NAV_2xx - 1 Layer { @@ -595,7 +597,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } if (basicParams[i].getScannerName().compare(SICK_SCANNER_TIM_4XX_NAME) == 0) // TiM433 and TiM443 { @@ -609,7 +611,7 @@ namespace sick_scan basicParams[i].setUseSafetyPasWD(false); // Default basicParams[i].setEncoderMode(-1); // Default basicParams[i].setScanMirroredAndShifted(false); - basicParams[i].setUseSafetyFields(false); + basicParams[i].setUseEvalFields(EVAL_FIELD_UNSUPPORTED); } } diff --git a/driver/src/sick_scan_common.cpp b/driver/src/sick_scan_common.cpp index 20bd085..7f4c002 100644 --- a/driver/src/sick_scan_common.cpp +++ b/driver/src/sick_scan_common.cpp @@ -371,7 +371,7 @@ namespace sick_scan publish_lferec_ = false; publish_lidoutputstate_ = false; const std::string scannername = parser_->getCurrentParamPtr()->getScannerName(); - if (scannername.compare(SICK_SCANNER_TIM_7XXS_NAME) == 0) + if (parser_->getCurrentParamPtr()->getUseEvalFields() == USE_EVAL_FIELD_TIM7XX_LOGIC) { lferec_pub_ = nh_.advertise(scannername + "/lferec", 100); lidoutputstate_pub_ = nh_.advertise(scannername + "/lidoutputstate", 100); @@ -435,7 +435,7 @@ namespace sick_scan printf("\nSOPAS - Stopped streaming scan data.\n"); } - if (parser_->getCurrentParamPtr()->getScannerName().compare(SICK_SCANNER_TIM_7XXS_NAME) == 0) + if (parser_->getCurrentParamPtr()->getUseEvalFields() == USE_EVAL_FIELD_TIM7XX_LOGIC) { if(sendSOPASCommand("\x02sEN LFErec 0\x03", NULL) != 0 // TiM781S: deactivate LFErec messages, send "sEN LFErec 0" || sendSOPASCommand("\x02sEN LIDoutputstate 0\x03", NULL) != 0 // TiM781S: deactivate LIDoutputstate messages, send "sEN LIDoutputstate 0" @@ -1170,13 +1170,11 @@ namespace sick_scan bool rssiFlag = false; bool rssiResolutionIs16Bit = true; //True=16 bit Flase=8bit - // bool useSafetyfields=false; int activeEchos = 0; ros::NodeHandle pn("~"); pn.getParam("intensity", rssiFlag); pn.getParam("intensity_resolution_16bit", rssiResolutionIs16Bit); - // pn.getParam("use_safety_fields", useSafetyfields); //check new ip adress and add cmds to write ip to comand chain std::string sNewIPAddr = ""; boost::asio::ip::address_v4 ipNewIPAddr; @@ -1215,7 +1213,6 @@ namespace sick_scan } this->parser_->getCurrentParamPtr()->setIntensityResolutionIs16Bit(rssiResolutionIs16Bit); - // this->parser_->getCurrentParamPtr()->setUseSafetyFields(useSafetyfields); // parse active_echos entry and set flag array pn.getParam("active_echos", activeEchos); @@ -2106,7 +2103,7 @@ namespace sick_scan } //SAFTY FIELD PARSING - if (this->parser_->getCurrentParamPtr()->getUseSafetyFields()) + if (this->parser_->getCurrentParamPtr()->getUseEvalFields() == USE_EVAL_FIELD_TIM7XX_LOGIC) { ROS_INFO("Reading safety fields"); SickScanFieldMonSingleton *fieldMon = SickScanFieldMonSingleton::getInstance(); @@ -2443,7 +2440,7 @@ namespace sick_scan startProtocolSequence.push_back(CMD_RUN); // leave user level startProtocolSequence.push_back(CMD_START_SCANDATA); - if (parser_->getCurrentParamPtr()->getScannerName().compare(SICK_SCANNER_TIM_7XXS_NAME) == 0) + if (parser_->getCurrentParamPtr()->getUseEvalFields() == USE_EVAL_FIELD_TIM7XX_LOGIC) { // Activate LFErec, LIDoutputstate and LIDinputstate messages diff --git a/include/sick_scan/sick_generic_parser.h b/include/sick_scan/sick_generic_parser.h index 9b8ed42..e01a8b8 100644 --- a/include/sick_scan/sick_generic_parser.h +++ b/include/sick_scan/sick_generic_parser.h @@ -58,6 +58,15 @@ // namespace sensor_msgs namespace sick_scan { + enum EVAL_FIELD_SUPPORT // type of eval field support: + { + EVAL_FIELD_UNSUPPORTED = 0, // Lidar does not support eval field (default) + USE_EVAL_FIELD_TIM7XX_LOGIC, // eval fields supported by TiM7xx and TiM7xxS + USE_EVAL_FIELD_LMS5XX_LOGIC, // eval fields supported by LMS5XX + USE_EVAL_FIELD_LMS5XX_UNSUPPORTED, // eval fields not supported by LMS5XX + USE_EVAL_FIELD_NUM // max number of eval field support types + }; + class ScannerBasicParam { public: @@ -115,9 +124,9 @@ namespace sick_scan int8_t getEncoderMode(); - bool getUseSafetyFields(); + EVAL_FIELD_SUPPORT getUseEvalFields(); - void setUseSafetyFields(bool _useSafetyFields); + void setUseEvalFields(EVAL_FIELD_SUPPORT _useEvalFields); private: std::string scannerName; @@ -134,7 +143,7 @@ namespace sick_scan int8_t encoderMode; bool CartographerCompatibility; bool scanMirroredAndShifted; - bool useSafetyFields; + EVAL_FIELD_SUPPORT useEvalFields; }; diff --git a/launch/sick_tim_7xx.launch b/launch/sick_tim_7xx.launch index 9e9471a..6327fc3 100644 --- a/launch/sick_tim_7xx.launch +++ b/launch/sick_tim_7xx.launch @@ -36,6 +36,10 @@ + + + + diff --git a/launch/sick_tim_7xxS.launch b/launch/sick_tim_7xxS.launch index 809d404..af20c21 100644 --- a/launch/sick_tim_7xxS.launch +++ b/launch/sick_tim_7xxS.launch @@ -36,7 +36,7 @@ - + diff --git a/test/emulator/config/rviz_emulator_cfg.rviz b/test/emulator/config/rviz_emulator_cfg.rviz index a579708..7303d46 100755 --- a/test/emulator/config/rviz_emulator_cfg.rviz +++ b/test/emulator/config/rviz_emulator_cfg.rviz @@ -8,6 +8,7 @@ Panels: - /PointCloud21 - /Axes1 - /MarkerArray1 + - /MarkerArray2 Splitter Ratio: 0.5 Tree Height: 799 - Class: rviz/Selection @@ -70,7 +71,7 @@ Visualization Manager: Enabled: true Invert Rainbow: false Max Color: 255; 255; 255 - Max Intensity: 39172 + Max Intensity: 38513 Min Color: 0; 0; 0 Min Intensity: 0 Name: PointCloud2 @@ -94,12 +95,20 @@ Visualization Manager: Value: true - Class: rviz/MarkerArray Enabled: true - Marker Topic: /sick_tim_7xxS/marker + Marker Topic: /sick_tim_7xx/marker Name: MarkerArray Namespaces: sick_scan: true Queue Size: 100 Value: true + - Class: rviz/MarkerArray + Enabled: true + Marker Topic: /sick_tim_7xxS/marker + Name: MarkerArray + Namespaces: + {} + Queue Size: 100 + Value: true Enabled: true Global Options: Background Color: 48; 48; 48 diff --git a/test/scripts/run_simu_tim781s.bash b/test/scripts/run_simu_tim781s.bash deleted file mode 100755 index bcec043..0000000 --- a/test/scripts/run_simu_tim781s.bash +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -printf "\033c" -echo -e "run_simu_tim781.bash: starting TiM781S emulation\n" -pushd ../../../.. -source /opt/ros/melodic/setup.bash -source ./install/setup.bash - -# Start roscore if not yet running -roscore_running=`(ps -elf | grep roscore | grep -v grep | wc -l)` -if [ $roscore_running -lt 1 ] ; then - roscore & - sleep 3 -fi - -for emulator_launch_cfg in emulator_01_default.launch emulator_03_2nd_fieldset.launch emulator_02_toggle_fieldsets.launch ; do # emulator_04_fieldset_test.launch - echo -e "Starting TiM781S emulation $emulator_launch_cfg, shutdown ros nodes\n" - - # Start sick_scan emulator - roslaunch sick_scan $emulator_launch_cfg & - sleep 1 - - # Start rviz - # Note: Due to a bug in opengl 3 in combination with rviz and VMware, opengl 2 should be used by rviz option --opengl 210 - # See https://github.com/ros-visualization/rviz/issues/1444 and https://github.com/ros-visualization/rviz/issues/1508 for further details - rosrun rviz rviz -d ./src/sick_scan/test/emulator/config/rviz_emulator_cfg.rviz --opengl 210 & - sleep 1 - - # Start sick_scan driver for TiM781S - # roslaunch sick_scan sick_tim_7xx.launch hostname:=127.0.0.1 & - roslaunch sick_scan sick_tim_7xxS.launch hostname:=127.0.0.1 & - sleep 1 - - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN LIDoutputstate 1'}" - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN LIDoutputstate'}" - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN LFErec 1'}" - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN LFErec'}" - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN field000 1'}" - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN field000'}" - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN LIDinputstate 1'}" - # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN LIDinputstate'}" # response: "sRA LIDinputstate \\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00" - # rostopic echo "/sick_tim_7xxS/lferec" & - # rostopic echo "/sick_tim_7xxS/lidoutputstate" & - - # Wait for 'q' or 'Q' to exit or until rviz is closed - while true ; do - echo -e "TiM781S emulation running. Close rviz or press 'q' to exit..." ; read -t 1.0 -n1 -s key - if [[ $key = "q" ]] || [[ $key = "Q" ]]; then break ; fi - rviz_running=`(ps -elf | grep rviz | grep -v grep | wc -l)` - if [ $rviz_running -lt 1 ] ; then break ; fi - done - - # Shutdown - echo -e "Finishing TiM781S emulation $emulator_launch_cfg, shutdown ros nodes\n" - rosnode kill -a ; sleep 1 - killall sick_generic_caller ; sleep 1 - killall sick_scan_emulator ; sleep 1 - -done -killall rosmaster ; sleep 1 -echo -e "run_simu_tim781.bash: TiM781S emulation finished.\n\n" - -popd - diff --git a/test/scripts/run_simu_tim7xx_tim7xxS.bash b/test/scripts/run_simu_tim7xx_tim7xxS.bash new file mode 100755 index 0000000..d7bcd99 --- /dev/null +++ b/test/scripts/run_simu_tim7xx_tim7xxS.bash @@ -0,0 +1,68 @@ +#!/bin/bash +printf "\033c" +pushd ../../../.. +source /opt/ros/melodic/setup.bash +source ./install/setup.bash + +for sick_scan_launch_file in sick_tim_7xx.launch sick_tim_7xxS.launch ; do + echo -e "run_simu_tim7xx_tim7xxS.bash: starting TiM7xx/TiM7xxS emulation with $sick_scan_launch_file\n" + + # Start roscore if not yet running + roscore_running=`(ps -elf | grep roscore | grep -v grep | wc -l)` + if [ $roscore_running -lt 1 ] ; then + roscore & + sleep 3 + fi + + for emulator_launch_cfg in emulator_01_default.launch emulator_03_2nd_fieldset.launch emulator_02_toggle_fieldsets.launch ; do # emulator_04_fieldset_test.launch + echo -e "Starting TiM7xx/TiM7xxS emulation $emulator_launch_cfg\n" + + # Start sick_scan emulator + roslaunch sick_scan $emulator_launch_cfg & + sleep 1 + + # Start rviz + # Note: Due to a bug in opengl 3 in combination with rviz and VMware, opengl 2 should be used by rviz option --opengl 210 + # See https://github.com/ros-visualization/rviz/issues/1444 and https://github.com/ros-visualization/rviz/issues/1508 for further details + rosrun rviz rviz -d ./src/sick_scan/test/emulator/config/rviz_emulator_cfg.rviz --opengl 210 & + sleep 1 + + # Start sick_scan driver for TiM7xx/TiM7xxS + echo -e "Launching sick_scan $sick_scan_launch_file\n" + roslaunch sick_scan $sick_scan_launch_file hostname:=127.0.0.1 & + sleep 1 + + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN LIDoutputstate 1'}" + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN LIDoutputstate'}" + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN LFErec 1'}" + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN LFErec'}" + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN field000 1'}" + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN field000'}" + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sEN LIDinputstate 1'}" + # rosservice call /sick_tim_7xx/ColaMsg "{request: 'sRN LIDinputstate'}" # response: "sRA LIDinputstate \\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00" + # rostopic echo "/sick_tim_7xxS/lferec" & + # rostopic echo "/sick_tim_7xxS/lidoutputstate" & + + # Wait for 'q' or 'Q' to exit or until rviz is closed + while true ; do + echo -e "TiM7xx/TiM7xxS emulation running ($sick_scan_launch_file, $emulator_launch_cfg). Close rviz or press 'q' to exit..." ; read -t 1.0 -n1 -s key + if [[ $key = "q" ]] || [[ $key = "Q" ]]; then break ; fi + rviz_running=`(ps -elf | grep rviz | grep -v grep | wc -l)` + if [ $rviz_running -lt 1 ] ; then break ; fi + done + + # Shutdown + echo -e "Finishing TiM7xx/TiM7xxS emulation $emulator_launch_cfg, shutdown ros nodes\n" + rosnode kill -a ; sleep 1 + killall sick_generic_caller ; sleep 1 + killall sick_scan_emulator ; sleep 1 + + done + killall rosmaster ; sleep 1 + echo -e "run_simu_tim7xx_tim7xxS.bash: TiM7xx/TiM7xxS emulation finished.\n\n" + +done +echo -e "run_simu_tim7xx_tim7xxS.bash: TiM7xx/TiM7xxS emulation finished.\n\n" + +popd + diff --git a/test/scripts/vs_code.bash b/test/scripts/vs_code.bash index 9e38552..2f61df5 100755 --- a/test/scripts/vs_code.bash +++ b/test/scripts/vs_code.bash @@ -1,6 +1,6 @@ #!/bin/bash -gedit ./make.bash ./run_simu_tim781s.bash & +gedit ./make.bash ./run_simu_tim7xx_tim7xxS.bash & pushd ../../../.. source /opt/ros/melodic/setup.bash