-
 
No version for distro humble. Known supported distros are highlighted in the buttons above.
No version for distro iron. Known supported distros are highlighted in the buttons above.
No version for distro jazzy. Known supported distros are highlighted in the buttons above.
No version for distro rolling. Known supported distros are highlighted in the buttons above.

psen_scan_v2 package from psen_scan_v2 repo

psen_scan_v2

Package Summary

Tags No category tags.
Version 0.10.2
License LGPLv3
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PilzDE/psen_scan_v2.git
VCS Type git
VCS Version main
Last Updated 2024-06-21
Dev Status DEVELOPED
CI status
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

ROS support for the Pilz laser scanner

Additional Links

Maintainers

  • Christian Döhn
  • Immanuel Martini
  • Richard Feistenauer

Authors

  • Pilz GmbH + Co. KG

PILZ

PILZ safety laser scanner PSENscan

Package: psen_scan_v2

The psen_scan_v2 package is a ROS integration driver for the PSENscan safety laser scanner product. It lets you integrate the laser scanner data into your ROS Environment easily. Using the standard sensor_msgs/LaserScan message format ensures compatibility with other laserscan-post-processing nodes such as gmapping. For a general overview, link collection and tutorials we refer to the ROS wiki page.

PILZ safety laser scanner

Common features:

  • Compliant and approved in accordance with:
    • EN/IEC 61496-1: Type 3
    • EN ISO 13849-1: PL d
    • IEC 61508: SIL 2
  • Opening angle: 275°
  • Operating range: 3.0 or 5.5 m safety zone, 40 m warning zone
  • Reaction time: 62 ms
  • Protection type: IP65
  • Dimensions (H x W x D) in mm: 152 x 102 x 112.5

The PSENscan firmware (3.1.x) is supported on the following models:

Light versions

| Type | Features | Order number | |———————–|————————————————————————–|————–| | PSEN sc L 3.0 08-12 | 3.0 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000012 | | PSEN sc L 5.5 08-12 | 5.5 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000013 |

Additional features: Muting, EDM, Override

Master versions

| Type | Features | Order number | |———————–|—————————————————————————|————–| | PSEN sc M 3.0 08-12 | 3.0 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000016 | | PSEN sc M 5.5 08-12 | 5.5 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000017 | | PSEN sc M 5.5 08-17 | 5.5 m safety zone, 8 or 17-pin, two safety zones active at the same time | 6D000019 | | PSEN sc ME 5.5 08-17 | 5.5 m safety zone, 8 or 17-pin, two safety zones active at the same time | 6D000034 |

Additional features: Muting, EDM, Override, restart in accordance with EN ISO 61496-3, vertical applications

Subscriber versions

| Type | Features | Order number | |———————–|—————————————————————————|————–| | PSEN sc S 3.0 08-12 | 3.0 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000020 | | PSEN sc S 5.5 08-12 | 5.5 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000021 |

Additional features: reference marks, vertical applications

C++ standalone library

If you are interested in using the PSENscan safety laser scanner without ROS, please take a look at our C++ standalone library. You can read more about it in the standalone folder.

Table of Contents

  1. Installation
  2. Usage
  3. Developer Information
  4. Migration

Installation

Needed Equipment:

  • PSENscan safety laser scanner
  • ROS Machine

To use the package, you can install prebuilt packages with

sudo apt install ros-$ROS_DISTRO-psen-scan-v2

Usage

This package is capable to read data from 1 Master safety laser scanner, and up to 3 Subscribers safety laser scanners, as shown below:

To read data and publishing scans from 1 safety laser scanner (Master, Light), execute in a command line:

 roslaunch psen_scan_v2 psen_scan_v2.launch sensor_ip:=192.168.0.10

To read the data from differents safety laser scanners (Master and Subscriber0), execute in command line:

roslaunch psen_scan_v2 psen_scan_v2.launch sensor_ip:=192.168.0.10 nr_subscribers:=1

In order to create an application with your own launch file, you can include the bringup.launch, where you can easily adjust the configuration parameters. A more detailed explanation can be found in the tutorials.

Parameters

sensor_ip (string, default: “192.168.0.10”)
IP-Address of safety laser scanner.

nr_subscribers (_int, default: “0”)
Number of Subscribers safety laser scanners connected to the Master. Note: nr_subscribers [0 .. 3] maximum!

Optional Parameters

tf_prefix (string, default: “laser_1”)
Name of this scanner that can be changed to differentiate between multiple devices. By convention this is used as tf prefix.

angle_start (double, default: -2.398 (= -137.4 deg))
Start angle of measurement. (Radian)

angle_end (double, default: 2.398 (= 137.4 deg))
End angle of measurement. It is included in the measurements. (Radian)

intensities (bool, default: false)
Publish intensities. If this is enabled, the resolution needs to be increased (at least 0.2 deg).

resolution (double, default: 0.0017 (= 0.1 deg))
Scan angle resolution. (Radian) The value is rounded to a multiple of 0.1 deg and has to be in the range [0.1, 10] degrees.

config_file (string, default: “”) Full path to a scanner config file. If a file is provided the configured zonesets and active zone markers are published, see here for more information.

Expert Parameters (optional)

host_ip (string, default: “auto”)
IP-Address of host machine. The IP of the local machine is used by default.

