Skip to content

Commit

Permalink
Merge pull request #125 from SICKAG/feature/lms1xxx-support
Browse files Browse the repository at this point in the history
LMS 1xxx support
  • Loading branch information
rostest authored Nov 10, 2022
2 parents bf11d6c + 57be1b5 commit 15cdaef
Show file tree
Hide file tree
Showing 25 changed files with 1,139 additions and 47 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ features that will be removed in future versions **Removed** for deprecated feat

## Released ##

### v2.8.11 - LMS 1xxx support
- **Update** LMS 1xxx support with scan configuration (scan frequency and angular resolution for firmware 2.x)

### v2.8.10 - RMS ascii emulator and tests
- **Update** RMS ascii emulator and tests
- **Update** RMS2xxx support

### v2.8.9 - MRS-1000 layer angle conversion, improved MRS 1xxx support
- **Fixed** MRS-1000 layer angle conversion for slam support
Expand Down
41 changes: 21 additions & 20 deletions REQUIREMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,44 +6,45 @@ Driver for SICK lidar and radar sensors - supported scanner types:

| **device name** | **part no.** | **description** | **tested?** |
|--------------------|------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------|:---------------:|
| MRS6124 | [6065086](https://www.sick.com/de/en/detection-and-ranging-solutions/3d-lidar-sensors/mrs6000/c/g448151) | 24 layer max. range: 200 m, ang. resol. 0.13 [deg] hor., 0.0625 [deg] ver. The SICK MRS6124 is a multi-layer, multi-echo 3D laser scanner that is geared towards rough outdoor environments. | ? [stable]|
| MRS6124 | [6065086](https://www.sick.com/de/en/detection-and-ranging-solutions/3d-lidar-sensors/mrs6000/c/g448151) | 24 layer max. range: 200 m, ang. resol. 0.13 [deg] hor., 0.0625 [deg] ver. The SICK MRS6124 is a multi-layer, multi-echo 3D laser scanner that is geared towards rough outdoor environments. | [stable]|
| | Scan-Rate: 10 Hz | |
| MRS1104 | [1081208](https://www.sick.com/sg/en/detection-and-ranging-solutions/3d-lidar-sensors/mrs1000/mrs1104c-111011/p/p495044) | 4 layer max. range: 64 m, ang. resol. 0.25 [deg] hor., 2.50 [deg] ver. | ? [stable]|
| MRS1104 | [1081208](https://www.sick.com/sg/en/detection-and-ranging-solutions/3d-lidar-sensors/mrs1000/mrs1104c-111011/p/p495044) | 4 layer max. range: 64 m, ang. resol. 0.25 [deg] hor., 2.50 [deg] ver. | [stable]|
| | | Scan-Rate: 50 Hz, 4x12.5 Hz | |
| | | Scan-Rate: 150 Hz, 4x37.5 Hz | |
| TiM240 | [1104981](https://www.sick.com/ag/en/detection-and-ranging-solutions/2d-lidar-sensors/tim2xx/tim240-2050300/p/p654443) | 1 layer max. range: 10 m, ang. resol. 1.00 [deg], 240 [deg]| ? [stable]|
| TiM240 | [1104981](https://www.sick.com/ag/en/detection-and-ranging-solutions/2d-lidar-sensors/tim2xx/tim240-2050300/p/p654443) | 1 layer max. range: 10 m, ang. resol. 1.00 [deg], 240 [deg]| [stable]|
| | | Scan-Rate: 14.5 Hz | |
| TiM551 | [1060445](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/tim5xx/tim551-2050001/p/p343045) | 1 layer max. range: 10 m, ang. resol. 1.00[deg] | ? [stable]|
| TiM551 | [1060445](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/tim5xx/tim551-2050001/p/p343045) | 1 layer max. range: 10 m, ang. resol. 1.00[deg] | [stable]|
| | | Scan-Rate: 15 Hz | |
| TiM561 | [1071419](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/tim5xx/tim561-2050101/p/p369446) | 1 layer max. range: 10 m, ang. resol. 0.33 [deg]| ? [stable]|
| TiM561 | [1071419](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/tim5xx/tim561-2050101/p/p369446) | 1 layer max. range: 10 m, ang. resol. 0.33 [deg]| [stable]|
| | | Scan-Rate: 15 Hz | |
| TiM571 | [1079742](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/tim5xx/tim571-2050101/p/p412444) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| ? [stable]|
| TiM571 | [1079742](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/tim5xx/tim571-2050101/p/p412444) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| [stable]|
| | | Scan-Rate: 15 Hz | |
| TiM771S | [1105052](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/tim7xx/tim771s-2174104/p/p660929) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| ? [stable]|
| TiM771S | [1105052](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/tim7xx/tim771s-2174104/p/p660929) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| [stable]|
| | | Scan-Rate: 15 Hz | |
| TiM781 | [1096807](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/tim7xx/tim781-2174101/p/p594148) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| ? [stable]|
| TiM781 | [1096807](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/tim7xx/tim781-2174101/p/p594148) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| [stable]|
| | | Scan-Rate: 15 Hz | |
| TiM781S | [1096363](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/tim7xx/tim781s-2174104/p/p594149) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| ? [stable]|
| TiM781S | [1096363](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/tim7xx/tim781s-2174104/p/p594149) | 1 layer max. range: 25 m, ang. resol. 0.33 [deg]| [stable]|
| | | Scan-Rate: 15 Hz | |
| LMS511-10100 PRO | [e.g. 1046135](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/lms5xx/c/g179651) | 1 layer max. range: 80 m, ang. resol. 0.167 [deg]| ? [stable]|
| LMS511-10100 PRO | [e.g. 1046135](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/lms5xx/c/g179651) | 1 layer max. range: 80 m, ang. resol. 0.167 [deg]| [stable]|
| | | Scan-Rate: 100 Hz | |
| LMS1104 | [1092445](https://www.sick.com/ag/en/detection-and-ranging-solutions/2d-lidar-sensors/lms1000/c/g387151) | 1 layer max. range: 64 m, ang. resol. 0.25 [deg] | ? [stable]|
| LMS1104 | [1092445](https://www.sick.com/ag/en/detection-and-ranging-solutions/2d-lidar-sensors/lms1000/c/g387151) | 1 layer max. range: 64 m, ang. resol. 0.25 [deg] | [stable]|
| | | Scan-Rate: 150 Hz, 4x37.5 Hz |
| LMS1xx-Family | [e.g. 1041114](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/lms1xx/c/g91901) | 1 layer max. range: 28 m, ang. resol. 0.25 [deg]| ? [stable]|
| LMS1xx-Family | [e.g. 1041114](https://www.sick.com/de/en/detection-and-ranging-solutions/2d-lidar-sensors/lms1xx/c/g91901) | 1 layer max. range: 28 m, ang. resol. 0.25 [deg]| [stable]|
| | | Scan-Rate: 15 Hz | |
| LMS4xxx-Family | [e.g. 1091423](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/lms4000/lms4111r-13000/p/p578044?ff_data) | 1 layer max. range: 3 m, ang. resol. 0,0833 [deg], opening angle: +/- 50 [deg] | ? [stable]|
| LMS4xxx-Family | [e.g. 1091423](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/lms4000/lms4111r-13000/p/p578044?ff_data) | 1 layer max. range: 3 m, ang. resol. 0,0833 [deg], opening angle: +/- 50 [deg] | [stable]|
| | | Scan-Rate: 600 Hz | |
| LDMRS | | 4 or 8 layer, max. range: 50/320 m, ang. resol. 0.025°/.../0.25 [deg] | ? [stable]|
| LDMRS | | 4 or 8 layer, max. range: 50/320 m, ang. resol. 0.025°/.../0.25 [deg] | [stable]|
| | | Scan-Rate: 12.5-50 Hz | |
| LRS4000 | [1098855](https://www.sick.com/no/en/detection-and-ranging-solutions/2d-lidar-sensors/lrs4000/c/g555594) | 1 layer, max. range: 130 m, ang. resol. 0.125/0.25/0.5 [deg] | ? [stable]|
| LRS4000 | [1098855](https://www.sick.com/no/en/detection-and-ranging-solutions/2d-lidar-sensors/lrs4000/c/g555594) | 1 layer, max. range: 130 m, ang. resol. 0.125/0.25/0.5 [deg] | [stable]|
| | | Scan-Rate: 12.5-25 Hz | |
| NAV310 | [e.g. 1060834](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/nav3xx/nav310-3211/p/p349345) | 1 layer max. range: 250 m, ang. resol. 0.125 - 1.0 [deg] | ? [stable]|
| NAV310 | [e.g. 1060834](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/nav3xx/nav310-3211/p/p349345) | 1 layer max. range: 250 m, ang. resol. 0.125 - 1.0 [deg] | [stable]|
| | | Scan-Rate: 8 Hz | |
| NAV210+NAV245 | [e.g. 1074308](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/nav2xx/c/g356151) | 1 layer max. range: 100 m, ang. resol. 0.25 [deg]| ? [stable]|
| NAV210+NAV245 | [e.g. 1074308](https://www.sick.com/de/de/mess-und-detektionsloesungen/2d-lidar-sensoren/nav2xx/c/g356151) | 1 layer max. range: 100 m, ang. resol. 0.25 [deg]| [stable]|
| | | Scan-Rate: 25 Hz | |
| RMS3xx | [8021530](https://cdn.sick.com/media/docs/4/04/504/Operating_instructions_RMS3xx_en_IM0075504.PDF)| Radar Sensor | ? [stable]|
| RMS1xxx | [1107598](https://www.sick.com/de/en/detection-and-ranging-solutions/radar-sensors/rms1000/rms1731c-636111/p/p660833)| 1D Radar Sensor | ? [stable]|
| Multiscan136 | prototype | The MultiScan136 Beta is a new lidar with 16 lidar units rotating around a vertical axis | ? [prototype]|
| RMS1xxx | [1107598](https://www.sick.com/de/en/detection-and-ranging-solutions/radar-sensors/rms1000/rms1731c-636111/p/p660833)| 1D Radar Sensor | [stable]|
| RMS2xxx | | Radar Sensor | [prototype]|
| RMS3xx | [8021530](https://cdn.sick.com/media/docs/4/04/504/Operating_instructions_RMS3xx_en_IM0075504.PDF)| Radar Sensor | [stable]|
| Multiscan136 | prototype | The MultiScan136 Beta is a new lidar with 16 lidar units rotating around a vertical axis | [prototype]|

Note:
* LDMRS family is currently not supported on Windows.
Expand Down
26 changes: 19 additions & 7 deletions USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,18 @@ Use the following commands to run the sick_scan_xd driver for a specific scanner
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_mrs_1xxx.launch`
* Windows native: `sick_generic_caller sick_mrs_1xxx.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_mrs_1xxx.launch`
- For LMS1104:
- For LMS1104 with firmware 1.x:
* Linux native: `sick_generic_caller sick_lms_1xxx.launch`
* Linux ROS-1: `roslaunch sick_scan sick_lms_1xxx.launch`
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_lms_1xxx.launch`
* Windows native: `sick_generic_caller sick_lms_1xxx.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_lms_1xxx.launch`
- For LMS1104 with firmware 2.x:
* Linux native: `sick_generic_caller sick_lms_1xxx_v2.launch`
* Linux ROS-1: `roslaunch sick_scan sick_lms_1xxx_v2.launch`
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_lms_1xxx_v2.launch`
* Windows native: `sick_generic_caller sick_lms_1xxx_v2.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_lms_1xxx_v2.launch`
- For TiM240-prototype:
* Linux native: `sick_generic_caller sick_tim_240.launch`
* Linux ROS-1: `roslaunch sick_scan sick_tim_240.launch`
Expand Down Expand Up @@ -107,18 +113,24 @@ Use the following commands to run the sick_scan_xd driver for a specific scanner
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_nav_3xx.launch`
* Windows native: `sick_generic_caller sick_nav_3xx.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_nav_3xx.launch`
- For RMS3xx-family:
* Linux native: `sick_generic_caller sick_rms_3xx.launch`
* Linux ROS-1: `roslaunch sick_scan sick_rms_3xx.launch`
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_3xx.launch`
* Windows native: `sick_generic_caller sick_rms_3xx.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_3xx.launch`
- For RMS1xxx-family:
* Linux native: `sick_generic_caller sick_rms_1xxx.launch`
* Linux ROS-1: `roslaunch sick_scan sick_rms_1xxx.launch`
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_1xxx.launch`
* Windows native: `sick_generic_caller sick_rms_1xxx.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_1xxx.launch`
- For RMS2xx-family:
* Linux native: `sick_generic_caller sick_rms_2xxx.launch`
* Linux ROS-1: `roslaunch sick_scan sick_rms_2xxx.launch`
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_2xxx.launch`
* Windows native: `sick_generic_caller sick_rms_2xxx.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_2xxx.launch`
- For RMS3xx-family:
* Linux native: `sick_generic_caller sick_rms_3xx.launch`
* Linux ROS-1: `roslaunch sick_scan sick_rms_3xx.launch`
* Linux ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_3xx.launch`
* Windows native: `sick_generic_caller sick_rms_3xx.launch`
* Windows ROS-2: `ros2 run sick_scan sick_generic_caller ./src/sick_scan_xd/launch/sick_rms_3xx.launch`
- For Multiscan136 (sick_scansegement_xd):
* Linux native: `sick_generic_caller sick_scansegment_xd.launch hostname:=<ip-address> udp_receiver_ip:=<ip-address>`
* Linux ROS-1: `roslaunch sick_scan sick_scansegment_xd.launch hostname:=<ip-address> udp_receiver_ip:=<ip-address>`
Expand Down
2 changes: 1 addition & 1 deletion cfg/SickScan.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ gen.add("locationName", str_t,0, "Device Location Name",""),
gen.add("timelimit", double_t, 0, "Network time limit for datagram request [sec].", 5.0, 0.1,100.0)
gen.add("cloud_output_mode", int_t, 0, "[0] Pointcloud is dense all layers in one cloud,[1] Each layer in its own cloud message to improve timestamp accuracy,[2] layers are split to achieve approx. 1 KHz data rate", 0,0,2)
gen.add("ang_res", double_t, 0, "Angular resolution in deg/scan set to 0 to use scanner default", 0 ,0,10)
gen.add("scan_freq", double_t, 0, "Scan frequency set to 0 to use scanner default",0 ,0,100)
gen.add("scan_freq", double_t, 0, "Scan frequency set to 0 to use scanner default", 0, 0, 150)
gen.add("encoder_mode", int_t, 0, "-1:No Encoder, 0:Off, 1:Single increment, 2:Direction Phase, 3:Direction Level",-1 ,-1,3)
gen.add("scan_cfg_list_entry", int_t, 0, "scan config for | LRS 3601 3611 |OEM 1501|NAV 310 |LRS 3600 3610 4000 |OEM 1500|",-1 ,1,71) # LD Series switching table: 1-46, LRS4000 switching table: 1-71
# gen.add("mean_filter", int_t, 0, "Number of averages for mean filter 0 means filter is disabled", 0, 0, 100)
Expand Down
2 changes: 1 addition & 1 deletion driver/src/sick_generic_laser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@

#define SICK_GENERIC_MAJOR_VER "2"
#define SICK_GENERIC_MINOR_VER "8"
#define SICK_GENERIC_PATCH_LEVEL "10"
#define SICK_GENERIC_PATCH_LEVEL "11"

#define DELETE_PTR(p) if(p){delete(p);p=0;}

Expand Down
6 changes: 4 additions & 2 deletions driver/src/sick_generic_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -501,8 +501,9 @@ void ScannerBasicParam::setTrackingModeSupported(bool _trackingModeSupported)
allowedScannerNames.push_back(SICK_SCANNER_MRS_6XXX_NAME);
allowedScannerNames.push_back(SICK_SCANNER_LMS_4XXX_NAME);
allowedScannerNames.push_back(SICK_SCANNER_LRS_4XXX_NAME);
allowedScannerNames.push_back(SICK_SCANNER_RMS_3XX_NAME); // Radar scanner
allowedScannerNames.push_back(SICK_SCANNER_RMS_1XXX_NAME); // Radar scanner
allowedScannerNames.push_back(SICK_SCANNER_RMS_2XXX_NAME); // Radar scanner
allowedScannerNames.push_back(SICK_SCANNER_RMS_3XX_NAME); // Radar scanner
allowedScannerNames.push_back(SICK_SCANNER_NAV_3XX_NAME);
allowedScannerNames.push_back(SICK_SCANNER_NAV_350_NAME);
allowedScannerNames.push_back(SICK_SCANNER_NAV_2XX_NAME);
Expand Down Expand Up @@ -825,7 +826,8 @@ void ScannerBasicParam::setTrackingModeSupported(bool _trackingModeSupported)
basicParams[i].setWaitForReady(false);
basicParams[i].setFREchoFilterAvailable(true); // (false) // LRS4XXX uses echo filter settings to configure 1 echo, use filter_echos = 0 (first echo) for LRS4xxx
}
if (basicParams[i].getScannerName().compare(SICK_SCANNER_RMS_3XX_NAME) == 0) // Radar
if (basicParams[i].getScannerName().compare(SICK_SCANNER_RMS_2XXX_NAME) == 0
|| basicParams[i].getScannerName().compare(SICK_SCANNER_RMS_3XX_NAME) == 0) // Radar
{
basicParams[i].setNumberOfMaximumEchos(1);
basicParams[i].setNumberOfLayers(0); // for radar scanner
Expand Down
8 changes: 4 additions & 4 deletions driver/src/sick_generic_radar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -494,10 +494,10 @@ namespace sick_scan
success = success && appendRadarDatagramField(datagram, datagram_length, 2, fields); // 2 byte Amount of 16 bit channels
uint16_t num_16_bit_channels = 0;
fields.back().toInteger(num_16_bit_channels);
if(num_16_bit_channels > 4) // max 4 16-bit channel
{
return std::vector<RadarDatagramField>(); // unrecoverable parse error
}
// if(num_16_bit_channels > 4) // max 4 16-bit channel in case of RMS1xxx and RMS3xx
// {
// return std::vector<RadarDatagramField>(); // unrecoverable parse error
// }
for(int channel_idx = 0; channel_idx < num_16_bit_channels; channel_idx++)
{
success = success && appendRadarDatagramField(datagram, datagram_length, 5, fields); // 5 byte Content string (identifier)
Expand Down
Loading

0 comments on commit 15cdaef

Please sign in to comment.