·Î±×ÀΠȸ¿ø°¡ÀÔ

 

 ±¤-µð½ºÇ÷¹ÀÌÃøÁ¤±â £ü ¼ÒÀ½Áøµ¿ÃøÁ¤±â £ü Çö¹Ì°æ³»½Ã°æ £ü ·¹ÀÌÀúÃøÁ¤±â£ü »ê¾÷¿ë¿µ»ó £ü ±âŸºÎÇ° £ü¹®ÀÇ

   

 

 

 

     

   SICK LMS-200 2D ·¹ÀÌÀú ½ºÄɳÊ
  ±Û¾´ÀÌ : Åø¸¶ÄÏ      ³¯Â¥ : 09-09-05 04:29      Á¶È¸ : 10303     
   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 (878)
   http://www.robotsinsearch.com/sick-lms-200-p-294.html (839)

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).
 
       
 
 
 

¹°Ç°¹øÈ£    
61 Å°¿£½º ºñÁ¢ÃË ·¹ÀÌÀú ¿Ü°æ ÃøÁ¤±â ¸¶ÀÌÅ©·Î¹ÌÅÍ LS-7500    
60 Å°¿£½º ºñÁ¢ÃË ·¹ÀÌÀú ¿Ü°æ ÃøÁ¤±â ¸¶ÀÌÅ©·Î¹ÌÅÍ LS-7000    
59 ¿À¹Ç·Ð ZG2 ´Ü¸é Çü»ó ÃøÁ¤ ·¹ÀÌÀú º¯À§°è    
58 LJ-3000 2D ÀÌÂ÷¿ø ºñÁ¢ÃË ·¹ÀÌÀú Ç¥¸é Çü»ó ÃøÁ¤±â    
57 ¾È¸®Ã÷ KL350A KL151A ¹Ì¼¼-°í¼Ó ·¹ÀÌÀú ¿Ü°æ ÃøÁ¤±â 2¨ª    
56 MICRO-EPSILON optoNCDT 2200 ·¹ÀÌÀú º¯À§°è    
55 [ÆǸſë] KEYENCE LS-7600 ·¹ÀÌÀú ¿Ü°æ ÃøÁ¤±â 62¨ª    
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 Æijª¼Ò´Ð SUNX ÃÊ°í¼Ó ·¹ÀÌÀú º¯À§°è HL-C1C    
42 ÃÊÀå°Å¸® ·¹ÀÌÀú º¯À§°è    
41 ZYGO MESA ·¹ÀÌÀú °£¼·°è    
40 ZYGO PTI250 RS ·»Áî¿ë ·¹ÀÌÀú °£¼·°è    
39 LT-8000 ½Ã¸®Áî 2Â÷¿ø ·¹ÀÌÀú ÃøÁ¤ º¯À§°è    
38 LT-900 ½Ã¸®Áî 2Â÷¿ø ·¹ÀÌÀú ÃøÁ¤ º¯À§°è    
37 OPTO CONTROL ODC2600-40 Á¤¹Ð ·¹ÀÌÀú ¿Ü°æÃøÁ¤±â 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´ë    
12 Panasonic LM-10 Á¤¹Ð ·¹ÀÌÀú º¯À§°è    
 1  2