host_udp_port_data (int, default: 55115)
UDP Port on which monitoring frames (scans) should be received.

host_udp_port_control (int, default: 55116)
UDP Port used to send commands (start/stop) and receive the corresponding replies.

fragmented_scans (bool, default: false)
Publish scan data as soon as a UDP packet is ready, do not wait for a full scan.

rviz (bool, default: true)
Start a preconfigured rviz visualizing the scan data.

Published Topics

/<name>/scan (sensor_msgs/LaserScan)
/<name>/scan_SubscriberX (sensor_msgs/LaserScan)

  • If fragmented_scans is set to false (default) the driver will publish complete scan rounds from the PSENscan safety laser scanner as a single message.
  • If fragmented_scans is enabled the driver will send the measurement data as soon as they arrive, instead of waiting for the scan round to be completed. This way the scan data is received sooner but is split into several sensor messages.
  • Hint 1: Scan rounds and fragments that contain no measurement data are not published. This can happen with smaller scan ranges.
  • Hint 2: Frequency of the laser scan messages is about 33hz for the combined and 200hz for the fragmented scans.

/<name>/zoneconfiguration (psen_scan_v2/ZoneSetConfiguration)

  • Hint 1: Will not be advertised if no config_file is provided.

/<name>/active_zoneset (std_msgs/UInt8)

  • This topic contains the id of the currently active zoneset of the PSENscan safety laser scanner.

  • Hint 1: If no zonesets are configured the driver will publish "0" as default.

/<name>/active_zoneset_markers ([visualization_msgs/MarkerArray][])

  • The markers published represent the currently active zoneset as triangle lists. They can be viewed e.g. in rviz.

  • Hint 1: Uses the topics /<name>/zoneconfiguration and /<name>/active_zoneset to calculate the vizualization and updates in the same frequency as those topics.

  • Hint 2: Will not be advertised if no config_file is provided.

/<name>/io_states (psen_scan_v2/IOState)

  • The state published represents the current input and output state of the scanner IOs. A list of all available IOs can be found here
  • Hint 1: With every scan data of a monitoring frame the IO states are transferred from the PSENscan safety laser scanner. They are processed in the same way as the scan data.
  • Hint 2: By using <fragmented_scans=true> the driver will publish 1 IOStates while with <fragmented_scans=false> it will publish 6 IOStates per single publish of scan data.
  • Hint 3: The timesamps of all IO states are the same as the one of their corresponding LaserScan msg.

TF Frames

The location of the TF frames is shown in the image below. These names are defined by the aforementioned launchfile parameter name. Changing them is necessary for instance when running multiple scanners.

PILZ safety laser scanner frames

Defining the scan range

You can adjust the scan field to your needs by changing angle_start and angle_end. The published (sensor_msgs/LaserScan) will only contain data within the given angle limits. Both limits are defined within the laser_1 frame as shown in the image below.

Limit visualization

Timestamp details

The timestamps of the scan data published are computed to be close to reality and processing speed of incoming data was optimized to reduce the time for the scan data to be published. This should suffice for localization and slam algorithms. If you application benefits from getting the scan data any sooner there are two possibilities:

  • Use fragmented scans. This will publish the individual frames received by the PSENscan safety laser scanner immediately instead of waiting for a scan round to be completed and combined to a single laser scan message.
  • Use the tcp_nodelay flag in your ROS subscriber. This will disable the nagle’s algorithm, which is a TCP optimization. This algorithm can produce a jitter of about 20ms in the ros topic.
    • The cpp API of ROS does not support disabling this on the publisher side. If you don’t have control over the subscriber e.g. due to using a third party package you can create a python node which acts as a repeater for the scan topic. rospy subscriber and publisher both allow setting this flag and thus can disable it for this driver and the third party package.

Transferred IOs

The state of inputs and outputs of the PSENscan safety laser scanner are published as psen_scan_v2/IOState. The topic at /<name>/io_states is latched and always gives the most recent pin state. On changes at the physical IOs, the changes are logged to the console and the new state is published to the topic.

The input pin states contains information about

  • muting
  • override
  • zone set switching inputs

The output pin states consists of

  • OSSD safety states
  • warning output
  • reference points violation

Please see the message descriptions for full lists of bits.

Importing the zoneset configuration

Once you setup the scanner and created a configuration according to our tutorial you can use an exported xml configuration file within ROS. The configured zonesets will be published.

The zonesets you created in the Pilz configurator: configurator_screenshot

will be exactly the same in ROS: configurator_screenshot

You can try this out with:

roslaunch psen_scan_v2 psen_scan_v2.lauch config_file:='full_path_to/example_config.xml'

WARNING
There is no verification that the configuration you created using the PSENscan configurator matches the one actually loaded on the PSENscan device!

Please, always make sure to keep those configurations synchronized otherwise the published zoneset polygons might be wrong and cause confusing errors like misleading visualization or navigation results that can not be executed by your real hardware!

If you want to use the configuration node in your launchfile add a section such as:

<node ns="$(arg laser_ns)" name="config_server_node_$(arg laser_ns)" type="config_server_node" pkg="psen_scan_v2">
  <param name="config_file" value="$(arg config_file)" />
  <param name="frame_id" value="$(arg frame_id)" />
</node>

Visualizing the active zoneset

