로그인 회원가입

 

 광-디스플레이측정기 | 소음진동측정기 | 현미경내시경 | 레이저측정기| 산업용영상 기타부품 문의

   

 

 

 

     

   SICK LMS-200 2D 레이저 스케너
  글쓴이 : 툴마켓      날짜 : 09-09-05 04:29      조회 : 8233     
   MS200카달록.pdf (3.9M), Down : 47, 2009-09-05 04:31:15
   MS200주행로봇.pdf (2.8M), Down : 25, 2009-09-05 04:31:15
   http://motion.comp.nus.edu.sg/projects/follow/follow.html (550)
   http://www.robotsinsearch.com/sick-lms-200-p-294.html (505)

SICK LMS200 2차원 레이저 스케너 입니다.
 
무인차량, 무인로봇, 공장자동화등 지형, 대상물 파악에 사용됩니다.
 
다양한 인공지능 로봇의 공간해석용으로 사용되는 대표적인 스케너로
 
최대 30m 이내 1cm 해상도를 갖고있습니다.
 
 
                                                              NASA의 무인 달 탐사로봇의 지형 스케너로 사용예
 
 
 
 

레이저 측정 시스템, 인도어 사양

적색 레이저를 사용한, 고분해가능, 고속의 스캔이 생기는 제품입니다.체적 측정이나 로봇의 위치 결정 등에 최적입니다.한층 더 레벨 컨트롤 어플리케이션에 전용 펌 웨어를 내장시켰습니다.적외의 펄스 레이저를 사용하고,180о의 범위의 각도마다의 거리를 측정합니다.에리어 감시 기능도 내장하고 있습니다.

 

 

    

   LMS200 스펙

시야 180о
각도 분해가능 1~0.25о
응답 시간 13~53 ms
분해가능 10 mm
시스템 오차 ±15 mm
통계적 오차(1 시그마) 5 mm
레이저·클래스 1
최대 측정 거리 80 m
측정 가능 거리 ≤10 m(흑색무광택)
데이터·인터페이스 RS422/RS232
데이터 전송 속도 9.6/19. 2/38. 4/500kbaud
스위칭 출력 3x PNP
전원 전압 DC24V ±15%
소비 전력 20W
보호 구조 IP 65
사용 주위 온도 0~+50℃
보관 주위 온도 -30~+70℃
중량 4.5kg
외형 치수 156 x 155 x 210 mm
 
 
 
 
 

LMS100
LMS200
LMS400
단거리 정밀측정 모델
주로 근거리로 고정밀도의 측정을 행하기 위한 측정용 스캐너입니다.
작은 스포트지름으로, 각도 분해가능이 필요한 경우에 사용할 수 있습니다.
로봇의 위치 결정이나, 컨베이어상의 물체의 치수, 체적 측정 등에 최적입니다.
 
 
 
실사진
 
 
 
 
 
응용예)
 
 
 
NASA Robotic Antarctic Explorer (LORAX) 사용예 > http://www.frc.ri.cmu.edu/projects/lorax/
 
 
 
 
 
 

LMS111
LMS211
LMS221
LMS291
장거리 고속측정 모델
장거리로 사용되는데 적합한 측정용 스캐너입니다.
안전한 클래스1의 레이저 제품입니다만, 흑색으로30m까지의 측정이 가능합니다.
안개의 보정 기능을 내장하고 있으므로, 시야가 나쁜 상태에서도 안개에 의한
오작동이 없고, 안정된 측정을 할 수 있습니다. 
 
Carnegie Mellon Vehicle 사용예
 
 
 
 
The SICK Laser Measurement Sensor LMS 200
 
is an extremely accurate distance measurement sensor that is quickly becoming a staple of the robotics community. The LMS 200 can easily be interfaced through RS-232 or RS-422, providing distance measurements over a 180 degree area up to 80 meters away. As this sensor grows in popularity, the ability to program code to interact with this sensor becomes an essential skill for all roboticists.
 
INTRODUCTION

The purpose of this tutorial is to teach you how to operate the SICK LMS-200 and construct a basic Visual Basic program to acquire data. This tutorial will tell you how the SICK works, how to set up the SICK hardware, how to operate the provided software and how to make a VB6 program to acquire data. This tutorial assumes you have basic hardware skills such as soldering and basic programming skills with Visual Basic 6.0.
 

 
 
 
프로그램 예 )
 
