# Understanding the SICK S300 RS422 data output

I'm using a SICK S300 safety scanner connected via RS422 -> USB and I'm trying to decode the lines of data into meaningful values, however looking at the data compared to the Telegram Listing it seems almost impossible due to the many differing values. Has anyone done this before?

I've tried using ROS and found difficulties doing so, especially as the package for the S300 doesn't support reflectors, which would be preffered.

According to the SICK 300 driver in ROS, your endpoint data will be a sensor_msgs/LaserScan ROS message, which you could reach to its values such as ranges[] and intensities[] by the specified topic.

• The ROS package doesn't seem to work properly although I have the correct setup on the S300 device, it receives messages however I get "Invalid CRC" – fzeta Sep 10 at 13:16

The source code for decoding the telegram coming from the serial interface can be found here.

The actual decoding is in the getScan() function at line 160. after identifying the required part of the telegram (which as it seems, comes form multiple readings of the serial port), the scan data is converted to Polar coordinates using the convertScanToPolar() function in line 196

To answer your question. Yes, myself and others have done this before.

In practice you only need a subset of the telegrams for a given application.

I think you would be surprised how quickly you can write what you need if you sit down and start coding.

If you really get into it and handle all the telegrams, and are able to open the source code, I'm sure the community would appreciate it.

• I've managed to acquire some data using the RK512 header and read on from there, however I'm struggling to understand the data afterward, the measured value data and the CRC – fzeta Sep 10 at 13:17