For visualizing the active zoneset in RViz you can run the active_zoneset_node. It will publish markers on the /<name>/active_zoneset_markers topic like shown in the RViz screenshot above.

Developer Information

Build Status

| Platform | Noetic | | ——– | —— | | CI | CI-Noetic | | Buildfarm src | Build Status | | Buildfarm bin | Build Status |

Branching model

main is considered to be the active development branch, it targets the ROS distributions melodic and noetic.

The ros2 branch targets the ROS 2 foxy, humble and rolling distributions. You can find the location of the psen_scan_v2-2 repository at the following link: https://github.com/PilzES/psen_scan_v2-2

With the first ROS 2 release the version number model of this package was changed:

  • ROS 1 releases now count from 0.10.0 upwards.
  • ROS 2 releases start with 0.20.0.

All version numbers < 0.10.0 are from releases prior to this change.

Test concept

psen_scan_test_concept

Migration

To update your ROS environment from the former psen_scan package (which supported firmware versions up to 3.0), please execute the following steps:

  1. Update scanner firmware using PSENscan Configurator (unless the device has firmware 3.1 already)
  2. Install the new ROS package sudo apt install ros-$ROS_DISTRO-psen-scan-v2
  3. Replace the launch file arguments:
    • password and x_axis_rotation are obsolete and should be dropped
    • angle_start and angle_end are now in radians, in direction of the x axis of the scanner tf frame
    • prefix is replaced by tf_prefix
  4. In your application launch file / roslaunch command: replace all occurrences of psen_scan with psen_scan_v2

You need further information?

Our international hotline staff will support you individually about our ROS packages at ros@pilz.de

Find more information about the PILZ safety laser scanner on the product website.

Visit us at pilz.com

PILZ is an international-scale, innovative automation technology company. PILZ uses its solutions to create safety for man, machine and the environment. In addition to head office in Ostfildern near Stuttgart, the family business is represented over 2,400 employees at 42 subsidiaries and branches on all continents.

The company’s products include sensor technology, electronic monitoring relays, safety relays, configurable and programmable control systems, automation solutions with motion control, systems for industrial communication as well as visualization solutions and operator terminals.

PILZ solutions can be used in all areas of mechanical engineering, including the packaging and automotive sector, plus the railway technology, press and wind energy sectors. These solutions ensure that baggage handling systems run safely at airports and funiculars or roller coasters travel safely; they also guarantee fire protection and energy supply in buildings.

CHANGELOG

Changelog for package psen_scan_v2