A range sensor is an important tool in mobile robotics, not only for obstacle avoidance, but also for features recognition (e.g., corners, halls, doors, human legs).
However, the first experiments should be made in simple environments with useful toolboxes as the ones available in Matlab.
A common measurement system for indoor environments is the Laser Range Sensor, as the Sick Laser model LMS 200 provided by the Sick Sensor Intelligence.

From this point forward, I identify this sensor as "Sick Laser". Since this device communicates with a computer by a serial port (RS232 and RS422), I decided to develop a simple interface in Matlab to configure the Sick Laser and to make some acquisitions. The code was tested in Matlab R13 (6.5.1).

 Main Code

First of all it is necessary to open a serial port to establish the communication with the Sick Laser. The serial port object returned by the function

sick_port = openPort(PORT,BAUDRATE)

must be configured according to the baudrate and other specifications (mainly the TimeOut, OutputBufferSize, OutputBufferSize for optimization purposes). For simplicity, If the user has the certainty that the serial port PORT is free and available, the previous function may be replaced by

sick_port = serial(PORT,'BaudRate',BAUDRATE)

The PORT corresponds to the serial port device (ex: 'COM1') and the BAUDRATE, the required baudrate (the possible values supported by the Sick Laser are 9600, 19200, 38400 and 500000 bps).

The next step consists on the first trial to communicate with the Laser:

testSick(sick_port)

This function tries to establish a communications with the Sick Laser at the current baudrate. If the communication fails, it tries again with a different baudrate. If the communication fails at all possible baudrates, the communication can not be established (the current serial port may be reserved/used by other software, or it must be a different serial port, or even a hardware problem, cables or the Sick Laser).

At this point, it is necessary to notice that the Sick Laser has two modes of operation: the Installation Mode and Operation Mode. The Installation Mode is defined for configurations and the Operation Mode for acquisitions. The current mode is switched by functions

chgSickInstallMode(sick_port)

and

chgSickOperationMode(sick_port)

For instance to change the current baudrate, the Sick Laser must be working in Installation Mode. By default, when the Sick Laser is switched on, it is configured to communicate at 9600 bps. The function

chgBaudRate(sick_port,NEW_BAUDRATE)

switches to the required NEW_BAUDRATE.

At Installation Mode it is possible to adopt several configurations. A wrong configuration could be solved by a hardware reset. The function

initScan(sick_port)

performs a hardware reset, similar to a power off - power on.

At this moment, the Sick Laser must be switched to Operation Mode and it is ready to make acquisitions. The function

out = getScan(sick_port)

returns a vector with 361 measured values, corresponding to a scan of 180º with an increment of 0.5º.

 Telegrams

To explain the previous functions, it is necessary to introduce the telegrams. The information or data exchanged with the Sick Laser is carried by telegrams. There are two types of telegrams,

telegrams to the Sick Laser:

STX ADR LENG_L LENG_H CMD MODE CRC_L CRC_H
and telegrams from the Sick Laser:
STX LMI LENG_L LENG_H ...body... CRC_L CRC_H

where each cell contains two bytes (ex: STX = 02h = 0x02h = 0x02). The data is transferred in binary format and INTEL data format (word transfer takes place with lower address and the least significant byte first and then bytes of higher significance and higher address).

The telegrams finish with the CRC. For example, the following telegram requests an acquisition (CMD = 0x30 and MODE = 0x01):

0x02 0x00 0x03 0x00 0x30 0x01 0x71 0x38
The response starts with ACK if received correctly within 60ms or NAK if an error occurred,
ACK
or
NAK
If ACK is received, the next telegram is the response to the last request.
STX LMI LENG_L LENG_H ...body... CRC_L CRC_H
The response to the previous example (an acquisition request) is
0x02 0x85 0xd7 0x02 ...body... CRC_L CRC_H

where the body includes the 361 sampling (722 bytes):

CMD LENG_L LENG_H 1st ... 361st LMI_S CRC_L CRC_H

for example

0xb0 0x69 0x01 1st ... 361st 0x00 CRC_L CRC_H

Resuming, a telegram to the Sick Laser is compiled as follows:

