·Îº¸Æ½½º
(Robotics)
C ÀΰøÁö´É ÇÁ·Î±×·¡¹Ö : Herbert Schildt ÁöÀ½, ½Å°æ¼÷.·ù¼º·Ä ¿Å±è, ¼¼¿õ, 1991 (¿ø¼ : Artificial Intelligence using C, McGraw-Hill, 1987), page 215~269
2. »ê¾÷¿ë ·Îº¿ (THE INDUSTRIAL ROBOT)
2.1. ±³À° Ææ´øÆ® (The Teach Pendant)
2.2. ·Îº¿ Á¦¾î ¾ð¾î (Robotic-Control Languages)
3. ÀÚÀ²·Îº¿ (AUTONOMOUS ROBOT)
4. ·Îº¿ ½Ã¹Ä·¹ÀÌÅÍ ¸¸µé±â (CREATING ROBOT SIMULATOR)
4.1. ½Ã¹Ä·¹ÀÌÅÍ ½Ã¹æ (The Simulator Specifications)
4.3. ·Îº¿ °¡¸£Ä¡±â (Teaching Robot)
4.4. ÇÁ·Î±×·¥ ¼öÇà (Running Program)
4.5. ½Ã¹Ä·¹ÀÌÅÍ »ç¿ë (Using the Simulator)
4.6. ½Ã¹Ä·¹ÀÌÅÍ È®Àå (Expanding the Simulator)
´ëºÎºÐÀÇ »ç¶÷µéÀÌ ·Îº¿ (robot) À̶ó´Â ¸»À» µéÀ¸¸é, º¸Åë Çϵå¿þ¾î¸¦ ¿¬»óÇÑ´Ù. Áï ·Îº¿ÀÇ ¹°¸®ÀûÀÎ ¸ð½ÀÀ» ±¸¼ºÇÏ´Â ±â°èÀûÀ̰í Àü±âÀûÀÎ ÀåÄ¡. ±×·¯³ª, ·Îº¿ÀÌ ÇÏ´Â ÀÏÀ» ´õ ±íÀÌ ÆÄ°íµé¼ö·Ï, ·Îº¿À» ±¸¼ºÇÏ´Â °ÍÀº Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾îÀÇ ¿¬°áÀ̶ó´Â °ÍÀº ´õ ¸í¹éÇØÁø´Ù. ¼ÒÇÁÆ®¿þ¾î´Â ÀåÄ¡ (device) À̸éÀÇ Áö´ÉÀ̰í, ·Îº¿À» ´Ù¸¥ ÇüÅÂÀÇ ÀÚµ¿È¿Í ±¸º°ÇÏ´Â °ÍÀÌ ÀÌ Áö´ÉÀÌ´Ù. ÀÌ Àå¿¡¼´Â °³°üÀ» ³Ñ¾î¼± Çϵå¿þ¾î´Â ´Ù·çÁö ¾Ê´Â´Ù. ´ë½Å Çϵå¿þ¾î¸¦ ±¸µ¿½ÃŰ´Â Áö´É¿¡ ÃÊÁ¡À» µÐ´Ù.
±âº»ÀûÀ¸·Î µÎ °¡Áö À¯ÇüÀÇ ·Îº¿ÀÌ ÀÖ´Ù. ù ¹øÂ° À¯ÇüÀº ÀÚµ¿Â÷¸¦ Á¶¸³Çϴµ¥ »ç¿ëµÇ´Â °Í°ú °°Àº, À§Ä¡°¡ °íÁ¤µÈ »ê¾÷ Á¶¸³ ¶óÀοëÀÌ´Ù. ÀÌ·¯ÇÑ Á¾·ùÀÇ ·Îº¿Àº ¸íÈ®È÷ ±× Àϸ¸À» À§ÇÏ¿© ¼³°èµÈ, ¸Å¿ì ÅëÁ¦µÈ ȯ°æ¿¡¼¸¸ ÀÛµ¿µÇ¾î¾ß ÇÑ´Ù. µÎ ¹øÂ° À¯ÇüÀº ÀÚ¹ßÀûÀ¸·Î ¿òÁ÷ÀÌ´Â ·Îº¿À¸·Î ±¸¼ºµÈ´Ù. ÀÌ·± ·Îº¿µéÀº ½Ç¼¼°è¿¡¼ ÀÛµ¿Çϵµ·Ï ¼³°èµÈ´Ù. ¸Å¿ì °£´ÜÇÑ ¸ðµ¨À» Á¦¿ÜÇϰí, ÀÚÀ² ·Îº¿Àº ¾ÆÁ÷ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ÀÌÀ¯´Â, Á¤¸»·Î ÀÚÀ²ÀûÀÎ ·Îº¿À» ¸¸µå´Â °ÍÀº AI ÀÇ °¡Àå ´Ù·ç±â Èûµç ¹®Á¦ Áß ¸î°¡Áö¸¦ ÇØ°áÇÒ °ÍÀ» ¿ä±¸Çϱ⠶§¹®ÀÌ´Ù. ÀÌ ÀÌÀ¯°¡ AI ÇÁ·Î±×·¡¸Ó¸¦ ºÎÃß±â¾î ·Îº¿À» ¸¸µé°Ô ÇÏ´Â °ÍÀÌ´Ù.
ÀÌ ÀåÀº ·Îº¿À» ¸¸µå´Â ¹æ¹ýÀ» Àá±ñ º¸°í, ±×°ÍÀ» ÇÁ·Î±×·¥ÇÏ´Â µ¥¿¡ »ç¿ëµÇ´Â Àü¹® ·Îº¸Æ½ Á¦¾î ¾ð¾î¸¦ Æ÷ÇÔÇÏ¿©, ·Îº¿ÀÇ ÇöÀç »óÅ¿¡ ´ëÇÑ °³°üÀ» Á¦½ÃÇÑ´Ù. ÀÌ ÀåÀÇ ¸¶Áö¸· ºÎºÐÀº ÀÚÀ² ·Îº¿¿¡ ´ëÇÑ ¿¬±¸¸¦ À§ÇÏ¿© ½ÃÀÛÁ¡ ¿ªÇÒÀ» ÇÒ ¼ö ÀÖ´Â, °£´ÜÇÏÁö¸¸ È®ÀåÇÒ ¼ö ÀÖ´Â ·Îº¿ ½Ã¹Ä·¹ÀÌÅ͸¦ °³¹ßÇÑ´Ù.
»ç½Ç»ó ¸ðµç »ê¾÷ ·Îº¿µéÀº ´Ü¼øÈ÷ ³¡¿¡ ¹°°ÇÀâ´Â ÀåÄ¡°¡ ´Þ¸° ·Îº¿ ÆÈÀÌ´Ù. ·Îº¿ÀÇ ÆÈÀº ¾î¶² ·Îº¿¿¡°Ôµµ - »ê¾÷¿ëÀ̵ç ÀÚÀ²ÀûÀ̵ç - ±âº» Á¶ÀÛ ÀåÄ¡ÀÌ´Ù. ·Îº¿ ÆÈÀ» Á¦¾îÇÏ·Á°í ÇÒ ¶§ ºÎµúÄ¡´Â ¸î°¡Áö º¹ÀâÇÑ ¹®Á¦µéÀ» ÀÌÇØÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦µé¾î, ¹°ÄÅÀ» ÀâÀ¸·Á°í ¼ÕÀ» »¸Ä¥ ¶§, ±× ¿òÁ÷ÀÓÀº ³ë·ÂÀÌ µéÁö ¾Ê°í »ý°¢¾øÀÌ ÀÌ·ç¾îÁö´Â °Í °°´Ù. ±×·¯³ª, »ç½ÇÀº ¿©·¯ ±ÙÀ°ÀÇ Á¶ÀýÀ» ¿ä±¸ÇÏ´Â º¹ÀâÇÑ ÀÏÀÌ´Ù. ¾Æ±â°¡ À̿Ͱ°Àº ÀÏÀ» Çϱâ À§Çؼ´Â ¿©·¯ ´ÞÀ» ÇÊ¿ä·Î ÇÔÀ» ±â¾ïÇØ¾ß ÇÑ´Ù. ÈçÈ÷ ÀÖ´Â ·Îº¿ÆÈÀº »ç¶÷ÀÇ ÆÈÀ» º»¶á °ÍÀÌ´Ù. ´ëºÎºÐÀÇ ·Îº¿ ÆÈÀº ¿òÁ÷ÀÓÀÌ °¡Àå Å« ÃàÀÌ 6 °³ÀÎ ÆÈÀÌ´Ù. ±×¸² 1 Àº ÃàÀÌ 6 °³ÀÎ ÆÈÀÇ ½ºÄÉÄ¡ÀÌ´Ù. ÈçÈ÷ ÀÌÀ½¸Å (joint) ¶ó°í ºÎ¸£´Â °¢ ÃàÀº ºÐ¸®µÈ ¸ðÅͳª, Ä¿´Ù¶õ ÆÈÀÇ °æ¿ìó·³, ¼ö·Â ½Ç¸°´õ¿¡ ÀÇÇØ µ¿ÀÛÇÑ´Ù.
±×¸² 1 ¿¡¼ º¸¿©ÁÖµíÀÌ, ¿©¼¸ ÃàÂ¥¸® ·Îº¿ ÆÈÀº ½ÇÁ¦·Î ÂüÁ¶ÇÒ µÎ ÁÂÇ¥ ½Ã½ºÅÛÀ» Æ÷ÇÔÇÑ´Ù. ¹Ø¸é°ú µÎ ÆÈÀº X-Y-Z ÁÂÇ¥ ½Ã½ºÅÛÀ» Çü¼ºÇϰí, ¼ÕÀâÀÌ (grip) ´Â µÎ ÁÂÇ¥ ½Ã½ºÅÛ¿¡¼ Àß ¿òÁ÷ÀδÙ. ±×·¯¹Ç·Î, °ø°£ÀÇ ¾î´À ƯÁ¤ÇÑ Á¡¿¡ µµ´ÞÇÏ´Â °ÍÀº ÆÈ¿¡¼ ´Ù¼¸ °³ÀÇ ÀÌÀ½¸Å¸¦ »ç¿ëÇÒ °ÍÀ» ¿ä±¸ÇÑ´Ù. ¿©¼¸ ¹øÂ° ÃàÀ» µû¸¥ ¿òÁ÷ÀÓÀº ¹æÇâ¿¡¸¸ ¿µÇâÀ» ÁÖ´Â ¼ÕÀâÀÌ (grip) ÀÚüÀÇ È¸ÀüÀÌ´Ù.
±×¸² 1. ÃàÀÌ 6 °³ÀÎ ·Îº¿ ÆÈ
ÀÌ·± À¯ÇüÀÇ ÆÈÀ» Á¦¾îÇÒ ¶§ ¾î·Á¿î Á¡Àº ¿òÁ÷ÀÓÀ» Á¤È®ÇÏ°Ô ¸¸µå´Â °ÍÀÌ ¾Æ´Ï¶ó - Çϵå¿þ¾î°¡ ±×°ÍÀ» ó¸®ÇÑ´Ù - ¿©¼¸ °³ ÀÌÀ½¸ÅÀÇ ÇàÀ§¸¦ Á¶Á¤ÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦µé¾î, ·Îº¿ ÆÈÀÌ ºÎºÐÀûÀ¸·Î ¿¸° â¿¡ µµ´ÞÇϱ⸦ ¿øÇϰí, ·Îº¿Àº óÀ½¿¡ ÆÈÀÌ »¸ÃÄÁø ä·Î ³õ¿©ÀÖ°í â¹®°ú ¹Ý´ëÂÊÀ¸·Î ¸éÇØ ÀÖ´Ù°í »ý°¢ÇØ¾ß ÇÑ´Ù. ¹Ø¸é¿¡¼ ½ÃÀÛÇÏ¿© Àâ´Â °÷±îÁö À̵¿ÇÏ¸é ·Îº¿À» ȸÀü½ÃÄױ⠶§¹®¿¡ â¹®ÀÌ ±úÁ® ¹ö¸°´Ù. ·Îº¿ÆÈÀÌ Àû´çÈ÷ µ¿ÀÛÇϱâ À§Çؼ´Â ¸ðµç ÀÌÀ½¸Å°¡ »ç¶÷ÀÇ ÆÈó·³ µ¿½Ã¿¡, ÇÔ²² ÀÛµ¿ÇØ¾ß ÇÑ´Ù.
±×·¯³ª, ´Ü¼øÈ÷ ¸ðµç ÀÌÀ½¸Å¸¦ Çѹø¿¡ ¿òÁ÷ÀÌ´Â °ÍÀÌ ¸ðµç ¹®Á¦¸¦ ¿ÏÀüÈ÷ ÇØ°áÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ¿¹¸¦µé¾î, ·Îº¿ÆÈÀº Á¼Àº ¹°Ã¼ ¾È¿¡ µµ´ÞÇϱâ À§ÇÏ¿© Á÷¼±À¸·Î ¹°Ã¼¸¦ ÇâÇØ ¼ÕÀâÀ̸¦ »¸Ä¡´Â °ÍÀÌ Á¾Á¾ ÇÊ¿äÇÏ´Ù. ÀÌ·¸°Ô ÇÏ·Á¸é ¾ÆÁÖ º¹ÀâÇÑ »ï°¢¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ±×¸² 2 °¡ ÀÌ »óȲ¿¡ ´ëÇÑ ±×·¡ÇÁ Ç¥ÇöÀ» º¸¿©ÁØ´Ù. º¸´Â ¹Ù¿Í °°ÀÌ, ¼ÕÀâÀ̰¡ ÀåÄ¡°¡ C Á¡¿¡ µµ´ÞÇϱâ À§Çؼ ÀÌÀ½¸Å A ¿Í B °¡ ¸ðµÎ À̵¿µÇ¾î¾ß ÇÑ´Ù. ÀÌÀ½¸Å A ¸¦ À̵¿½ÃŰ´Â °ÍÀÌ ºñ·Ï ÆÈÀ» ´õ ÃæºÐÈ÷ È®ÀåÇÏ°Ô ÇÏÁö¸¸ ¶ÇÇÑ ÆÈÀ» ³·Ãß°Ô ÇÑ´Ù. ÀÌ·¸°Ô ÇÏ·Á¸é ÀÌÀ½¸Å B ¿¡ ÀÇÇÑ À̵¿À» ´õ ÇÊ¿ä·Î ÇÑ´Ù. ´õ¿íÀÌ, ÆÈÀ» ±¸¼ºÇÏ´Â ºÎºÐµéÀÇ ±æÀ̰¡ ´Ù¸¦ ¼öµµ Àֱ⠶§¹®¿¡, ÆÈÀ» Á÷¼±À¸·Î À̵¿½Ã۱â À§Çؼ´Â ÀÌÀ½¸Å A ¿Í B °¡ ´Ù¸¥ ºñÀ²·Î À̵¿Çϵµ·Ï Áö½Ã ¹Þ¾Æ¾ß ÇÑ´Ù. À̿Ͱ°Àº À¯ÇüÀÇ ¹®Á¦´Â, ±ÔÁ¤µÈ °ø°£ ¾È¿¡¼ ·Îº¿ÀÌ ¿ÏÀüÈ÷ ¹æÇâÀ» ¹Ù²Ù¾î¾ß ÇÑ´Ù¸é ´õ º¹ÀâÇÏ´Ù. ¿¹¸¦µé¾î, ·Îº¿ÀÌ ÄÚ³Ê ºÎºÐ¿¡ µµ´ÞÇØ¾ß ÇÑ´Ù¸é ¸¹Àº º¸Ãæ À̵¿ÀÌ ÇÊ¿äÇÏ´Ù.
Á÷¼±À̵¿ ¹®Á¦ÀÇ º¯ÇüÀº, ·Îº¿ÀÌ ±× ¾Õ¿¡ ¶È¹Ù¸¥ ¼öÆò¼±¿¡¼ ¼ÕÀâÀ̸¦ À̵¿ÇØ¾ß ÇÒ ¶§ ¹ß»ýÇÑ´Ù. À̸¦ ÀÌ·ê ¼ö ÀÖ´Â À¯ÀÏÇÑ ¹æ¹ýÀº ·Îº¿ÀÇ ¹Øº¯À» µ¹¸®´Â °ÍÀÌ´Ù. ±×·¯³ª ¹Ø¸éÀÌ È¸ÀüÇÒ ¶§, ´Ù¸¥ ÀÌÀ½¸ÅµéÀº º¸Ãæ À̵¿À» ÇØ¾ß ÇÑ´Ù. ºñ±³Àû °£´ÜÇÑ »ï°¢ º¯ÇüÀÇ ¹Ýº¹µÈ ÀÀ¿ëÀ» ÅëÇØ ÀÌ ¸ðµç À¯ÇüÀÇ ¹®Á¦µéÀ» ÇØ°áÇÒ ¼ö ÀÖÁö¸¸, ÇØ°áÀº ½Ç½Ã°£¿¡ ÇàÇØÁ®¾ß ÇÑ´Ù´Â °ÍÀ» ±â¾ïÇØ¾ß ÇÑ´Ù.
±×¸² 2. Á÷¼± ¿îµ¿ ±×·¡ÇÁ
·Îº¸Æ½½º ºÐ¾ß¿¡¼, ´ëºÎºÐÀÇ ³ë·ÂÀº »ê¾÷ Á¶¸³ ·Îº¿À» ¸¸µé°í Çâ»ó½ÃŰ´Â µ¥¿¡ Àû¿ëµÇ°í ÀÖ´Ù. ÀÌµé ·Îº¿Àº ÅëÁ¦µÉ ȯ°æ¿¡¼ »ç¿ëµÇ±â ¶§¹®¿¡ ÀÚÀ²ÀûÀÎ ·Îº¿º¸´Ù »ó´çÈ÷ ´ú ¿µ¸®ÇÒ ¼öµµ ÀÖ´Ù.
´çºÐ°£ ±×¸®°í »ó´ç±â°£, »ê¾÷ ·Îº¿Àº ºÐ¸íÈ÷ ÇÁ·Î±×·¥µÈ Àϵ鸸 ¼öÇàÇÒ¼ö ÀÖÀ» °ÍÀÌ´Ù. ·Îº¿ÀÌ »õ·Î¿î ±â¼úÀ» ¹è¿ï ¼ö ÀÖ´Â µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù : ¸ÕÀú, ±³À° Ææ´øÆ®¸¦ »ç¿ëÇÏ¿© ¹è¿ì°Å³ª, µÑ°·Î, ·Îº¿ Á¦¾î ¾ð¾î¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥ÇÒ ¼ö ÀÖ´Ù. ÀÌ Àý¿¡¼´Â µÎ ¹æ¹ýÀ» ¼³¸íÇÑ´Ù.
»õ·Î¿î ÀÏÀ» ¼öÇàÇϵµ·Ï ·Îº¿À» ÇÁ·Î±×·¥ÇÏ´Â °¡Àå ÈçÇÑ ¹æ¹ýÀº ±³À° Ææ´øÆ® (teach pendant : Àå½Ä¹° ¶Ç´Â ºÎ¼Ó¹°·Î ÇØ¼®µÊ) ¸¦ »ç¿ëÇÏ´Â ÀÏÀÌ´Ù. ±³À° Ææ´øÆ®´Â ¿ÀÆÛ·¹ÀÌÅÍ·Î ÇÏ¿©±Ý ·Îº¿ÀÇ ¿©·¯ ÀÌÀ½¸Å¸¦ ¿òÁ÷ÀÌ°Ô ÇÏ´Â ¼Õ¿¡ Áå Á¦¾î»óÀÚÀÌ´Ù. (¸ðÇü ÀÚµ¿Â÷, ¹è, ºñÇà±â¿¡¼ »ç¿ëµÇ´Â Á¦¾î±â¿Í ºñ½ÁÇÏ´Ù). ·Îº¿ÀÇ °¢ Á¦Á¶¾÷ÀÚ°¡ ºñ·Ï ¾à°£ ´Ù¸¥ À¯ÇüÀÇ ±³À° Ææ´øÆ®¸¦ ¸¸µé¾î ³ÂÁö¸¸ ¸ðµç ±³À° Ææ´øÆ®´Â ±×¸² 3 ¿¡ ÀÖ´Â ¸ð¾ç°ú ºñ½ÁÇÏ´Ù.
¿ÞÂÊ |
|
¿À¸¥ÂÊ |
|
|
|
À§·Î |
|
¾Æ·¡·Î |
|
|
|
ÀâÀÌ´ÝÀ½ |
|
ÀâÀÌ¿° |
|
|
|
ȸÀü |
|
Çڵ弱Á¤ |
|
|
|
ÆÈ¼±Åà |
|
³¡ |
|
|
|
±×¸² 3. ¼Õ¿¡ Áã´Â ±³À° Ææ´øÆ®
±³À° Ææ´øÆ®´Â ·Îº¿¿¡ Á÷Á¢ ¿¬°áµÇÁö ¾Ê°í, ·Îº¿ÀÇ ÁÖ¿ä Á¦¾î ÄÄÇ»Å͸¦ ÅëÇØ ¿¬°áµÈ´Ù. ¸¸¾à ·Îº¿¿¡°Ô ¾î¶² ÀÏÀ» °¡¸£Ä¡°í ½Í´Ù¸é ±× ÀÏÀ» ±¸¼ºÇÏ´Â ÇÊ¿äÇÑ À̵¿¼ø¼¸¦ ·Îº¿¿¡°Ô ¾Ë·ÁÁÖ±â À§ÇÏ¿© ±³À° Ææ´øÆ®¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. °¢ ÀÌÀ½¸Å¸¦ ¿òÁ÷ÀÏ ¶§, ÄÄÇ»ÅÍ´Â °¢ À§Ä¡¸¦ ±â·ÏÇÑ´Ù. °¡¸£Ä¡´Â °úÁ¤ÀÌ ¿Ï¼ºµÈ ÈÄ¿¡, ÀÌÁ¦ ·Îº¿Àº ´õ ÀÌ»óÀÇ µµ¿ò¾øÀÌ ½º½º·Î ÀÌÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù.
±³À° Ææ´øÆ®´Â ¿ëÁ¢À̳ª ÆÄ·¹Å¸ÀÌ¡ (palletizing) °ú °°Àº °£´ÜÇÑ ÀÏÀ» ·Îº¿¿¡°Ô °¡¸£Ä¡±â¿¡ ÈǸ¢ÇÑ ¹æ¹ýÀÌ´Ù. ±×·¯³ª, ÀÏÀÌ ´õ º¹ÀâÇØÁö°í ¿ÜºÎÀÇ »ç°Ç µ¿±âÈ (event synchronization) °¡ ´õ Áß¿äÇØÁü¿¡ µû¶ó, ¶Ç´Â ¸¸¾à ·Îº¿ÀÌ ¸¹Àº °æ¿ì¸¦ ÀνÄÇÏ°í ±×°Í¿¡ ´Ù¸£°Ô ¹ÝÀÀÇÒ Çʿ䰡 ÀÖ´Ù¸é, ±³À° Ææ´øÆ® ½Ã½ºÅÛ¿¡´Â ±Ý¹æ °ú´ÙÇÑ ºÎ´ãÀÌ °£´Ù. ·Îº¿ Á¦¾î ¾ð¾î°¡ °³¹ßµÈ °ÍÀÌ ¹Ù·Î ÀÌ ÀÌÀ¯ ¶§¹®ÀÌ´Ù.
·Îº¿ Á¦¾î ¾ð¾î´Â ·Îº¿À» Á¦¾îÇϱâ À§ÇÏ¿© Ưº°È÷ ¼³°èµÈ ÄÄÇ»ÅÍ ¾ð¾îÀÌ´Ù. ·çÇÁ Á¦¾î¿Í Á¶°Ç¹®°ú °°Àº Åë»óÀûÀÎ ¸í·É¾î¸¦ Æ÷ÇÔÇÏ´Â °Í ¿Ü¿¡, ·Îº¿ Á¦¾î ¾ð¾î´Â ¶ÇÇÑ ·Îº¿ÀÇ ¿òÁ÷ÀÓÀ» Á¦¾îÇÏ´Â ¸í·É¾îµéÀ» Æ÷ÇÔÇÑ´Ù. ·Îº¿ Á¦¾î ¾ð¾î¸¦ ´Ù¸¥ ´Ù¸ñÀû¿ë ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í ºÐ¸®ÇÏ´Â °ÍÀº ¹Ù·Î ¿òÁ÷ÀÓÀÇ Á¦¾î ¶§¹®ÀÌ´Ù. ·Îº¿ Á¦¾î ¾ð¾î¿¡´Â ·Îº¿ÀÌ ¸¸µé °¢ À̵¿¿¡ ´ëÇÏ¿© °ø°£ Á¤º¸¸¦ °£Á÷ÇÏ´Â ³»ÀåµÈ µ¥ÀÌÅͺ£À̽º°¡ Æ÷ÇԵǾî ÀÖ´Ù.
·Îº¿ Á¦¾î ¾ð¾î´Â ±³À° Ææ´øÆ®¸¦ ´ëüÇϱâ À§ÇÏ¿© ¼³°èµÈ °ÍÀÌ ¾Æ´Ï¶ó ±×°ÍÀ» º¸ÃæÇϱâ À§ÇÏ¿© ¼³°èµÈ Á¡À» ÀÌÇØÇÏ´Â °ÍÀÌ Áß¿äÇÏ´Ù. ±×·¯¹Ç·Î, ·Îº¿ Á¦¾î ¾ð¾î´Â ±³À° Ææ´øÆ®¿ÍÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇØ¾ß ÇÑ´Ù. ÀüÇüÀûÀÎ ¹æ¹ýÀº, ·Îº¿¿¡°Ô Ææ´øÆ®¸¦ »ç¿ëÇÏ¿© ÇÊ¿äÇÑ °ø°£ Á¤º¸¸¦ °¡¸£Ä¡°í, ±×¸®°í ³ª¼ ·Îº¿ÀÌ ±× Á¤º¸¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ±ÔÁ¤Çϱâ À§ÇÏ¿© ·Îº¿ Á¦¾î ¾ð¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀϹÝÀûÀ¸·Î, °¢ ƯÁ¤ÇÑ À§Ä¡´Â ÇÁ·Î±×·¥ÀÌ ±×°ÍÀ» ÂüÁ¶ÇÒ ¼ö ÀÖµµ·Ï ±âÈ£ À̸§ÀÌ ÁÖ¾îÁø´Ù.
ÀüÇüÀûÀÎ ·Îº¿ Á¦¾î ¾ð¾î´Â BASIC °ú À¯»çÇÑ ¹®¹ýÀ» °®´Â´Ù. ºñ·Ï ¼¼·ÃµÇÁö´Â ¾Ê¾ÒÁö¸¸, ÀÌ ¹®¹ýÀº ¹è¿ì±â°¡ ½±´Ù. (Á» ´õ ±¸Á¶ÈµÈ, ÆÄ½ºÄ® (Pascal) °ú ºñ½ÁÇÑ ·Îº¿ Á¦¾î ¾ð¾î°¡ °³¹ßµÈ °ÍÀº ÃÖ±ÙÀÇ ÀÏÀÌ´Ù.) ÃÖÃÊÀÇ, °¡Àå ÈçÈ÷ »ç¿ëµÈ ·Îº¿ Á¦¾î ¾ð¾î´Â VAL Àε¥ À̰ÍÀº À¯´Ï¸ÞÀ̼ǻç (Unimation Corporation) °¡ ¸¸µé¾ú´Ù. VAL ÇÁ·Î±×·¥ÀÇ ¹¦¹Ì¸¦ ¾Ë±â À§Çؼ, ´ÙÀ½¿¡ ÀÖ´Â °ÍÀ» °ËÅäÇØ º¸ÀÚ. ·Îº¿ÀÌ Äܺ£ÀÌ¾î º§Æ®¿¡¼ »óÀÚ¸¦ Á¦°ÅÇϱâ À§ÇÏ¿© »ç¿ëµÉ ¼ö ÀÖ´Ù.
REMARK WAIT FOR OBJECT 10 WAIT 2 REMARK OBJECT PRESENT, REMOVE IT MOVE POS1 MOVE POS2 CLOSEI REMARK CLOSE THE GRIP MOVE BOX1 OPENI REMARK DROP THE OBJECT GOTO 10 |
ÀÌ ÇÁ·Î±×·¥À» »ç¿ëÇϸé, ·Îº¿Àº ÀÔ·Â ½ÅÈ£ 2 °¡ Ȱ¼ºÈ (active) µÉ ¶§±îÁö ±â´Ù¸± °ÍÀÌ´Ù : À̰ÍÀº ¹øÈ£ 2 ½ÅÈ£¼±ÀÌ ÇÏÀÌ (high) ·Î µÉ ¶§±îÁö ·Îº¿Àº ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. À̰ÍÀº ¹°Ã¼°¡ Äܺ£À̾î À§¿¡ ÀÖÀ½À» ·Îº¿¿¡°Ô ¾Ë·ÁÁØ´Ù. ´ÙÀ½, ·Îº¿Àº ±× ¹°Ã¼·Î À̵¿ÇÏ¿©, ±×°ÍÀÇ À§·Î °¥ °ÍÀÌ´Ù. ±×¸®°í³ª¼, Àâ´Â ÀåÄ¡¸¦ Á¢±Ù½Ã۰í, Äܺ£À̾î·ÎºÎÅÍ ¹°Ã¼¸¦ À̵¿½ÃÄѼ ±× ¹°Ã¼¸¦ Á¦°ÅÇÒ °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î, ÇÁ·Î±×·¥Àº ´ÙÀ½ ¹°Ã¼¸¦ À§ÇÏ¿© ·çÇÁ¸¦ µ¹¸ç ±â´Ù¸± °ÍÀÌ´Ù.
VAL Àº ´ë¹®ÀÚ¸¸ Áö¿øÇÑ´Ù. ¼¼ À§Ä¡ POS1, POS2, BOX1 Àº ·Îº¿ÀÌ ±³À° Ææ´øÆ®¸¦ »ç¿ëÇÏ¿© ¹è¿î À§Ä¡ÀÇ ±âÈ£ À̸§ÀÌ´Ù.
¸ðµç »ê¾÷ ·Îº¿Àº µ¿±âȸ¦ À§ÇÏ¿© ÀÔ·ÂÇϰí Ãâ·ÂÇÏ´Â ¾î¶² ¹æ¹ýÀ» Á¦°øÇÑ´Ù : ¿¹¸¦µé¾î, ¹æ±Ý ÁÖ¾îÁø VAL ÇÁ·Î±×·¥¿¡¼ WAIT ¸í·É¾î´Â ÀÔ·Â ½ÅÈ£ 2 ¸¦ »ç¿ëÇÑ´Ù. ÀüÇüÀûÀÎ ·Îº¿Àº °ÅÀÇ 8 °³ÀÇ ÀÔÃâ·Â¼±À» Á¢±ÙÇÒ °ÍÀÌ´Ù. »ê¾÷ ·Îº¿Àº ÀϹÝÀûÀ¸·Î ÀÚ½ÅÀÇ ÀϺημ ¾î¶² °¨Áö±â (sensor) µµ °®Áö ¾Ê´Â´Ù. ·Îº¿ÀÌ ¾î¶² ÇüÅÂÀÇ °¨Áö±â¸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é, ´Ü¼øÈ÷ ÀÔ·Â ½ÅÈ£¿¡ ÀÇÇØ ·Îº¿¿¡ ¿¬°áÇÏ´Â Àü¿ë µð¹ÙÀ̽º·Î Á¦°øµÈ´Ù. ±×·¯¹Ç·Î ÇÁ·Î±×·¡¸Ó´Â ±× ½ÅÈ£¼±µéÀÇ Àǹ̸¦ Àû´çÈ÷ ÇØ¼®ÇØ¾ß ÇÑ´Ù.
ÀÚÀ²·Îº¿Àº »ê¾÷·Îº¿º¸´Ù ´õ ¿µ¸®ÇØ¾ß Çϱ⠶§¹®¿¡ ÈξÀ ´õ º¹ÀâÇÏ´Ù. ÀÚÀ²·Îº¿ÀÌ ½Ç¼¼°èÀÇ ÅëÁ¦µÇÁö ¾ÊÀº ȯ°æ¿¡¼ ÀÛµ¿ÇÏ·Á¸é »ê¾÷ ·Îº¿ÀÌ ¿ä±¸ÇÏÁö ¾Ê´Â ¿©·¯ °¡Áö ±â¼úÀ» ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù : ¿¹¸¦µé¾î, µè°í º¼ ¼ö ÀÖ°Ô ÇÏ´Â °¨Áö±â¸¦ ÇÊ¿ä·Î ÇÒ °ÍÀ̸ç ÀÚ¿¬¾ð¾î¿Í ±× ¾ð¾î°¡ ÀǹÌÇÏ´Â °ÍÀ» ÀÌÇØÇØ¾ß ÇÑ´Ù. Áö±Ý±îÁö º¸¾ÒµíÀÌ, ·Îº¿¿¡°Ô ÀÌ µÎ°¡Áö ±â´ÉÀ» ºÎ¿©ÇÏ´Â °ÍÀº ÀÛÀº ÀÏÀÌ ¾Æ´Ï´Ù. ´õ¿íÀÌ, ·Îº¿Àº ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ¾î¾ß Çϴµ¥, À̰ÍÀº ¾Æ¸¶ °¡Àå ¾î·Á¿î ÇÁ·Î±×·¡¹Ö ¾÷¹«ÀÏ °ÍÀÌ´Ù. ºÐ¸íÈ÷, °¡´ÉÇÑ ¸ðµç °æ¿ì¿¡ ÀÇÇØ ¹Ì¸® ·Îº¿À» ÇÁ·Î±×·¥ÇÒ ¼ö ¾ø±â ¶§¹®¿¡, ·Îº¿ÀÌ ¿©·¯ »óȲ¿¡ ÀÀ¿ëµÉ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ´Â À̰ÍÀÌ ÇÊ¿äÇÏ´Ù.
ÀÚÀ² ·Îº¿ÀÇ Á¦ÀÛÀ» ¸·´Â ÁÖ¿ä Àå¾Ö¹°Àº ÇÁ·Î±×·¡¸Ó°¡ ÇÊ¿ä·Î ÇÏ´Â ¼ÒÇÁÆ®¿þ¾î ±â¹ýÀÌ ¾ÆÁ÷ °³¹ßµÇÁö ¸øÇß´Ù´Â »ç½ÇÀÌ´Ù. ¶ÇÇÑ, ÀÌ·± À¯ÇüÀÇ ·Îº¿Àº ¾Æ¸¶µµ ¾î¶² º´·Ä󸮸¦ ¿ä±¸ÇÒÅÙµ¥, À̰ÍÀº ¾ÆÁ÷µµ Ãʱ⠻óÅÂÀÌ´Ù. (º´·Ä󸮴 ´õ ºü¸¥ ¼Óµµ¸¦ ³»±â À§ÇÏ¿© µÑ ÀÌ»óÀÇ CPU ¸¦ »ç¿ëÇÑ´Ù)
±â¼úÀûÀÎ ¹®Á¦¸¦ ±Øº¹ÇÒ ¼ö ÀÖ´Ù¸é, ¹ý·üÀûÀÎ Ãø¸é¿¡¼ÀÇ ÇØ¼®¹®Á¦°¡ ¿©ÀüÈ÷ ³²´Â´Ù. ·Îº¿ÀÌ ¿ì¿¬È÷µç ¿ì¹ßÀûÀ¸·Îµç Á˸¦ ÁöÀ¸¸é, ·Îº¿ÀÌ À¯ÁËÀΰ¡ ȤÀº ±× ¼ÒÀ¯ÀÚ°¡ À¯ÁËÀΰ¡? ¾Æ¸¶µµ À¯ÁËÀÎ ÂÊÀº ·Îº¿ÀÇ Á¦Á¶¾÷ÀÚÀ̰ųª ±×°ÍÀ» ÇÁ·Î±×·¥ÇÑ »ç¶÷ÀÏ °ÍÀÌ´Ù. ´õ¿íÀÌ, ÀÚÀ²·Îº¿Àº ¾î¶² ±Ç¸®¶óµµ °®´Â°¡ ¾Æ´Ï¸é ´Ü¼øÈ÷ ±â°èÀûÀÎ ³ë¿¹Àΰ¡ ÀÌ·± ¹®Á¦µéÀÌ ¹Ì·¡¿¡ ´äÇØÁú Çʿ䰡 ÀÖÀ» °ÍÀÌ´Ù.
·Îº¸Æ½½º¸¦ ½ÇÇèÇϱâ À§Çؼ ·Îº¿ÀÌ ÀÖÀ» ÇÊ¿ä´Â ¾ø´Ù. ·Îº¿À» ¸¸µå´Â ½ÇÁ¦´Â ¼ÒÇÁÆ®¿þ¾îÀ̱⠶§¹®¿¡ Çϵå¿þ¾î´Â Áß¿äÇÏÁö ¾Ê´Ù. ¼ÒÇÁÆ®¿þ¾î°¡ ¾ø´Ù¸é, ·Îº¿Àº ´Ü¼øÈ÷ ºñ½Ñ ¹® °É¸®°³ (doorstop) ¿¡ ºÒ°úÇÏ´Ù.
·Îº¿ ½Ã¹Ä·¹ÀÌÅͰ¡ »ý»ê ±â¼úÀÚµé·Î ÇÏ¿©±Ý Á¶¸³ ¶óÀÎ (assembly line), ¶Ç´Â Àüü °øÀå Á¶Â÷µµ ¹Ì¸® ¼³°èÇϵµ·Ï Çϱ⠶§¹®¿¡ »ê¾÷¿¡¼ ½ÇÁ¦·Î ¾ÆÁÖ ÈçÇÏ´Ù´Â °ÍÀ» ¾Ë¸é ³î¶öÁöµµ ¸ð¸¥´Ù. ÀÌ ½Ã¹Ä·¹ÀÌÅÍ Áß ¸î¸îÀº ¸Å¿ì º¹ÀâÇÏ¿©, ÀÛµ¿Çϱâ À§Çؼ´Â ºü¸£°í ºñ½Ñ ÄÄÇ»Å͵éÀ» ¿ä±¸ÇÑ´Ù. ±×·¯³ª, C ¸¦ »ç¿ëÇÏ¿© °£´ÜÇÑ ½Ã¹Ä·¹ÀÌÅ͸¦ ±¸ÇöÇÒ ¼ö ÀÖ´Ù : ÀÌ ½Ã¹Ä·¹ÀÌÅÍ´Â ¹«¾ùÀÌ ·Îº¿À» ÇÁ·Î±×·¥Çϱ⿡ ÁÁÀº °ÍÀÎÁö ¾Ë°Ô ÇÑ´Ù.
ÀÌ Àå¿¡¼ °³¹ßµÈ ·Îº¿ ½Ã¹Ä·¹ÀÌÅÍ´Â ÀÌ Ã¥¿¡¼ °¡Àå ±ä ÇÁ·Î±×·¥À̱Ⱑ ½±´Ù. ·Îº¿ Á¦¾î ¾ð¾î ÆÄ¼ ; °ø°£ Á¤º¸¸¦ ÀúÀåÇÏ´Â µ¥ÀÌÅͺ£À̽º ; µð½ºÇ÷¹ÀÌ¿Í ¿òÁ÷ÀÓ ½Ã¹Ä·¹ÀÌ¼Ç ·çƾ ; °£´ÜÇÑ ¿¡µðÅÍ, ±×¸®°í ¿©·¯ °¡Áö Áö¿ø ·çƾµéÀ» Æ÷ÇÔÇÏ¿© ¿©·¯ Ư¡µé (features) À» Æ÷ÇÔÇÑ´Ù. ¶ÇÇÑ Á¦ 5 Àå¿¡¼ °³¹ßµÈ µ¨Å¸-D ÆÐÅÏ Àνı⸦ Æ÷ÇÔÇÑ´Ù. ½Ã¹Ä·¹ÀÌÅÍ´Â µ¶ÀÚ°¡ °ÈÇϰí È®ÀåÇϱâ À§ÇÑ ½ÃÀÛÁ¡À¸·Î ¼³°èµÈ´Ù. ÇÁ·Î±×·¥À» ¿¬±¸Çϱâ Àü¿¡, ¹«¾ùÀ» Çϰí Á¦ÇÑÁ¡ÀÌ ¹«¾ùÀÎÁö ÀÌÇØÇØ¾ß ÇÑ´Ù.
·Îº¿ ½Ã¹Ä·¹ÀÌÅÍ È¯°æÀº ´Ü ³× °³ÀÇ ´ë»óÀ¸·Î ä¿öÁø ¼¼°è·Î ±¸¼ºµÈ´Ù : ÇϳªÀÇ »ç°¢Çü, µÎ °³ÀÇ »ï°¢Çü, ·Îº¿, ½ºÅ©¸°ÀÇ ³ª¸ÓÁö´Â ºóÄÀÌ´Ù. »ç°¢Çü°ú »ï°¢ÇüÀº Á¦ 5 Àå¿¡¼ »ç¿ëµÈ °Í°ú °°Àº °ÍµéÀ̰í, ÀÌ Àå¿¡¼ °³¹ßµÈ delta-D ÀνıⰡ ½Ã¹Ä·¹ÀÌÅÍ¿Í ÇÔ²² »ç¿ëµÉ °ÍÀÌ´Ù. ·Îº¿Àº ÀÚÀ²ÀûÀÌ°í ½ºÅ©¸°¿¡¼ # ±âÈ£·Î Ç¥ÇöµÈ´Ù. (±×·¡ÇÈ ¸ðµå°¡ »ç¿ëµÇÁö ¾Ê±â ¶§¹®¿¡, ÀÌ ÇÁ·Î±×·¥À» ¾î´À ÄÄÇ»ÅÍ¿¡¼³ª ¼öÇà½Ãų ¼ö ÀÖ´Ù). ·Îº¿Àº ´Ù¸¥ ¹°Ã¼°¡ ¾ø´Â ¾î´À °÷¿¡³ª °¥ ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î, »ç°¢Çü°ú »ï°¢ÇüÀº Àå¾Ö¹°À̰í, ·Îº¿Àº ±×°ÍµéÀ» µ¹¾Æ°¡¾ß ÇÏ°í °¡·ÎÁú·¯ °¡¼´Â ¾ÈµÈ´Ù. ¸¶Áö¸·À¸·Î, ·Îº¿Àº ¹Ù·Î °¡±î¿î °÷¿¡¼ Àå¾Ö¹°À» °¨ÁöÇÒ ´É·Â°ú, »ï°¢Çü°ú »ç°¢ÇüÀ» ¹ß°ßÇÒ ´É·ÂÀ» °®´Â´Ù. ½Ã¹Ä·¹ÀÌÅÍ´Â ´ÙÀ½ ¼±Åà »çÇ×µéÀ» Á¦°øÇÏ´Â ¸Þ´º¿¡ ÀÇÇØ ±¸µ¿ (drive) µÈ´Ù :
·Îº¿À» ÇÁ·Î±×·¥Çϱâ À§ÇÑ µÎ °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù. ù ¹øÂ° °ÍÀº ·Îº¿ Á¦¾î ¾ð¾î¸¦ »ç¿ëÇÑ ¹æ¹ýÀ̰í, µÎ ¹øÂ°´Â ½Ã¹Ä·¹ÀÌÆ®µÈ ±³À° Ææ´øÆ® »ç¿ëÀ» ÅëÇØ¼ÀÌ´Ù. ·Îº¿ Á¦¾î ¾ð¾î´Â °£´ÜÇÏÁö¸¸ ½±°Ô È®ÀåÇÒ ¼ö Àִµ¥, ´ÙÀ½ ¸í·É¾îµé·Î ±¸¼ºµÈ´Ù :
(1) moveto ¸í·É
·Îº¿¿¡°Ô ½ºÅ©¸°ÀÇ Æ¯Á¤ X, Y ÁÂÇ¥·Î °¡µµ·Ï ¾Ë¸®±â À§ÇÏ¿© moveto ¸í·ÉÀ» »ç¿ëÇÑ´Ù. ½ºÅ©¸°ÀÇ ÁÂÃø»ó´Ü Äڳʰ¡ 0, 0 ÀÌ´Ù. À̰ÍÀº ÇàÀÌ 0ºÎÅÍ 24 ±îÁö ¹øÈ£ ºÙ¿©Á® ÀÖ°í ¿ÀÌ 0ºÎÅÍ 79 ±îÁö ¹øÈ£ ºÙ¿©Á® ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿¹µéµé¾î,
moveto 60 12
´Â ·Îº¿À¸·Î ÇÏ¿©±Ý 60, 12 À§Ä¡±îÁö À̵¿ÇÏ°Ô ÇÑ´Ù. ¼ýÀÚµé »çÀÌ¿¡ ÄÞ¸¶°¡ »ç¿ëµÇÁö ¾ÊÀ½À» ÁÖ¸ñÇØ¾ß ÇÑ´Ù : ºóÄÀ» Çϳª »ç¿ëÇØ¾ß ÇÑ´Ù.
(2) move ¸í·É
move ¸í·ÉÀ» »ç¿ëÇÏ¸é ·Îº¿À» Á¤ÇØÁø ¹æÇâÀ¸·Î ÇÑ À§Ä¡ (one position) ¸¸Å À̵¿ÇÏ°Ô ÇÑ´Ù. Űº¸µå left, right, up ¶Ç´Â down À» »ç¿ëÇÏ¿© ÁöÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦µé¾î,
move up
move left
´Â ·Îº¿ÀÌ ÀÌÀü À§Ä¡·ÎºÎÅÍ ÇÑ Çà À§·Î, ±×¸®°í ³ª¼ ÇÑ ¿ ¿ÞÂÊÀ¸·Î À̵¿ÇÏ°Ô ÇÑ´Ù. ¹æÇâÀº ½ºÅ©¸°¿¡ ´ëÇÏ¿© »ó´ëÀûÀÌ´Ù : ½ºÅ©¸°À» º¼ ¶§, À§°¡ up ÀÌ°í ¾Æ·¡°¡ down ÀÌ´Ù.
(3) movep ¸í·É
movep ¸í·ÉÀ» »ç¿ëÇÏ¸é ·Îº¿¿¡°Ô ÀÌÀü¿¡ ±³À° Ææ´øÆ®¸¦ »ç¿ëÇÏ¿© ¹è¿ü´ø À§Ä¡·Î À̵¿Çϵµ·Ï ¾Ë·ÁÁØ´Ù. ¸ðµç À§Ä¡´Â Á¡ (point) À» °¡Áö°í ½ÃÀÛÇϰí, 1 °ú 200 »çÀÌÀÇ Á¤¼ö·Î ³¡³´Ù. ¿¹¸¦µé¾î, ´ÙÀ½ ÄÚµå´Â ·Îº¿À» ¼¼ À§Ä¡·Î º¸³½´Ù.
movep point1
movep point12
movep point
(4) findt ¿Í finds ¸í·É
findt ¿Í finds ¸í·ÉÀº ·Îº¿¿¡°Ô »ï°¢Çü ¶Ç´Â »ç°¢ÇüÀ» °¢°¢ ¹ß°ßÇϵµ·Ï ¾Ë·ÁÁØ´Ù. À̸¦ Çϱâ À§ÇØ, ·Îº¿Àº Á¦ 5 Àå¿¡¼ °³¹ßµÇ¾ú´ø µ¨Å¸-D ÆÐÅÏ Àνı⸦ »ç¿ëÇÑ´Ù. ·Îº¿Àº ¹°Ã¼ À§ÂÊ¿¡ ÀÖÀ¸¸é ±× ¹°Ã¼¸¦ ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ¹°Ã¼¸¦ ¹ß°ßÇÑ ÈÄ, ÀÚ½ÅÀ» ¹°Ã¼ÀÇ ¿ìÃø»ó´Ü ÄÚ³ÊÀÇ ¿ÞÂÊÀ¸·Î ÇÑ ¿¸¸Å À§Ä¡½Ãų °ÍÀÌ´Ù.
(5) goto ¸í·É
goto ¸í·ÉÀ» »ç¿ëÇϸé ÇÁ·Î±×·¥ ¼öÇàÀÌ ÁöÁ¤µÈ ·¹À̺í·Î Àü´ÞµÈ´Ù. ¿¹¸¦µé¾î,
goto five
´Â Á¦¾î¸¦ ·¹À̺í five ´ÙÀ½¿¡ ¿À´Â ÄÚµå·Î Àü´ÞÇÑ´Ù. ·¹À̺íÀº ·Îº¿ Á¦¾î ¾ð¾îÀÇ ¾î¶² Űº¸µå ¹®ÀÚ·Î ±¸¼ºÇÏÁö ¾Ê´Â ÇÑ, Àμ⠹®ÀÚµéÀÇ °áÇÕÀ¸·Î ±¸¼ºµÈ´Ù.
(6) ifsense ¸í·É
À¯ÀÏÇÑ ÇÁ·Î±×·¥ Á¦¾î ¹®ÀåÀÌ ifsense ÀÌ´Ù. ±ÔÁ¤µÈ´ë·Î, ·Îº¿ÀÇ ¿À¸¥ÂÊ, ¿ÞÂÊ, À§ ¶Ç´Â ¾Æ·¡¿¡ ¹°Ã¼°¡ ÀÖ´ÂÁö¸¦ °áÁ¤ÇÑ´Ù. ¹°Ã¼°¡ ÀÖÀ¸¸é, ·Îº¿Àº then ´ÙÀ½ ¹®ÀåÀ» ¼öÇàÇÑ´Ù : ¹°Ã¼°¡ ¾øÀ¸¸é, ¼öÇàÀº ÇÁ·Î±×·¥ÀÇ ´ÙÀ½ ÁÙ¿¡¼ ´Ù½Ã ½ÃÀÛÇÑ´Ù. Ű¿öµå up, down, left ¶Ç´Â right ¸¦ »ç¿ëÇÏ¿© °¨Áö ¹æÇâÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
¿¹¸¦µé¾î, ÀÌ ÇÁ·Î±×·¥Àº ·Îº¿À¸·Î ÇÏ¿©±Ý ¹°Ã¼ÀÇ Ãø¸éÀ» µû¶ó À̵¿ÇÏ°Ô ÇÒ °ÍÀÌ´Ù.
loop1 move down
ifsense right then goto loop1
½Ã¹Ä·¹ÀÌÅÍ´Â ÇÁ·Î±×·¥À» ÀÔ·ÂÇÒ ¸î°¡Áö ¹æ¹ýÀ» Áö¿øÇØ¾ß Çϱ⠶§¹®¿¡, ½ÃÀÛÇÒ ¶§´Â ÇÁ·Î±×·¥ ¿¡µðÅ͸¦ °¡Áö°í ÇÏ´Â °ÍÀÌ´Ù. ¿¡µðÅÍ´Â °£´ÜÇÏ´Ù : ºó ÁÙÀÌ ÀÔ·ÂµÉ ¶§ ±îÁö Çѹø¿¡ ÇÑ ÁÙ¾¿ ÀÔ·ÂÇÏ°Ô ÇÑ´Ù. ¸Å¿ì ±ä ¿¹ÀÇ Å©±â¸¦ ÁÙÀÌ´Â °ÍÀ» µ½±â À§ÇÏ¿© ¾î¶² ´Ù¸¥ ÇÔ¼öµµ À¯¿ëÇÏÁö ¾Ê´Ù. (±×·¯³ª, ¾î¶² ´Ù¸¥ ÇÔ¼öµéÀ» Ãß°¡ÇÏ°í ½ÍÀ»Áöµµ ¸ð¸¥´Ù. ¶Ç´Â º°°³ÀÇ ÅØ½ºÆ® ¿¡µðÅ͸¦ »ç¿ëÇϰųª ÆÄÀÏ·Îµå ·çÆ¾À» ¸¸µé ¼öµµ ÀÖ´Ù.) ¹®ÀÚ ¹è¿ prog ´Â ÇÁ·Î±×·¥À» À¯ÁöÇÑ´Ù. ¿¡µðÅͰ¡ ´ÙÀ½¿¡ ÀÖ´Ù :
/* input a program */ edit() { char s[100]; printf("¡¬n"); *prog='¡¬0'; /* initialize the program array */ do { printf(" : "); gets(s); if (*s) { strcat(s, "¡¬n"); /* use newline as separator */ strcat(prog, s); } } while(*s); } |
teach ¸í·ÉÀº ȯ°æ ½ºÅ©¸° »ç°¢Çü°ú »ï°¢ÇüµéÀÌ ÀÖ´Â °Í - ÀÌ ³ªÅ¸³ª°Ô ÇÑ´Ù. ·Îº¿Àº 0, 0 ÀÇ ½ÃÀÛ À§Ä¡ (home position) ¿¡ ³õÀδÙ. ÀÌ Á¡¿¡¼, È»ìÇ¥¸¦ »ç¿ëÇÏ¿© ·Îº¿À» À̸®Àú¸® ¿òÁ÷À̱â À§ÇÏ¿© ¼ýÀÚŰ ÆÐµå (numeric keypad) ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. INS ۸¦ ´©¸£¸é, ÄÄÇ»ÅÍ´Â ·Îº¿ÀÇ ÇöÀç À§Ä¡¸¦ °ø°£ µ¥ÀÌÅͺ£À̽º (spatial database) ¿¡ ÀúÀåÇÏ°í ´ÙÀ½ ¸Þ½ÃÁö¸¦ (½ºÅ©¸°ÀÇ ÁÂÃøÇÏ´Ü Äڳʿ¡) µð½ºÇ÷¹ÀÌ ÇÑ´Ù. ¿©±â¼, N Àº 1 °ú 200 »çÀÌÀÇ ¼ýÀÚÀÌ´Ù. ¸Å¹ø, INS ۸¦ ´©¸¦ ¶§ ¸¶´Ù, À§Ä¡ À̸§Àº Çϳª¾¿ Áõ°¡µÉ °ÍÀÌ´Ù. ÀÌ·± ½ÄÀ¸·Î (°¢ Á¡Àº µ¶Æ¯ÇÑ À̸§À» °¡Áö¸ç) Á¡µéÀÇ ¼ø¼ (sequence) ¿¡ ´ëÇÏ¿© ·Îº¿À» °¡¸£Ä¥ ¼ö ÀÖ´Ù.
´ÙÀ½¿¡ ÀÖ´Â teach() ÇÔ¼ö´Â ŰÆÐµå·ÎºÎÅÍ ¹®ÀÚ¸¦ Àаí Àû´çÇÑ ¿¬»êÀ» ¼öÇàÇÑ´Ù. ±×·¯¹Ç·Î, ŰÆÐµå´Â ·Îº¿ ½Ã¹Ä·¹ÀÌÅÍ¿¡ ´ëÇÏ¿© ±³À° Ææ´øÆ®°¡ µÈ´Ù. Áö¿øÇÔ¼ö get_point() ´Â point µ¥ÀÌÅͺ£À̽º¿¡ ¿¸° ½½·Ô (open slot) ÀÇ À妽º¸¦ ¸®ÅÏÇÑ´Ù.
/* teach the robot certain moves */ teach() { int x, y; int i; char name[30], num[10]; strcpy(name, "point"); position(); gotoxy(0, 0); x=cur_x; y=cur_y; for (; ;) { switch(tolower(getch())) { case '8' : if (move(x, y-1)) y--; break; case '2' : if (move(x, y+1)) y++; break; case '4' : if (move(x-1, y)) x--; break; case '6' : if (move(x+1, y) x++; break; case '0' : if (i=get_point()) { itoa(i, num, 10); strcpy(point[i].name, name); /* increment point name */ strcat(point[i].name, num); gotoxy(0, 24); printf("%s stored", point[i].name); printf(" "); point[i].x=x; point[i].y=y; } break; case '1' : cur_x=cur_y=0; /* reset globals */ return; } } }
/* return index of an open slot in the point database */ get_point() { register int t; for (t=1; t<MAX ; t++) if (!*(point[t].name)) return t; return 0; } |
move() ÇÔ¼ö´Â ·Îº¿À» ¾î¶² À§Ä¡·Î À̵¿½ÃŲ´Ù. À̵¿ÀÌ °¡´ÉÇϸé 1 ÀÌ°í °¡´ÉÇÏÁö ¾ÊÀ¸¸é 0 ÀÌ´Ù.
´ÙÀ½¿¡ ÀÖ´Â ÇÔ¼ö run() Àº ÇÁ·Î±×·¥¿¡¼ ÀνºÆ®·°¼ÇÀ» ¼öÇàÇÏ´Â Áö¿ø ·çƾµéÀ» ±¸µ¿½ÃŰ´Â ÁÖ¿ä ·çÇÁÀÌ´Ù.
/* execute a robot program */ run() { get_token(); while(*token) { if (!strcmp(token, "moveto")) moveto_setup(); if (!strcmp(token, "findt")) findt(); if (!strcmp(token, "finds")) finds(); if (!strcmp(token, "move")) do_move(); if (!strcmp(token, "ifsense")) ifsense(); if (!strcmp(token, "goto")) do_goto(); if (!strcmp(token, "movep")) do_movep(); get_token(); } } |
·çÇÁ¸¦ ÅëÇØ ¸Å¹ø, get_token() Àº ÅäÅ«À» °Ë»ö (retrieve) Çϰí Àû´çÇÑ ÀνºÆ®·°¼ÇÀÌ ¼öÇàµÈ´Ù. get_token() ÇÔ¼ö´Â ÀÌ Ã¥ ¾Õ¿¡¼ »ç¿ëµÈ °Í°ú °ÅÀÇ °°´Ù. ÇÁ·Î±×·¥ÀÌ ½ÇÁ¦·Î null ·Î ³¡³ª´Â ±ä ½ºÆ®¸µÀ̱⠶§¹®¿¡, ÄÄÇ»ÅͰ¡ ÇÁ·Î±×·¥ÀÇ ³¡¿¡ µµ´ÞÇÒ ¶§ - ±×·¯¹Ç·Î, while ·çÇÁ¸¦ ¸ØÃâ ¶§ - token Àº null ÀÏ °ÍÀÌ´Ù.
Àüü ÇÁ·Î±×·¥ÀÌ ´ÙÀ½¿¡ ÀÖ´Ù. ½ÇÁ¦·Î °¢ ¸í·ÉÀ» ¼öÇàÇÏ´Â ·çƾÀÌ ÇÁ·Î±×·¥ÀÇ ½ÇÁ¦ ºÎºÐÀ» ±¸¼ºÇÑ´Ù´Â °ÍÀ» ÁÖ¸ñÇØ¾ß ÇÑ´Ù. ÀÌ ºÎºÐµéÀ» ÁÖÀDZí°Ô °øºÎÇÏ°í ³ª¼ ÇÁ·Î±×·¥À» ÄÄÇ»ÅÍ¿¡ ³ÖÀÚ.
/* Robot Simulator */ #include "stdio.h" #include "dos.h" #define MAX 200 #define SQUARE 0 #define TRIANGLE 1
/* database for delta-D recognizer */ struct oldpoints { int x, y; } oldp[MAX]; int pos=0; /* indexes into oldp database */
/* database for holding the spatial coordinates of user taught locations (points) in 2-d space */ struct loc_point { int x, y; char name[30]; } point[MAX]; #define PROGSIZE 1000 char prog[PROGSIZE]; /* holds the robot program */ char *p_pos=0; /* points into the sentence */ char token[80]; /* contains the world */ char cur_x, cur_y; /* current x, y pos of robot */ main() { char ch; register int t; for (t=0; t<MAX; t++) *(point[t].name)='¡¬0'; for (; ;) { gotoxy(0, 24); printf("choose : (E)dit, (R)un, (T)each, (Q)uit : "); setup(); /* restart each time */ switch(tolower(getch()) { case 'e' : edit(); break; case 'r' : position(); run(); break; case 't' : teach(); cls(); break; case 'q' : exit(); } } } setup() { pos=0; p_pos=prog; cur_x=cur_y=0; }
/* input a program */ edit() { char s[100]; printf("¡¬n"); *prog='¡¬0'; /* initialize the program array */ do { printf(" : "); gets(s); if (*s) { strcat(s, "¡¬n"); /* use newline as separator */ strcat(prog, s); } } while(*s); }
/* teach the robot certain moves */ teach() { int x, y; int i; char name[30], num[10]; strcpy(name, "point"); position(); gotoxy(0, 0); x=cur_x; y=cur_y; for (; ;) { switch(tolower(getch())) { case '8' : if (move(x, y-1)) y--; break; case '2' : if (move(x, y+1)) y++; break; case '4' : if (move(x-1, y)) x--; break; case '6' : if (move(x+1, y) x++; break; case '0' : if (i=get_point()) { itoa(i, num, 10); strcpy(point[i].name, name); /* increment point name */ strcat(point[i].name, num); gotoxy(0, 24); printf("%s stored", point[i].name); printf(" "); point[i].x=x; point[i].y=y; } break; case '1' : cur_x=cur_y=0; /* reset globals */ return; } } }
/* return index of an open slot in the point database */ get_point() { register int t; for (t=1; t<MAX ; t++) if (!*(point[t].name)) return t; return 0; }
/* execute a robot program */ run() { get_token(); while(*token) { if (!strcmp(token, "moveto")) moveto_setup(); if (!strcmp(token, "findt")) findt(); if (!strcmp(token, "finds")) finds(); if (!strcmp(token, "move")) do_move(); if (!strcmp(token, "ifsense")) ifsense(); if (!strcmp(token, "goto")) do_goto(); if (!strcmp(token, "movep")) do_movep(); get_token(); } }
moveto_setup() { int x, y; get_token(); x=atoi(token); get_token(); y=atoi(token(); if (outrange(x, y)) { serror("moveto arguments out of range ¡¬n"); } else moveto(x, y); }
/* move to a point */ moveto(x, y) int x, y; { char incx, incy; x=x-cur_x; y=y-cur_y; do { while(y) { if (y<0) incy=-1; else incy=1; if (move(cur_x, cur_y+incy)) y-=incy; else x+=find_path_right(cur_x, cur_y); } while(x) { if (x<0) incx=-1; else incx=1; if (move(cur_x+incx, cur_y)) x-=incx; else y+=find_path_down(cur_x, cur_y); } } while (x||y); }
/* moves the robot to specified point if possible. Returns 0 on invalid location, 1 otherwise */ move(x, y) int x, y; { if (outrange(cur_x, cur_y)) return; if (check_point(x, y)) return 0; gotoxy(cur_x, cur_y); /* if you wish to see the robot's trial, then remove the comments around the next line */ /* putchar('.') ; */ gotoxy(x, y); putchar('#'); cur_x=x; cur_y=y; return 1; }
find_path_down(x, y) int x, y; { if (check_point(x, y+1)) { move(cur_x, cur_y-1); return 1; } else { move(cur_x, cur_y+1); return -1; } }
find_path_right(x, y) int x, y; { if (check_point(x+1, y)) { move(cur_x-1, cur_y); return 1; } else { move(cur_x+1, cur_y); return -1; } }
/* find a triangle */ findt() { int x, y; if (recognize(&x, &y, TRIANGLE)) move(x-1, y); }
/* find a square */ finds() { int x, y; if (recognize(&x, &y, SQUARE)) move(x-1, y); }
/* move one increment in specified direction */ do_move() { get_token(); if (!strcmp(token, "up")) move(cur_x, cur_y+1); else if (!strcmp(token, "down")) move(cur_x, cur_y+1); else if (!strcmp(token, "left")) move(cur_x-1, cur_y); else if (!strcmp(token, "right")) move(cur_x+1, cur_y); }
/* if position indicated is clear then do target statement */ ifsense() { char xinc, yinc; xinc=yinc=0; get_token(); if (!strcmp(token, "up")) yinc=-1; else if (!strcmp(token, "down")) yinc=1; else if (!strcmp(token, "left")) xinc=-1; else if (!strcmp(token, "right")) xinc=1; if (!check_point(cur_x+xinc, cur_y+yinc)) { /* failure, so find next statement */ while (*p_pos!='¡¬n' && *p_pos!='¡¬0') p_pos++; return; } get_token(); /* check for "then" */ if (strcmp(token, "then")) { serror("-then-expected ¡¬n") } /* return with p_pos pointing to the target statement */ }
/* perform the goto */ do_goto() { char *p, label[80]; get_token(); strcpy(label, token); /* to find the label, you must search through the program, so the current state of the system must be saved */ p=p_pos; p_pos=prog; /* start at top and look for label */ get_token(); while(*token) { if (!strcmp(token, label)) return; /* find */ get_token(); } p_pos=p; /* not found so clean up */ }
/* goto a user taught point */ do_movep() { register int t; get_token(); for (t=0; t<MAX; t++) { if (!strcmp(point[t].name, token)) { moveto(point[t].x, point[t].y); return; } } serror("point not found"); }
/* return true if out-of-range coordinates */ outrange(x, y) int x, y; { if (x<0 || x>79) return 1; if (y<0 || y>24) return 1; return 0; }
/* return a token from the input stream */ get_token() { char *p; p=token; /* skip spaces */ while(*p_pos==' ') p_pos++l; if(*p_pos=='¡¬n') { *p++='¡¬n'; *p='¡¬0'; p_pos++; return; } if(*p_pos=='¡¬0') { /* is end of program */ *p++='¡¬0'; return; } /* read word until a space or newline */ while (*p_pos!=' ' && *p_pos!='¡¬n') { *p=*p_pos++; p++; } *p='¡¬0'; }
/* read the positions for the objects */ position() { cls(); make_triangle(10, 4); make_square(30, 10); make_right_triangle(50, 11); }
/* draw an isosceles triangle at x, y */ make_triangle(x, y) int x, y; { int t; for (t=0; t<5 ; t++) { gotoxy(x-t, y+t); printf("*"); } for(t=0; t<5; t++) { gotoxy(x+t, y+t); printf("*"); } gotoxy(x-5, y+5); printf("*****************"); }
/* draw a right triangle at x, y */ make_right_triangle(x, y) int x, y; { int t; for (t=0; t<10 ; t++) { gotoxy(x, y+t); printf("*"); } for(t=0; t<9; t++) { gotoxy(x-t+9, y+t); printf("*"); } gotoxy(x, y); printf("*****************"); }
/* draw a square at x, y */ make_square(x, y) int x, y; { int t; for (t=0; t<5; t++) { gotoxy(x, y+t); printf("*"); } for (t=0; t<5; t++) { gotoxy(x+10, y+t); printf("*"); } gotoxy(x, y); printf("****************") gotoxy(x, y+5); printf("****************"); }
/* The delta_D recognizer */
/* search for a triangle and a square */ recognize(x1, y1, obj) int *x1, *y1; char obj; { int x, y, t; t=0; x=cur_x; y=cur_y; if (obj=TRIANGLE) while (find_point(x, y, &x, &y)) { if (istriangle(x, y)) { gotoxy(t*40, 0); t++; *x1=x; *y1=y; return 1; } x++; } else { clear_db(); while (find_point(x, y, &x, &y)) { if (issquare(x, y)) { gotoxy(0, 1); *x1=x; *y1=y; return 1; } x++; } } return 0; }
/* check for an issoceles triangle by key points */ istriangle(x, y) int x, y; { if (follow(x, y)==2) return 1; return 0; }
/* check for a right triangle by key points */ isright(x, y) int x, y; { if (check_point(x+10, y) && check_point(x, y+9)) return 1; return 0; }
/* check for a square by key points */ issquare(x, y) int x, y; { if (follow(x, y)==3) return 1; return 0; }
/* follow a shape and return number of turns */ follow(x, y) int x, y; { int incx, incy, startx, starty, count; startx=x; starty=y; count=0; assert_oldp(x, y); if (!find_direction(x, y, &incx, &incy)) return 0; do { while (check_point(x+incx, y+incy)) { x=incx+x; y=incy+y; assert_oldp(x, y); } if (x==startx && y=starty) return count; count++; if (!find_direction(x, y, &incx, &incy)) return 0; } while(1); }
/* find a new line to follow */ find_direction(x, y, incx, incy) int x, y, *incx, *incy; { register int a, b; for (a=-1; a<2; a++) for (b=-1; b<2; b++) if (check_point(x+a, y+b) && !find(x+a, y+b)) { *incx=a; *incy=b; return 1; } return 0; }
assert_oldp(x, y) int x, y; { if (pos==MAX) { printf("point database full ¡¬n"); return; } if (find(x, y)) return; /* already in db */ oldp[pos].x=x; oldp[pos].y=y; pos++; }
find(x, y) int x, y; { register int t; for (t=0; t<pos; t++) { if (oldp[t].x==x && oldp[t].y==y) return 1; } return 0; }
/* returns the cursor loc of an '*' with the search beginning with startx and starty */ find_point(startx, starty, x, y) int startx, starty, *x, *y; { int a, b; a=startx; b=starty; do { do { if (check_point(a, b) { *x=a; *y=b; returns 1; } a++; } while (a<79); a=0; b++; } while (b<24); return 0; }
/* checks to see if the point is an '*' */ check_point(a, b) int a, b; { union REGS regs; gotoxy(a, b); regs.h.ah=8; regs.h.bh=0; int86(16, ®s, ®s); if (regs.h.al=='*') return 1; return 0; }
/* put cursor at x, y */ gotoxy(x, y) int x, y; { union REGS regs; regs.h.ah=2; regs.h.dh=y; regs.h.dl=x; regs.h.bh=0; int86(16, ®s, ®s); }
/* clear the screen */ cls() { union REGS resg; regs.h.ah=6; regs.h.al=0; regs.h.ch=0; regs.h.cl=0; regs.h.dh=24; regs.h.dl=79; regs.h.bh=7; int68(16, ®s, ®s); }
clear_db() { register int t; for (t=0; t<MAX; t++) oldp[t].x=oldp[t].y=0; }
/* report syntax errors */ serror(s) char *s; { gotoxy(0, 24); printf(" "); gotoxy(0, 24); printf(s); } |
ÄÄÇ»ÅͰ¡ ÀνºÆ®·°¼ÇÀ» ¼öÇàÇÏ´Â ¹æ¹ýÀ» Á¶»çÇÏ´Â °ÍÀº ³Ê¹« ±æ¾î¼ ÀÌ Àå¿¡ ¼ö¿ëÇÏÁö ¸øÇÑ´Ù. ±×·¯¸¶, moveto ÀνºÆ®·°¼ÇÀº ¸Å¿ì Áß¿äÇϱ⠶§¹®¿¡ ±× ¿ªÇÒÀ» ¼³¸íÇÑ´Ù.
½Ã¹Ä·¹ÀÌÅͰ¡ moveto ¸í·ÉÀ» ¸¸³¯ ¶§, ÃʱâÈ ÇÔ¼ö moveto_setup() ÀÌ È£ÃâµÇ´Âµ¥, À̰ÍÀº ÁÂÇ¥¸¦ ÀÐ°í ±× ÁÂÇ¥°¡ ½ºÅ©¸°ÀÇ ¹üÀ§ ¾È¿¡ ÀÖÀ½À» Áõ¸íÇÑ´Ù. ´ÙÀ½, moveto() °¡ È£ÃâµÈ´Ù. moveto() ´Â ·Îº¿ÀÌ Àû´çÇÑ À§Ä¡¿¡ µµÂøÇÒ ¶§±îÁö ¹Ýº¹ÇÏ´Â ÇϳªÀÇ ¹Ù±ù while ·çÇÁ¿Í µÎ °³ÀÇ ³»ºÎ while ·çÇÁ·Î ±¸¼ºµÈ´Ù. ¸ÕÀú, ·Îº¿Àº Àû´çÇÑ Y ÁÂÇ¥·Î À̵¿µÇ°í ±×¸®°í ³ª¼ Àû´çÇÑ X ÁÂÇ¥·Î À̵¿µÈ´Ù. ¹°Ã¼°¡ ·Îº¿ÀÇ Áø·Î¸¦ ¹æÇØÇÏÁö ¾ÊÀ¸¸é, ÀÌ °úÁ¤Àº ´Ü¼øÇÏ´Ù. ±×·¯³ª ·Îº¿ÀÌ ¹°Ã¼¸¦ µ¹¾Æ°¡¾ß ÇÑ´Ù¸é, ÇÁ·Î±×·¥Àº find_path_down(), find_path_right() ¶Ç´Â µÑ ´Ù¸¦ È£ÃâÇÑ´Ù. ÀÌ ·çƾµéÀº ·Îº¿À¸·Î ÇÏ¿©±Ý find_path_down() À» »ç¿ëÇÏ¿© ¿·¸éÀÇ ¾Æ·¡³ª À§·Î °¨À¸·Î½á ¹°Ã¼ ÁÖÀ§¸¦ À̵¿ÇÏ°Ô Çϰųª, find_path_right() ¸¦ »ç¿ëÇÏ¿© À§³ª ¾Æ·¡¸¦ µû¶ó ¿ÞÂÊÀ̳ª ¿À¸¥ÂÊÀ¸·Î À̵¿ÇÔÀ¸·Î½á ¹°Ã¼ ÁÖÀ§·Î À̵¿ÇÏ°Ô ÇÑ´Ù. µ¿ÀÛÀ» ÀÌÇØÇÑ´Ù´Â °ÍÀ» È®ÀÎÇϱâ À§ÇÏ¿© ÀÌ Äڵ带 °øºÎÇØ¾ß ÇÑ´Ù.
½Ã¹Ä·¹ÀÌÅÍ ÇÁ·Î±×·¥À» »ç¿ëÇÒ ¶§, ¸ÕÀú ´ÙÀ½ ¸Þ´º°¡ ³ª¿Â´Ù :
choose : (E)dit, (R)un, (T)each, (Q)uit : |
ÇÁ·Î±×·¥À» ÀÔ·ÂÇϱâ À§ÇÏ¿©, E ¸¦ ´©¸£°í ÀνºÆ®·°¼ÇÀ» ÀÔ·ÂÇØº¸ÀÚ. ³¡¸¶ÃÆÀ» ¶§, ºó ÁÙÀ» ³Ö´Â´Ù. ¿¹¸¦µé¾î, ´ÙÀ½ ÇÁ·Î±×·¥À» ÀÔ·ÂÇØº¸ÀÚ.
moveto 70 12 moveto 0 0 finds |
±×¸² 4. ù ¹øÂ° ÇÁ·Î±×·¥¿¡ ´ëÇÑ ·Îº¿ÀÇ °æ·Î
±×¸®°í ³ª¼ ºó ÁÙÀ» ÀÔ·ÂÇØ¾ß ÇÑ´Ù. ´ÙÀ½, ¸Þ´º¿¡¼ ¼öÇà ¿É¼ÇÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. ȯ°æ ½ºÅ©¸° (environment screen) ÀÌ ³ªÅ¸³¯ °ÍÀ̸ç, ·Îº¿ÀÌ Áö½ÃµÈ´ë·Î ¿òÁ÷ÀÌ´Â °ÍÀ» º¸°Ô µÉ °ÍÀÌ´Ù. ±×¸² 4 ´Â ½ºÅ©¸°°ú ·Îº¿ÀÇ °æ·Î¸¦ º¸¿©ÁØ´Ù.
ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§, ·Îº¿Àº ±× ±æ¿¡ ³õ¿©ÀÖ´Â ¹°Ã¼ÀÇ µÑ·¹¸¦ Á¤È®È÷ °£´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. À̰ÍÀÌ ¾î¶»°Ô ÀÌ·ç¾î Áö´ÂÁö ¾Ë±â À§ÇÏ¿© moveto ÇÔ¼ö¸¦ °øºÎÇØ¾ß ÇÑ´Ù. move() ÇÔ¼ö¸¦ À§ ¾ê±â¿¡¼ ¾ð±ÞÇÑ °Íó·³ ¾à°£ º¯Çü½ÃŲ´Ù¸é ·Îº¿Àº ¿©ÇàÀÇ ÈçÀûÀ» ³²±æ °ÍÀÌ´Ù.
¶Ç´Ù¸¥ ¿¹°¡ ÀÖ´Ù : ´ÙÀ½ ÇÁ·Î±×·¥À» ·Îº¿À¸·Î ÇÏ¿©±Ý »ç°¢ÇüÀÇ º¯À» µû¶ó°¡°Ô ÇÒ °ÍÀÌ´Ù.
finds 10 move down ifsense right then goto 10 |
±×¸² 5. »ç°¢Çü ¸éÀ» µû¶ó°¡´Â ·Îº¿ÀÇ °æ·Î
·Îº¿ÀÇ ¿À¸¥ÂÊ¿¡ ¹°Ã¼°¡ ÀÖ´Â ÇÑ, ¾Æ·¡·Î °è¼Ó À̵¿ÇÑ´Ù. ±×¸² 5 ´Â ·Îº¿ÀÌ °¡´Â °æ·Î¸¦ º¸¿©ÁØ´Ù. ÇØ¾ß ÇÒ ´ÙÀ½ ´Ü°è´Â teach ¸í·ÉÀ» »ç¿ëÇÏ¿© ·Îº¿À» °¡¸£Ä¡´Â ÀÏÀÌ´Ù. ·Îº¿¿¡°Ô °¡¸£ÃÄÁØ À̵¿À» ÀÌ¿ëÇϱâ À§Çؼ ·Îº¿ Á¦¾î¾ð¾î¿¡ Àû´çÇÑ movep ÀνºÆ®·°¼ÇÀ» ³Ö¾î¾ß ÇÑ´Ù.
ÀÌ Ã¥¿¡¼ ±ä ¸®½ºÆÃÀº ÇÇÇß´Ù. ½Ã¹Ä·¹ÀÌÅͰ¡ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â ¸î¸î ¸í·ÉÀ» °¡Áö°í¼µµ ÇöÀç »óÅ¿¡¼´Â ±× ±æÀ̰¡ ³Ê¹« ±æ´Ù. ÀÌ ¶§¹®¿¡, ½Ã¹Ä·¹ÀÌÅÍ´Â ´õ ¸¹Àº ±â´ÉÀ» Æ÷ÇÔÇÏÁö ¾Ê¾Ò´Ù. ±×·¯³ª, ¿©±â¿¡ ÁÖ¾îÁø ´Ù¸¥ ¸í·ÉÀÇ Çü½Ä¿¡ µû¶ó¼ ·Îº¿ÀÇ Á¦¾î ¸í·É ¾ð¾î¸¦ ´õ Ãß°¡½ÃŰ´Â °ÍÀº ½±´Ù.
ÇÑ °¡Áö ƯÈ÷ Àç¹ÌÀÖ´Â º¯È´Â ÇÑ ±ÛÀÚ·Î µÈ ¹°Ã¼ÀÇ ´Ù¸¥ À¯ÇüÀ» ȯ°æ¿¡ Ãß°¡½ÃŰ°í ·Îº¿À¸·Î ÇÏ¿©±Ý ±×°ÍµéÀ» »Ì¾Æ³»°Ô ÇÏ´Â °ÍÀÌ´Ù. ¶Ç ´Ù¸¥ °¨Áö¿ë ¹®Àå»Ó¸¸ ¾Æ´Ï¶ó, ¼ÕÀâÀÌ (grip) ¸¦ ´Ý°í ¿©´Â ¸í·ÉÀ» ÷°¡ÇÒ Çʿ䰡 ÀÖ´Ù. ¶ÇÇÑ "¿¡³ÊÁö Æä¸®Æ® (energy pellets)" ¸¦ ¿©±âÀú±â »Ñ¸®°í ·Îº¿À¸·Î ÇÏ¿©±Ý ãÀ» °ÍÀ» ¿øÇÒ·±Áöµµ ¸ð¸¥´Ù. ´ÙÀ½ ÇüÅÂÀÇ ¹è¿±¸Á¶¸¦ ¸¸µé¾î ½Ã¹Ä·¹ÀÌÅÍ¿¡ º¯¼ö¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
struct variable { char name[10]; int value; } var[MAX]; |
ÀÌ ¹è¿Àº °£´ÜÇÑ IF ¹®ÀÚ ·çÇÁ Ä«¿îÅ͵éÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ±×·¯³ª, ÇÁ·Î±×·¥À¸·Î ÇÏ¿©±Ý º¹ÀâÇÑ ¼ö½Ä (numeric expression) À» Ç® ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀº º¹ÀâÇÑ »ê¼ú½Ä (expression) ÆÄ¼¸¦ »ç¿ëÇÒ °ÍÀ» ¿ä±¸ÇÑ´Ù.
¿¡µðÅÍ´Â ±ØÈ÷ Á¦ÇѵǾî ÀÖÀ½À» ±â¾ïÇÏÀÚ. ¾Æ¸¶µµ ¿¡µðÆÃ, º¯Çü, Ãß°¡¸¦ ¼ö¿ëÇϱâ À§ÇÏ¿© ¿¡µðÅ͸¦ È®ÀåÇÏ°í ½ÍÀ» °ÍÀÌ´Ù. ±×·¯³ª, ÇÁ·Î±×·¥À» ¸¸µé±â À§ÇÏ¿© ÀÚ½ÅÀÌ °¡Àå ÁÁ¾ÆÇÏ´Â ÅØ½ºÆ® ¿¡µðÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï, ¿¡µðÅ͸¦ Á¦°ÅÇÏ°í ´Ü¼øÈ÷ ÆÄÀÏ·Îµå ·çÆ¾À» ÷°¡ÇÒ ¼öµµ ÀÖ´Ù. ¹«¾ùÀ» º¯°æÇϱâ·Î °áÁ¤Ç졂 °£¿¡,ÀÌ Àå¿¡¼ °³¹ßµÈ ·Îº¿ ½Ã¹Ä·¹ÀÌÅÍ´Â ·Îº¸Æ½½º ½ÇÇè¿¡ Àç¹ÌÀÖ°í Èï¹ÌÀÖ´Â Ãâ¹ßÁ¡À» Á¦°øÇÑ´Ù.