Forthcoming

  • Add PSENscan Subscribers up to 3 (#338)
  • Add PSENscan cad meshes (#338)
  • Contributors: Pilz GmbH and Co. KG

0.10.2 (2022-11-03)

  • Remove zoneset bits from IOState.input field since its redundant to the active_zoneset field (#311)
  • Inform about missing configuration confirmation
  • Ignore changes of unused IOs. Fix #321
  • Fill "io_states" vector as received instead of order by theta to avoid flickering. Fix #320
  • Fixed bug of multiple zonesets being visible #328
  • Contributors: Pilz GmbH and Co. KG

0.10.1 (2022-01-24)

  • Separate 'PinState' formating from 'formatRange' (#313)
  • Contributors: Pilz GmbH and Co. KG

0.10.0 (2022-01-20)

  • Change to new versioning method for ROS1 (0.10.0+) and ROS2 (0.20.0+).
  • Deprecate get/set methods with 'get/set' prefix in favour of methods without the prefix(#298)
  • ADD IO states to LaserScan and publish them at ~/io_state (#281)
  • Renaming Slave to Subscriber (#303)
  • Contributors: Pilz GmbH and Co. KG

0.3.4 (2021-12-20)

  • Prevent error when diagnostics are disabled. Fix #294
  • Set exception in stop-future
  • Apply clang-tidy fixes to header-files. Fix #277
  • Remove latched flag from active zoneset topic
  • API change: convenience usage of ScannerConfiguration
  • Remove unrelated parameter DEFAULT_X_AXIS_ROTATION from standalone
  • Contributors: Pilz GmbH and Co. KG

0.3.3 (2021-11-10)

  • Introduce error state and set exception in start-future
  • Remove dependency on pilz_testutils
  • Always build hardware tests
  • Internal refactorings
  • Importing the config xml-file and publishing the zoneconfiguration
  • Add active zoneset to LaserScan
  • Publish active zoneset id to ~/active_zoneset
  • Add active zoneset visualization in rviz
  • Contributors: Pilz GmbH and Co. KG

0.3.2 (2021-09-16)

  • Improve performance of standalone part
    • Introduce RawDataPtr
    • Write to std::stringstream instead of constructing from std::string
    • Pass by reference wherever possible
  • Make release build the default
  • Calculate timestamp as the time of the first ray (udp communication time is neglected)
  • API: Add timestamp (nanoseconds since epoch) to LaserScan
  • API: Add scan counter to LaserScan
  • API: remove LaserScan equality operator
  • Contributors: Pilz GmbH and Co. KG

0.3.1 (2021-07-21)

  • Rename urdf links
  • Apply tf prefix equals node name
  • API change: rename launch-file argument prefix->tf_prefix
  • Contributors: Pilz GmbH and Co. KG

0.3.0 (2021-06-29)

  • Set prefix for node name (same value as for tf frames)
  • Introduce bringup.launch for starting only the scanner node
  • Omit closing the data client before destruction. Fixes #212
  • Distance value at angle_end is now included in the scan range
  • Default scan range changed to [-137.4..137.4]deg at 0.1 deg resolution
  • Add options for modifying resolution and enabling intensities
  • Add launchfile option for disabling rviz at startup (default: enable)
  • Handle the infinity codes from the scanner correctly
  • Inform user about current scan range
  • Fix wrong behavior when angle_start and angle_end are equal
  • Contributors: Pilz GmbH and Co. KG

0.2.1 (2021-04-19)

  • Fix issues with smaller angle ranges than default range (#183)
  • Add action for pull request todos (#184)
  • Contributors: Pilz GmbH and Co. KG

0.2.0 (2021-04-05)

  • Combine multiple monitoring frames into one scan (#173)
  • Contributors: Pilz GmbH and Co. KG
  • API change: Driver waits for scan round to complete before sending measurement data by default
  • Introducing new parameter fragmented_scans to switch back to faster fragmented laser_scan messages
  • Contributors: Pilz GmbH and Co. KG

0.1.6 (2021-03-22)

  • Separate ROS and standalone CMakeLists: Closes #169
  • Minor restructuring. Closes #175
  • Contributors: Pilz GmbH and Co. KG

0.1.5 (2021-03-10)

  • Make specifying host ip optional
  • Reorder Readme sections
  • API change: A scan is published only if it contains measurement data
  • Make tests build in standalone with or without ROS installed
  • Document key components in a meaningful expressive way
  • Enable building the standalone lib using MSVC
  • Enable separate building of cpp-lib; extract sources into subproject psen_scan_v2_standalone
  • Renames ScanRange and DefaultScanRange to improve usability
  • Improve namespace hierarchy and move files to respective subfolders
  • Use defaults ports in ScannerConfiguration
  • Contributors: Pilz GmbH and Co. KG

0.1.4 (2021-01-13)

  • Add internal error handling for detecting regressions in the scanner firmware
  • Make specifying udp ports optional
  • Contributors: Pilz GmbH and Co. KG

0.1.3 (2020-12-09)

  • Add ROS noetic support (#103)
  • Use TYPED_TEST_SUITE instead of deprecated TYPED_TEST_CASE
  • Apply fixes from clang-format (#113)
  • Spelling measurements (#112)
  • Directly use fmt lib instead of rosfmt (#108)
  • Fix clang tidy errors (#109)
  • Feature/api documentation improvement (#100)
  • Improve the API documentation
  • Add ROS Noetic support
  • Contributors: Pilz GmbH and Co. KG

0.1.2 (2020-11-24)

  • Add Scanner ports in ScannerConfiguration
  • Switch branching model: Introduce main branch
  • Use github actions
  • Adds missing error bit
  • Contributors: Pilz GmbH and Co. KG

0.1.1 (2020-11-10)

  • Add intensity data to LaserScan
  • Print user message if dropped MonitoringFrames are detected
  • Print user message in case of timeout while waiting for MonitoringFrames
  • Adjust min and max scanner range. Fixes #70
  • Print diagnostic messages from PSENscan
  • Notify user about start retry
  • Add Continuous Acceptance Test
  • Contributors: Pilz GmbH and Co. KG

0.1.0 (2020-10-19)

  • Initial release for the support of PSENscan firmware >= 3.1.0
  • Start and stop the PSENscan monitoring function
  • Publish measurement data of each monitoring frame as a single ROS LaserScan message
  • Retry activation of the monitoring function on start reply timeout
  • Adding urdf for scanner and swapping Z axis of TF frame where scan is published to be sent in correct order
  • Contributors: Pilz GmbH and Co. KG

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

  • launch/psen_scan_v2.launch
    • Copyright (c) 2020-2021 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • sensor_ip [default: 192.168.0.10]
      • nr_subscribers [default: 0]
      • tf_prefix [default: laser_1]
      • tf_prefix_sub0 [default: laser_1_Subscriber0]
      • tf_prefix_sub1 [default: laser_1_Subscriber1]
      • tf_prefix_sub2 [default: laser_1_Subscriber2]
      • angle_start [default: $(eval radians(-137.4))]
      • angle_end [default: $(eval radians(137.4))]
      • intensities [default: false]
      • resolution [default: $(eval radians(0.5))]
      • host_ip [default: auto]
      • host_udp_port_data [default: 55115]
      • host_udp_port_control [default: 55116]
      • fragmented_scans [default: false]
      • config_file [default: ]
      • rviz [default: true]
  • launch/bringup.launch
    • Copyright (c) 2020-2021 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • sensor_ip [default: 192.168.0.10]
      • nr_subscribers [default: 0]
      • tf_prefix [default: laser_1]
      • angle_start [default: $(eval radians(-137.4))]
      • angle_end [default: $(eval radians(137.4))]
      • intensities [default: false]
      • resolution [default: $(eval radians(0.5))]
      • host_ip [default: auto]
      • host_udp_port_data [default: 55115]
      • host_udp_port_control [default: 55116]
      • fragmented_scans [default: false]
  • test/acceptance_tests/acceptancetest_multiple_zones_display.launch
    • Copyright (c) 2020-2021 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .

Services

No service files found

Plugins

No plugins found.

Recent questions tagged psen_scan_v2 at Robotics Stack Exchange

No version for distro galactic. Known supported distros are highlighted in the buttons above.

psen_scan_v2 package from psen_scan_v2 repo

psen_scan_v2

Package Summary

Tags No category tags.
Version 0.10.2
License LGPLv3
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PilzDE/psen_scan_v2.git
VCS Type git
VCS Version main
Last Updated 2024-06-21
Dev Status DEVELOPED
CI status
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

ROS support for the Pilz laser scanner

Additional Links

Maintainers

  • Christian Döhn
  • Immanuel Martini
  • Richard Feistenauer

Authors

  • Pilz GmbH + Co. KG

PILZ

PILZ safety laser scanner PSENscan

Package: psen_scan_v2

The psen_scan_v2 package is a ROS integration driver for the PSENscan safety laser scanner product. It lets you integrate the laser scanner data into your ROS Environment easily. Using the standard sensor_msgs/LaserScan message format ensures compatibility with other laserscan-post-processing nodes such as gmapping. For a general overview, link collection and tutorials we refer to the ROS wiki page.

PILZ safety laser scanner

Common features:

  • Compliant and approved in accordance with:
    • EN/IEC 61496-1: Type 3
    • EN ISO 13849-1: PL d
    • IEC 61508: SIL 2
  • Opening angle: 275°
  • Operating range: 3.0 or 5.5 m safety zone, 40 m warning zone
  • Reaction time: 62 ms
  • Protection type: IP65
  • Dimensions (H x W x D) in mm: 152 x 102 x 112.5

The PSENscan firmware (3.1.x) is supported on the following models:

Light versions

| Type | Features | Order number | |———————–|————————————————————————–|————–| | PSEN sc L 3.0 08-12 | 3.0 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000012 | | PSEN sc L 5.5 08-12 | 5.5 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000013 |

Additional features: Muting, EDM, Override

Master versions

| Type | Features | Order number | |———————–|—————————————————————————|————–| | PSEN sc M 3.0 08-12 | 3.0 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000016 | | PSEN sc M 5.5 08-12 | 5.5 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000017 | | PSEN sc M 5.5 08-17 | 5.5 m safety zone, 8 or 17-pin, two safety zones active at the same time | 6D000019 | | PSEN sc ME 5.5 08-17 | 5.5 m safety zone, 8 or 17-pin, two safety zones active at the same time | 6D000034 |

Additional features: Muting, EDM, Override, restart in accordance with EN ISO 61496-3, vertical applications

Subscriber versions

| Type | Features | Order number | |———————–|—————————————————————————|————–| | PSEN sc S 3.0 08-12 | 3.0 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000020 | | PSEN sc S 5.5 08-12 | 5.5 m safety zone, 8 or 12-pin, two safety zones active at the same time | 6D000021 |

Additional features: reference marks, vertical applications

C++ standalone library

If you are interested in using the PSENscan safety laser scanner without ROS, please take a look at our C++ standalone library. You can read more about it in the standalone folder.

Table of Contents

  1. Installation
  2. Usage
  3. Developer Information
  4. Migration

Installation

Needed Equipment:

  • PSENscan safety laser scanner
  • ROS Machine

To use the package, you can install prebuilt packages with

sudo apt install ros-$ROS_DISTRO-psen-scan-v2

Usage

This package is capable to read data from 1 Master safety laser scanner, and up to 3 Subscribers safety laser scanners, as shown below:

To read data and publishing scans from 1 safety laser scanner (Master, Light), execute in a command line:

 roslaunch psen_scan_v2 psen_scan_v2.launch sensor_ip:=192.168.0.10

To read the data from differents safety laser scanners (Master and Subscriber0), execute in command line:

roslaunch psen_scan_v2 psen_scan_v2.launch sensor_ip:=192.168.0.10 nr_subscribers:=1

In order to create an application with your own launch file, you can include the bringup.launch, where you can easily adjust the configuration parameters. A more detailed explanation can be found in the tutorials.

Parameters

sensor_ip (string, default: “192.168.0.10”)
IP-Address of safety laser scanner.

nr_subscribers (_int, default: “0”)
Number of Subscribers safety laser scanners connected to the Master. Note: nr_subscribers [0 .. 3] maximum!

Optional Parameters

tf_prefix (string, default: “laser_1”)
Name of this scanner that can be changed to differentiate between multiple devices. By convention this is used as tf prefix.

angle_start (double, default: -2.398 (= -137.4 deg))
Start angle of measurement. (Radian)

angle_end (double, default: 2.398 (= 137.4 deg))
End angle of measurement. It is included in the measurements. (Radian)

intensities (bool, default: false)
Publish intensities. If this is enabled, the resolution needs to be increased (at least 0.2 deg).

resolution (double, default: 0.0017 (= 0.1 deg))
Scan angle resolution. (Radian) The value is rounded to a multiple of 0.1 deg and has to be in the range [0.1, 10] degrees.

config_file (string, default: “”) Full path to a scanner config file. If a file is provided the configured zonesets and active zone markers are published, see here for more information.

Expert Parameters (optional)

host_ip (string, default: “auto”)
IP-Address of host machine. The IP of the local machine is used by default.

host_udp_port_data (int, default: 55115)
UDP Port on which monitoring frames (scans) should be received.

host_udp_port_control (int, default: 55116)
UDP Port used to send commands (start/stop) and receive the corresponding replies.

fragmented_scans (bool, default: false)
Publish scan data as soon as a UDP packet is ready, do not wait for a full scan.

rviz (bool, default: true)
Start a preconfigured rviz visualizing the scan data.

Published Topics

/<name>/scan (sensor_msgs/LaserScan)
/<name>/scan_SubscriberX (sensor_msgs/LaserScan)

  • If fragmented_scans is set to false (default) the driver will publish complete scan rounds from the PSENscan safety laser scanner as a single message.
  • If fragmented_scans is enabled the driver will send the measurement data as soon as they arrive, instead of waiting for the scan round to be completed. This way the scan data is received sooner but is split into several sensor messages.
  • Hint 1: Scan rounds and fragments that contain no measurement data are not published. This can happen with smaller scan ranges.
  • Hint 2: Frequency of the laser scan messages is about 33hz for the combined and 200hz for the fragmented scans.

/<name>/zoneconfiguration (psen_scan_v2/ZoneSetConfiguration)

  • Hint 1: Will not be advertised if no config_file is provided.

/<name>/active_zoneset (std_msgs/UInt8)

  • This topic contains the id of the currently active zoneset of the PSENscan safety laser scanner.

  • Hint 1: If no zonesets are configured the driver will publish "0" as default.

/<name>/active_zoneset_markers ([visualization_msgs/MarkerArray][])

  • The markers published represent the currently active zoneset as triangle lists. They can be viewed e.g. in rviz.

  • Hint 1: Uses the topics /<name>/zoneconfiguration and /<name>/active_zoneset to calculate the vizualization and updates in the same frequency as those topics.

  • Hint 2: Will not be advertised if no config_file is provided.

/<name>/io_states (psen_scan_v2/IOState)

  • The state published represents the current input and output state of the scanner IOs. A list of all available IOs can be found here
  • Hint 1: With every scan data of a monitoring frame the IO states are transferred from the PSENscan safety laser scanner. They are processed in the same way as the scan data.
  • Hint 2: By using <fragmented_scans=true> the driver will publish 1 IOStates while with <fragmented_scans=false> it will publish 6 IOStates per single publish of scan data.
  • Hint 3: The timesamps of all IO states are the same as the one of their corresponding LaserScan msg.

TF Frames

The location of the TF frames is shown in the image below. These names are defined by the aforementioned launchfile parameter name. Changing them is necessary for instance when running multiple scanners.

PILZ safety laser scanner frames

Defining the scan range

You can adjust the scan field to your needs by changing angle_start and angle_end. The published (sensor_msgs/LaserScan) will only contain data within the given angle limits. Both limits are defined within the laser_1 frame as shown in the image below.

Limit visualization

Timestamp details

The timestamps of the scan data published are computed to be close to reality and processing speed of incoming data was optimized to reduce the time for the scan data to be published. This should suffice for localization and slam algorithms. If you application benefits from getting the scan data any sooner there are two possibilities:

  • Use fragmented scans. This will publish the individual frames received by the PSENscan safety laser scanner immediately instead of waiting for a scan round to be completed and combined to a single laser scan message.
  • Use the tcp_nodelay flag in your ROS subscriber. This will disable the nagle’s algorithm, which is a TCP optimization. This algorithm can produce a jitter of about 20ms in the ros topic.
    • The cpp API of ROS does not support disabling this on the publisher side. If you don’t have control over the subscriber e.g. due to using a third party package you can create a python node which acts as a repeater for the scan topic. rospy subscriber and publisher both allow setting this flag and thus can disable it for this driver and the third party package.

Transferred IOs

The state of inputs and outputs of the PSENscan safety laser scanner are published as psen_scan_v2/IOState. The topic at /<name>/io_states is latched and always gives the most recent pin state. On changes at the physical IOs, the changes are logged to the console and the new state is published to the topic.

The input pin states contains information about

  • muting
  • override
  • zone set switching inputs

The output pin states consists of

  • OSSD safety states
  • warning output
  • reference points violation

Please see the message descriptions for full lists of bits.

Importing the zoneset configuration

Once you setup the scanner and created a configuration according to our tutorial you can use an exported xml configuration file within ROS. The configured zonesets will be published.

The zonesets you created in the Pilz configurator: configurator_screenshot

will be exactly the same in ROS: configurator_screenshot

You can try this out with:

roslaunch psen_scan_v2 psen_scan_v2.lauch config_file:='full_path_to/example_config.xml'

WARNING
There is no verification that the configuration you created using the PSENscan configurator matches the one actually loaded on the PSENscan device!

Please, always make sure to keep those configurations synchronized otherwise the published zoneset polygons might be wrong and cause confusing errors like misleading visualization or navigation results that can not be executed by your real hardware!

If you want to use the configuration node in your launchfile add a section such as:

<node ns="$(arg laser_ns)" name="config_server_node_$(arg laser_ns)" type="config_server_node" pkg="psen_scan_v2">
  <param name="config_file" value="$(arg config_file)" />
  <param name="frame_id" value="$(arg frame_id)" />
</node>

Visualizing the active zoneset

For visualizing the active zoneset in RViz you can run the active_zoneset_node. It will publish markers on the /<name>/active_zoneset_markers topic like shown in the RViz screenshot above.

Developer Information

Build Status

| Platform | Noetic | | ——– | —— | | CI | CI-Noetic | | Buildfarm src | Build Status | | Buildfarm bin | Build Status |

Branching model

main is considered to be the active development branch, it targets the ROS distributions melodic and noetic.

The ros2 branch targets the ROS 2 foxy, humble and rolling distributions. You can find the location of the psen_scan_v2-2 repository at the following link: https://github.com/PilzES/psen_scan_v2-2

With the first ROS 2 release the version number model of this package was changed:

  • ROS 1 releases now count from 0.10.0 upwards.
  • ROS 2 releases start with 0.20.0.

All version numbers < 0.10.0 are from releases prior to this change.

Test concept

psen_scan_test_concept

Migration

To update your ROS environment from the former psen_scan package (which supported firmware versions up to 3.0), please execute the following steps:

  1. Update scanner firmware using PSENscan Configurator (unless the device has firmware 3.1 already)
  2. Install the new ROS package sudo apt install ros-$ROS_DISTRO-psen-scan-v2
  3. Replace the launch file arguments:
    • password and x_axis_rotation are obsolete and should be dropped
    • angle_start and angle_end are now in radians, in direction of the x axis of the scanner tf frame
    • prefix is replaced by tf_prefix
  4. In your application launch file / roslaunch command: replace all occurrences of psen_scan with psen_scan_v2

You need further information?

Our international hotline staff will support you individually about our ROS packages at ros@pilz.de

Find more information about the PILZ safety laser scanner on the product website.

Visit us at pilz.com

PILZ is an international-scale, innovative automation technology company. PILZ uses its solutions to create safety for man, machine and the environment. In addition to head office in Ostfildern near Stuttgart, the family business is represented over 2,400 employees at 42 subsidiaries and branches on all continents.

The company’s products include sensor technology, electronic monitoring relays, safety relays, configurable and programmable control systems, automation solutions with motion control, systems for industrial communication as well as visualization solutions and operator terminals.

PILZ solutions can be used in all areas of mechanical engineering, including the packaging and automotive sector, plus the railway technology, press and wind energy sectors. These solutions ensure that baggage handling systems run safely at airports and funiculars or roller coasters travel safely; they also guarantee fire protection and energy supply in buildings.

CHANGELOG

Changelog for package psen_scan_v2

Forthcoming

  • Add PSENscan Subscribers up to 3 (#338)
  • Add PSENscan cad meshes (#338)
  • Contributors: Pilz GmbH and Co. KG

0.10.2 (2022-11-03)

  • Remove zoneset bits from IOState.input field since its redundant to the active_zoneset field (#311)
  • Inform about missing configuration confirmation
  • Ignore changes of unused IOs. Fix #321
  • Fill "io_states" vector as received instead of order by theta to avoid flickering. Fix #320
  • Fixed bug of multiple zonesets being visible #328
  • Contributors: Pilz GmbH and Co. KG

0.10.1 (2022-01-24)

  • Separate 'PinState' formating from 'formatRange' (#313)
  • Contributors: Pilz GmbH and Co. KG

0.10.0 (2022-01-20)

  • Change to new versioning method for ROS1 (0.10.0+) and ROS2 (0.20.0+).
  • Deprecate get/set methods with 'get/set' prefix in favour of methods without the prefix(#298)
  • ADD IO states to LaserScan and publish them at ~/io_state (#281)
  • Renaming Slave to Subscriber (#303)
  • Contributors: Pilz GmbH and Co. KG

0.3.4 (2021-12-20)

  • Prevent error when diagnostics are disabled. Fix #294
  • Set exception in stop-future
  • Apply clang-tidy fixes to header-files. Fix #277
  • Remove latched flag from active zoneset topic
  • API change: convenience usage of ScannerConfiguration
  • Remove unrelated parameter DEFAULT_X_AXIS_ROTATION from standalone
  • Contributors: Pilz GmbH and Co. KG

0.3.3 (2021-11-10)

  • Introduce error state and set exception in start-future
  • Remove dependency on pilz_testutils
  • Always build hardware tests
  • Internal refactorings
  • Importing the config xml-file and publishing the zoneconfiguration
  • Add active zoneset to LaserScan
  • Publish active zoneset id to ~/active_zoneset
  • Add active zoneset visualization in rviz
  • Contributors: Pilz GmbH and Co. KG

0.3.2 (2021-09-16)

  • Improve performance of standalone part
    • Introduce RawDataPtr
    • Write to std::stringstream instead of constructing from std::string
    • Pass by reference wherever possible
  • Make release build the default
  • Calculate timestamp as the time of the first ray (udp communication time is neglected)
  • API: Add timestamp (nanoseconds since epoch) to LaserScan
  • API: Add scan counter to LaserScan
  • API: remove LaserScan equality operator
  • Contributors: Pilz GmbH and Co. KG

0.3.1 (2021-07-21)

  • Rename urdf links
  • Apply tf prefix equals node name
  • API change: rename launch-file argument prefix->tf_prefix
  • Contributors: Pilz GmbH and Co. KG

0.3.0 (2021-06-29)

  • Set prefix for node name (same value as for tf frames)
  • Introduce bringup.launch for starting only the scanner node
  • Omit closing the data client before destruction. Fixes #212
  • Distance value at angle_end is now included in the scan range
  • Default scan range changed to [-137.4..137.4]deg at 0.1 deg resolution
  • Add options for modifying resolution and enabling intensities
  • Add launchfile option for disabling rviz at startup (default: enable)
  • Handle the infinity codes from the scanner correctly
  • Inform user about current scan range
  • Fix wrong behavior when angle_start and angle_end are equal
  • Contributors: Pilz GmbH and Co. KG

0.2.1 (2021-04-19)

  • Fix issues with smaller angle ranges than default range (#183)
  • Add action for pull request todos (#184)
  • Contributors: Pilz GmbH and Co. KG

0.2.0 (2021-04-05)

  • Combine multiple monitoring frames into one scan (#173)
  • Contributors: Pilz GmbH and Co. KG
  • API change: Driver waits for scan round to complete before sending measurement data by default
  • Introducing new parameter fragmented_scans to switch back to faster fragmented laser_scan messages
  • Contributors: Pilz GmbH and Co. KG

0.1.6 (2021-03-22)

  • Separate ROS and standalone CMakeLists: Closes #169
  • Minor restructuring. Closes #175
  • Contributors: Pilz GmbH and Co. KG

0.1.5 (2021-03-10)

  • Make specifying host ip optional
  • Reorder Readme sections
  • API change: A scan is published only if it contains measurement data
  • Make tests build in standalone with or without ROS installed
  • Document key components in a meaningful expressive way
  • Enable building the standalone lib using MSVC
  • Enable separate building of cpp-lib; extract sources into subproject psen_scan_v2_standalone
  • Renames ScanRange and DefaultScanRange to improve usability
  • Improve namespace hierarchy and move files to respective subfolders
  • Use defaults ports in ScannerConfiguration
  • Contributors: Pilz GmbH and Co. KG

0.1.4 (2021-01-13)

  • Add internal error handling for detecting regressions in the scanner firmware
  • Make specifying udp ports optional
  • Contributors: Pilz GmbH and Co. KG

0.1.3 (2020-12-09)

  • Add ROS noetic support (#103)
  • Use TYPED_TEST_SUITE instead of deprecated TYPED_TEST_CASE
  • Apply fixes from clang-format (#113)
  • Spelling measurements (#112)
  • Directly use fmt lib instead of rosfmt (#108)
  • Fix clang tidy errors (#109)
  • Feature/api documentation improvement (#100)
  • Improve the API documentation
  • Add ROS Noetic support
  • Contributors: Pilz GmbH and Co. KG

0.1.2 (2020-11-24)

  • Add Scanner ports in ScannerConfiguration
  • Switch branching model: Introduce main branch
  • Use github actions
  • Adds missing error bit
  • Contributors: Pilz GmbH and Co. KG

0.1.1 (2020-11-10)

  • Add intensity data to LaserScan
  • Print user message if dropped MonitoringFrames are detected
  • Print user message in case of timeout while waiting for MonitoringFrames
  • Adjust min and max scanner range. Fixes #70
  • Print diagnostic messages from PSENscan
  • Notify user about start retry
  • Add Continuous Acceptance Test
  • Contributors: Pilz GmbH and Co. KG

0.1.0 (2020-10-19)

  • Initial release for the support of PSENscan firmware >= 3.1.0
  • Start and stop the PSENscan monitoring function
  • Publish measurement data of each monitoring frame as a single ROS LaserScan message
  • Retry activation of the monitoring function on start reply timeout
  • Adding urdf for scanner and swapping Z axis of TF frame where scan is published to be sent in correct order
  • Contributors: Pilz GmbH and Co. KG

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

  • launch/psen_scan_v2.launch
    • Copyright (c) 2020-2021 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • sensor_ip [default: 192.168.0.10]
      • nr_subscribers [default: 0]
      • tf_prefix [default: laser_1]
      • tf_prefix_sub0 [default: laser_1_Subscriber0]
      • tf_prefix_sub1 [default: laser_1_Subscriber1]
      • tf_prefix_sub2 [default: laser_1_Subscriber2]
      • angle_start [default: $(eval radians(-137.4))]
      • angle_end [default: $(eval radians(137.4))]
      • intensities [default: false]
      • resolution [default: $(eval radians(0.5))]
      • host_ip [default: auto]
      • host_udp_port_data [default: 55115]
      • host_udp_port_control [default: 55116]
      • fragmented_scans [default: false]
      • config_file [default: ]
      • rviz [default: true]
  • launch/bringup.launch
    • Copyright (c) 2020-2021 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • sensor_ip [default: 192.168.0.10]
      • nr_subscribers [default: 0]
      • tf_prefix [default: laser_1]
      • angle_start [default: $(eval radians(-137.4))]
      • angle_end [default: $(eval radians(137.4))]
      • intensities [default: false]
      • resolution [default: $(eval radians(0.5))]
      • host_ip [default: auto]
      • host_udp_port_data [default: 55115]
      • host_udp_port_control [default: 55116]
      • fragmented_scans [default: false]
  • test/acceptance_tests/acceptancetest_multiple_zones_display.launch
    • Copyright (c) 2020-2021 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .

Services

No service files found

Plugins

No plugins found.

Recent questions tagged psen_scan_v2 at Robotics Stack Exchange