msg = [STX ADR LENL(length(msg_body))
     LENH(length(msg_body)) msg_body];

crc16 = crc16alg(msg);
msg = [msg LENL(crc16) LENH(crc16)];

where the message body (msg_body) contains the request (command and options) or the answers (e.g. the current acquisition values). The length of the message body is simply evaluated by

function number = LENL(number)
number = mod(number,256);

function number = LENH(number)
number = (number-mod(number,256))/256;
The CRC or CRC16 is a quick conversion from the C code (referred in the Sick Laser manual) to Matlab. This simple version works, but I believed that it could be optimized :-) Suggestions are welcome!

function crc16 = crc16alg (msg)

CRC16_GEN_POL = 32773; % 0x8005
crc16 = 0;
abData(1) = 0;
len = length(msg);

for f=1:len
    abData(2) = abData(1);
    abData(1) = msg(f);
    if crc16 > 32768 % (crc16 & 0x8000)
        crc16 = mod(crc16,32768) * 2;
                % crc16 = (crc16 & 0x7fff) << 1;
        crc16 = binvec2dec(xor(dec2binvec(crc16,24),
                dec2binvec(CRC16_GEN_POL,24)));
    else
        crc16 = crc16 * 2; % crc16 <<= 1;
    end;
    % crc16 ^= MKSHORT(abData[0], abData[1]);
    abData(2) = mod(abData(2),256) * 256;
    crc16 = binvec2dec(xor(dec2binvec(crc16,24),
        (dec2binvec(abData(1),24) |
        dec2binvec(abData(2),24))) );
end;

 Example of Telegrams

Some examples of telegrams are presented. In each telegram, the message body (msg_body) is set by the command and options (if required).

For initialization, which is equivalent to a hardware reset (a power off - power on):

CMD = 0x10;
msg_body = CMD;

To testing the device:

CMD = 0x31;
msg_body = CMD;

For changing to a new BaudRate (MODE = 0x42, 0x41, 0x40 and 0x48, equivalent to 9600, 19200, 38400 and 500000 kbps)

CMD = 0x20;
MODE = 0x40;
msg_body = [CMD MODE];

As previously referred, the Sick Laser works at two different modes: Installation Mode and Operation Mode. For switching to Installation Mode it is necessary to introduce the password (in this case, the password is "SICK_LMS", equivalent to
0x53 0x49 0x43 0x4B 0x5F 0x4C 0x4D 0x53 in ASCII)

CMD = 0x20;
MODE = [0x53 0x49 0x43 0x4B 0x5F 0x4C 0x4D 0x53];
msg_body = [CMD MODE];

For switching to Operation Mode

CMD = 0x20;
MODE = 0x25;
msg_body = [CMD MODE];

Finally, for an acquisition:

CMD = 0x30;
MODE = 0x01;
msg_body = [CMD MODE];

 Send and Receive Telegrams

The next step describes how to exchange the telegrams. This goal is accomplished by two simple functions,

function sendMsg(sick_port,msg)

fwrite(sick_port,msg,'uint8','async');
delay(sick_port,0)

and
function msg = getMsg(sick_port,len)
delay(sick_port,0);
if sick_port.BytesAvailable
    msg = fread(sick_port,len,'uint8');
else
    msg = [];
end
Both functions require a delay (testing the transfer status of the current serial port). This function must include the instruction "drawnow", otherwise the user can not interrupt the acquisitions (even with Ctrl+C).

function delay(sick_port,time)

while (strcmp(sick_port.TransferStatus, 'read') |
    strcmp(sick_port.TransferStatus, 'write') |
    strcmp(sick_port.TransferStatus, 'read&write') |
    toc    drawnow
end

If necessary, the following function flushes the buffer.

function flushBuffer(sick_port)
delay(sick_port,0);
if sick_port.BytesAvailable
    fread(sick_port,sick_port.BytesAvailable,'uint8');
end
In practice, some of these functions have few hidden lines of code. For instance, imagine that the cable is suddenly unplugged. The acquisition was waiting for a response! Or, if the power supply fails, the Sick Laser is reseted and switches to 9600 bps again. However, the current serial port is opened at 38400 bps! In these and other situations, an interrupt event may occur (or not!). Therefore, the code should cover all the possible unexpected situations.
 Results
The interface was only tested at 9600, 19200 and 38400 bps (at 500000 bps a special serial port controller PCI or PCMCIA is required), on a Laptop Pentium M 1.4GHz - 512MB of SDRAM with Windows XP - SP1 and Matlab R13 (6.5.1). The sampling rate at 38400 bps was near to 1.8 scanning per second (a
scanning of 180º with 361 values).
 
       
 
 
 

물품번호    
62 키엔스 비접촉 레이저 외경 측정기 마이크로미터 LS-7500    
61 키엔스 비접촉 레이저 외경 측정기 마이크로미터 LS-7000    
60 오므론 ZG2 단면 형상 측정 레이저 변위계    
59 LJ-3000 2D 이차원 비접촉 레이저 표면 형상 측정기    
58 OMRON 옴론 3Z4L 레이저외경측정기 15Ø    
57 안리츠 KL350A KL151A 미세-고속 레이저 외경 측정기 2Ø    
56 MICRO-EPSILON optoNCDT 2200 레이저 변위계    
55 KEYENCE LS-7000 레이저 외경 측정기 32Ø    
54 DORC ZX-1 Mini 광섬유 곡면검사용 간섭계    
53 [!] 라이카 HDS3000 레이저 대형 3D 스케너    
52 [공지] NEC INT-5000 초장거리 3차원 레이저 측정기    
51 항공기, 선박등 대형 정밀 구조물용 3차원 측정기    
50 MINOLTA VIVID 9i 미놀타 3차원 3D 스케너    
49 MINOLTA VIVID 700 미놀타 3차원 3D 스케너    
48 MINOLTA VIVID 300 미놀타 3차원 3D 스케너    
47 NEC Danae-R 3D 3차원 스케너 + 래피드폼 소프트웨어 세트    
46 로렌드 3D Modeling Machine LPX-250 3차원 LASER 3D 스케너    
45 Steinbichle C100VZ 3차원 3D 스케너    
44 키엔스 2차원 자동 치수 측정기 VM-8040 비디오미터    
43 파나소닉 SUNX 초고속 레이저 변위계 HL-C1C    
42 초장거리 레이저 변위계    
41 ZYGO MESA 레이저 간섭계    
40 ZYGO PTI250 RS 렌즈용 레이저 간섭계    
39 LT-8000 시리즈 2차원 레이저 측정 변위계    
38 LT-900 시리즈 2차원 레이저 측정 변위계    
37 OPTO CONTROL 2600 정밀 레이저 외경측정기 34Ø    
36 미쓰도요 LSM-500 레이저 외경 측정기 2Ø    
35 LS-5000 고정밀도 비접촉 레이저 외경 측정기 62~120Ø    
34 LS-3000 고정밀도 비접촉 레이저 외경 측정기 32Ø    
33 VG-300 외경측정기 VG-035 레이저 라인 게이지 - 32Ø    
32 LX2-03 레이저 비접촉 변위 측정기    
31 SICK LD-OEM1000 3D 레이저 스케너    
30 키엔스 2D 에리어 레이저 스캐너    
29 SICK LMS-200 2D 레이저 스케너    
28 키엔스 장초점 레이저 변위계 LK-500    
27 CV-2000 , OP-42342 이미지 분석기 비전카메라    
26 오므론 FZ2 칼라 비전센서    
25 키엔스 XG-7000 고기능 비전센서    
24 LX2-100 MS2-H50 레이저 라인에리어 측정기    
23 NAIS LASER DISPLACEMENT SENSOR 레이저 변위계    
22 키엔스 고속 레이저 변위계 LC-2400 정밀도 0.02 μm    
21 CV-120 이미지 분석기 비전카메라    
20 CV-300 이미지분석 시스템 비전카메라    
19 샤프 IV-S20 이미지 분석기 비전카메라    
18 시그마 3차원 측정 소프트 COMS EMS98AD-3D    
17 키엔스 레이저 변위계 LB-040 LB-1000 정밀도 2μm    
16 미쓰도요 LSM-3000 레이저 외경 측정기 ( LSM-310S ) 10Ø    
15 비전시스템 CV-100 이미지 분석기    
14 KEYENCE LE-4000 비접촉 레이저 표면 형상 측정기    
13 OMRON 고정도 레이저 변위센서 Z4M-W40RA 수량2대    
 1  2