dmitržсновы робототехники на базе... · title: dmitr author: novikova...

10
34 ' ˚˛ÌˇÜÞÒ¯—˝Û¯ ¨˝ÑÒ—Ó̯˝ÒÛ ´ Ø˚˛¸¯. „ 5, 2010 ª. ÑåðªåØ ÀºåŒæàíäðîâL÷ ÔLºLïïîâ ˛Ñ˝˛´Û —˛`˛Ò˛Ò¯Õ˝¨˚¨ ˝À `À˙¯ ˚˛˝ÑÒ—Ó˚Ò˛—À LEGO MINDSTORMS NXT. ˙À˝ßÒ¨¯ 5. ˜´¨˘¯˝¨¯ ˇ˛ ¸¨˝¨¨ ˛äíà Lç ŒºàææL÷åæŒLı çàäà÷ äºÿ ìî- ÆLºüíîªî ðîÆîòà ýòî äâLæåíLå ïî ÷åð- íîØ ºLíLL íà Æåºîì ïîºå æ LæïîºüçîâàíL- åì äàò÷LŒîâ îæâåøåííîæòL. Ñóøåæòâóåò ìíîæåæòâî ສîðLòìîâ, ðàææ÷Lòàííßı íà ðàçºL÷íîå ÷Læºî äàò÷LŒîâ: îò 1 äî 10 L Æîºåå. Ñåªîäíÿ ìß ïîçíàŒîìLìæÿ æ ïðî- æòåØlLìL Lç íLı. ˇðL ýòîì ïðLäåòæÿ çàò- ðîíóòü ýºåìåíòß òåîðLL àâòîìàòL÷åæŒîªî óïðàâºåíLÿ, Œîòîðàÿ ºåæLò â îæíîâå ïðî- ªðàììLðîâàíLÿ ïîâåäåíLÿ ìíîªLı ðîÆî- òîâ L àâòîìàòLçLðîâàííßı æLæòåì. —˛`˛Ò Ñ ˛˜˝¨Ì ˜ÀÒר˚˛Ì ´ ïåðâîì îïßòå Læïîºüçóåì ðîÆîò, æîçäàííßØ äºÿ çàäàíLÿ «Òàíåö â Œðóªå», L òî æå ïîºå ÷åðíóþ îŒðóæíîæòü íà Æå- ºîì ôîíå. ¯äLíæòâåííàÿ ïîïðàâŒà: äàò÷LŒ îæâåøåííîæòL æºåäóåò âßäâLíóòü íåìíî- ªî âïåðåä, ÷òîÆß îí îÆðàçîâßâຠâìåæòå æ âåäóøLìL ŒîºåæàìL ðàâíîæòîðîííLØ LºL ıîòÿ Æß ðàâíîÆåäðåííßØ ïðÿìîóªîºüíßØ òðåóªîºüíLŒ (ðLæ. 1). ˚îíæòðóŒöLþ ìîæíî ïîæòðîLòü ìíî- æåæòâîì æïîæîÆîâ. —àææìîòðLì îäLí Lç íLı. ˚ðåïºåíLå äàò÷LŒà îæâåøåííîæòL Œ òðåıŒîºåæíîØ òåºåæŒå (ðLæ. 2). ˚îðîòŒàÿ äâóıìîäóºüíàÿ îæü ìîæåò Æßòü Œðàæíîªî LºL ÷åðíîªî öâåòà (ðLæ. 3). ´ßæîòà äàò÷L- Œà íàä ïîâåðıíîæòüþ ïîºÿ îò 5 äî 10 ìì (ðLæ. 4). —¯¸¯É˝ÛÉ —¯ˆÓ¸ßÒ˛— ˙àäà÷à òàŒîâà: äâLªàòüæÿ ïî ïºîæŒîìó ïîºþ âäîºü ªðàíLöß ÷åðíîªî L Æåºîªî (ðLæ. 5). —ålàåòæÿ ýºåìåíòàðíî ïðLìåíå- íLåì ðåºåØíîªî äâóıïîçLöLîííîªî ðåªó- ºÿòîðà 1 . ´ òàŒîì ðåªóºÿòîðå ðàææìàòðL- —Læ. 1. —àæïîºîæåíLå äàò÷LŒà îæâåøåííîæòL 1 ´ íàlåì æºó÷àå ïîä ðåªóºÿòîðîì ïîíLìàåòæÿ óæòðîØæòâî, Œîòîðîå îïðåäåºÿåò îòŒºîíåíLå îÆœåŒòà îò çàäàí- íîªî æîæòîÿíLÿ L âßðàÆàòßâàåò óïðàâºÿþøåå âîçäåØæòâLå íà ìîòîðß. ˙àäà÷à òàŒîâà: äâLªàòüæÿ ïî ïºîæŒîìó ïîºþ âäîºü ªðàíLöß ÷åðíîªî L Æåºîªî...

Upload: others

Post on 23-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

34

Ôèëèïïîâ Ñ.À.

© ÊÎÌÏÜÞÒÅÐÍÛÅ ÈÍÑÒÐÓÌÅÍÒÛ Â ØÊÎËÅ. ¹ 5, 2010 ã.

Ñåðãåé Àëåêñàíäðîâè÷ Ôèëèïïîâ

ÎÑÍÎÂÛ ÐÎÁÎÒÎÒÅÕÍÈÊÈ ÍÀ ÁÀÇÅ

ÊÎÍÑÒÐÓÊÒÎÐÀ LEGO MINDSTORMS NXT.

ÇÀÍßÒÈÅ 5. ÄÂÈÆÅÍÈÅ ÏÎ ËÈÍÈÈ

Îäíà èç êëàññè÷åñêèõ çàäà÷ äëÿ ìî-áèëüíîãî ðîáîòà � ýòî äâèæåíèå ïî ÷åð-íîé ëèíèè íà áåëîì ïîëå ñ èñïîëüçîâàíè-åì äàò÷èêîâ îñâåùåííîñòè. Ñóùåñòâóåòìíîæåñòâî àëãîðèòìîâ, ðàññ÷èòàííûõ íàðàçëè÷íîå ÷èñëî äàò÷èêîâ: îò 1 äî 10 èáîëåå. Ñåãîäíÿ ìû ïîçíàêîìèìñÿ ñ ïðî-ñòåéøèìè èç íèõ. Ïðè ýòîì ïðèäåòñÿ çàò-ðîíóòü ýëåìåíòû òåîðèè àâòîìàòè÷åñêîãîóïðàâëåíèÿ, êîòîðàÿ ëåæèò â îñíîâå ïðî-ãðàììèðîâàíèÿ ïîâåäåíèÿ ìíîãèõ ðîáî-òîâ è àâòîìàòèçèðîâàííûõ ñèñòåì.

ÐÎÁÎÒ Ñ ÎÄÍÈÌ ÄÀÒ×ÈÊÎÌ

 ïåðâîì îïûòå èñïîëüçóåì ðîáîò,ñîçäàííûé äëÿ çàäàíèÿ «Òàíåö â êðóãå»,è òî æå ïîëå � ÷åðíóþ îêðóæíîñòü íà áå-ëîì ôîíå. Åäèíñòâåííàÿ ïîïðàâêà: äàò÷èê

îñâåùåííîñòè ñëåäóåò âûäâèíóòü íåìíî-ãî âïåðåä, ÷òîáû îí îáðàçîâûâàë âìåñòåñ âåäóùèìè êîëåñàìè ðàâíîñòîðîííèé èëèõîòÿ áû ðàâíîáåäðåííûé ïðÿìîóãîëüíûéòðåóãîëüíèê (ðèñ. 1).

Êîíñòðóêöèþ ìîæíî ïîñòðîèòü ìíî-æåñòâîì ñïîñîáîâ. Ðàññìîòðèì îäèí èçíèõ. Êðåïëåíèå äàò÷èêà îñâåùåííîñòè êòðåõêîëåñíîé òåëåæêå (ðèñ. 2). Êîðîòêàÿäâóõìîäóëüíàÿ îñü ìîæåò áûòü êðàñíîãîèëè ÷åðíîãî öâåòà (ðèñ. 3). Âûñîòà äàò÷è-êà íàä ïîâåðõíîñòüþ ïîëÿ � îò 5 äî 10 ìì(ðèñ. 4).

ÐÅËÅÉÍÛÉ ÐÅÃÓËßÒÎÐ

Çàäà÷à òàêîâà: äâèãàòüñÿ ïî ïëîñêîìóïîëþ âäîëü ãðàíèöû ÷åðíîãî è áåëîãî(ðèñ. 5). Ðåøàåòñÿ ýëåìåíòàðíî ïðèìåíå-íèåì ðåëåéíîãî äâóõïîçèöèîííîãî ðåãó-ëÿòîðà1 .  òàêîì ðåãóëÿòîðå ðàññìàòðè-

Ðèñ. 1. Ðàñïîëîæåíèå äàò÷èêà îñâåùåííîñòè

1  íàøåì ñëó÷àå ïîä ðåãóëÿòîðîì ïîíèìàåòñÿ óñòðîéñòâî, êîòîðîå îïðåäåëÿåò îòêëîíåíèå îáúåêòà îò çàäàí-íîãî ñîñòîÿíèÿ è âûðàáàòûâàåò óïðàâëÿþùåå âîçäåéñòâèå íà ìîòîðû.

Çàäà÷à òàêîâà:äâèãàòüñÿ ïî ïëîñêîìó ïîëþ

âäîëü ãðàíèöû ÷åðíîãî è áåëîãî...

Page 2: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

35

Îñíîâû ðîáîòîòåõíèêè íà áàçå êîíñòðóêòîðà Lego Mindstorms NXT.Çàíÿòèå 5. Äâèæåíèå ïî ëèíèè

ÇÀÎ×ÍÀß ØÊÎËÀ ÑÎÂÐÅÌÅÍÍÎÃÎ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß

Ðèñ. 2. Êðåïëåíèå äàò÷èêà îñâåùåííîñòèê òðåõêîëåñíîé òåëåæêå

âàþòñÿ òîëüêî äâà ñîñòîÿíèÿ äàò÷èêà è,ñîîòâåòñòâåííî, äâà âèäà óïðàâëÿþùåãîâîçäåéñòâèÿ íà ìîòîðû. Ïîêà äàò÷èê íàáåëîì, ðîáîò äâèãàåòñÿ â ñòîðîíó ÷åðíî-ãî, ïîêà äàò÷èê íà ÷åðíîì, ðîáîò äâèãà-åòñÿ â ñòîðîíó áåëîãî. Áëàãîäàðÿ òîìó,÷òî ïîâîðîò îñóùåñòâëÿåòñÿ ïî äóãå ñ íå-áîëüøèì ðàäèóñîì, â èòîãå ïðîèñõîäèòïîñòóïàòåëüíîå äâèæåíèå âïåðåä.

Àëãîðèòì áóäåò çàïèñàí ñ èñïîëüçîâà-íèåì áëîêîâ «Æäè òåìíåå» è «Æäè ñâåò-ëåå». Âîò ïðîñòåéøåå ðåøåíèå äëÿ íà÷è-íàþùèõ (ðèñ. 6).

 ÿçûêå RobotC íåò òî÷íîãî ñîîòâåò-ñòâèÿ ýòèì äâóì êîìàíäàì Robolab. Íå

óñëîæíÿÿ ïðîãðàììó, ìîæíî çàïèñàòü ïðè-ìåðíî ñëåäóþùèì îáðàçîì.

task main(){int white=SensorValue[S1];while (true){ motor[motorB] = 100; motor[motorC] = 0; while(SensorValue[S1]>white-5); motor[motorB] = 0; motor[motorC] = 100; while(SensorValue[S1]<white-5);}}

Áåç äîïîëíèòåëüíûõ óòî÷íåíèé ïðåä-ïîëàãàåòñÿ, ÷òî äàò÷èê îñâåùåííîñòè ïîä-

Ðèñ. 3. Êîðîòêàÿ äâóõìîäóëüíàÿ îñüìîæåò áûòü êðàñíîãî èëè ÷åðíîãî öâåòà

Ðèñ. 4. Âûñîòà äàò÷èêà íàä ïîâåðõíîñòüþ ïîëÿ �îò 5 äî 10 ìì

Ðèñ. 5. Äâèæåíèå âäîëü ãðàíèöû÷åðíîãî è áåëîãî

Ðèñ. 6. Àëãîðèòì äâèæåíèÿ ïî ëèíèè ñ îäíèì äàò÷èêîì îñâåùåííîñòè

Page 3: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

36

Ôèëèïïîâ Ñ.À.

© ÊÎÌÏÜÞÒÅÐÍÛÅ ÈÍÑÒÐÓÌÅÍÒÛ Â ØÊÎËÅ. ¹ 5, 2010 ã.

Ðèñ. 7. Àëãîðèòì äâèæåíèÿ ïî ëèíèè ñ îäíèì äàò÷èêîì îñâåùåííîñòè:ïîíèæåíà ñêîðîñòü, óâåëè÷åíà ðàçíîñòü ìåæäó ÷åðíûì è áåëûì

Ðèñ. 8. Àëãîðèòì äâèæåíèÿ ïî ëèíèè ñ àáñîëþòíûì çíà÷åíèåì ñåðîãî íà äàò÷èêå îñâåùåííîñòè

êëþ÷åí ê ïåðâîìó ïîðòó, à íà ìîòîðû ïî-äàåòñÿ ìàêñèìàëüíàÿ ìîùíîñòü (ðèñ. 6).Ïåðåä ñòàðòîì ñòàâèì ðîáîò íà ëèíèþ òàê,÷òîáû äàò÷èê áûë íàä áåëûì ïîëåì íà ðàñ-ñòîÿíèè 2�3 ñì ñëåâà îò ÷åðíîãî. Ïî àë-ãîðèòìó ðîáîò ïëàâíî ïîâîðà÷èâàåò íà-ïðàâî, ïîêà îñâåùåííîñòü íå ïîíèçèòñÿíà 5 ïóíêòîâ (ïî óìîë÷àíèþ). Çàòåì ïî-âîðà÷èâàåò íàëåâî, ïîêà îñâåùåííîñòü íåïîâûñèòñÿ íà 5 ïóíêòîâ. Äâèæåíèå ïîëó-÷àåòñÿ ïîõîæèì íà «çìåéêó» (ðèñ. 5).

ÂÎÇÌÎÆÍÛÅ ÏÐÎÁËÅÌÛ.

1. Ðîáîò êðóòèòñÿ íà ìåñòå, íå çàåç-æàÿ íà ëèíèþ.  ýòîì ñëó÷àå ñëåäóåò ëèáîñòàðòîâàòü ñ äðóãîé ñòîðîíû ëèíèè, ëèáîïîìåíÿòü ïîäêëþ÷åíèÿ ìîòîðîâ ê êîíòðîë-ëåðó ìåñòàìè.

2. Ðîáîò ïðîñêàêèâàåò ëèíèþ, íå óñ-ïåâàÿ ñðåàãèðîâàòü. Ñëåäóåò ïîíèçèòüìîùíîñòü ìîòîðîâ.

3. Ðîáîò ðåàãèðóåò íà ìåëêèå ïîìåõèíà áåëîì, íå äîåçæàÿ äî ÷åðíîãî. Íàäî óâå-ëè÷èòü ïîðîã ÷óâñòâèòåëüíîñòè äàò÷èêà (íà-ïðèìåð, íå íà 5, à íà 8 ïóíêòîâ). Âîîáùåãîâîðÿ, ýòî ÷èñëî ìîæíî ðàññ÷èòàòü: ñíÿòüïîêàçàíèÿ äàò÷èêà íà áåëîì, çàòåì íà ÷åð-íîì, âû÷åñòü îäíî èç äðóãîãî è ïîäåëèòüïîïîëàì. Íàïðèìåð, (53 � 37)/2 = 8. Íàêîíòðîëëåðå «NXT» ñíÿòèå ïîêàçàíèéïðîèçâîäèòñÿ ÷åðåç ïóíêò View ãëàâíîãîìåíþ.

Òàê âûãëÿäèò óñîâåðøåíñòâîâàííàÿïðîãðàììà (ðèñ. 7):

task main(){int white=SensorValue[S1];while (true){ motor[motorB] = 50; motor[motorC] = 0; while(SensorValue[S1]>white-8); motor[motorB] = 0; motor[motorC] = 50; while(SensorValue[S1]<white-8);}}

Îñîáåííîñòü ïðèâåäåííûõ àëãîðèòìîââ òîì, ÷òî âî âñåõ ñëó÷àÿõ ðîáîòó òðåáó-åòñÿ ñòàðòîâàòü íà áåëîì ïîëå è èñïîëü-

Ðîáîò ðåàãèðóåò íà ìåëêèå ïîìåõèíà áåëîì, íå äîåçæàÿ äî ÷åðíîãî.

Page 4: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

37

Îñíîâû ðîáîòîòåõíèêè íà áàçå êîíñòðóêòîðà Lego Mindstorms NXT.Çàíÿòèå 5. Äâèæåíèå ïî ëèíèè

ÇÀÎ×ÍÀß ØÊÎËÀ ÑÎÂÐÅÌÅÍÍÎÃÎ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß

Ðèñ. 10. Àëãîðèòì äâèæåíèÿ âäîëü ãðàíèöû ÷åðíîãî è áåëîãîíà ðåëåéíîì ðåãóëÿòîðå ñ èñïîëüçîâàíèåì âåòâëåíèÿ

çóåòñÿ îòíîñèòåëüíîå ïîíèæåíèå îñâåùåí-íîñòè. Îäíàêî åñòü âîçìîæíîñòü çàðàíååîïðåäåëèòü óðîâåíü îñâåùåííîñòè íà äàí-íîì ïîëå è èñïîëüçîâàòü åãî àáñîëþòíîåçíà÷åíèå. Âîñïîëüçîâàâøèñü ïîêàçàíèÿìèäàò÷èêà íà áåëîì è ÷åðíîì, ïîëó÷åííûìè÷åðåç ìåíþ View, ðàññ÷èòàåì èõ ñðåäíååàðèôìåòè÷åñêîå (53 + 37)/2 = 45, êîòîðîåóñëîâíî íàçîâåì «çíà÷åíèåì ñåðîãî». Ïå-ðåñåêàÿ äàò÷èêîì çíà÷åíèå 45, ðîáîò áó-äåò ìåíÿòü íàïðàâëåíèå äâèæåíèÿ. Î÷åâèä-íî, ÷òî ïî ëåâóþ ñòîðîíó îò «ñåðîãî» âñåïîêàçàíèÿ äàò÷èêà áóäóò «áåëûìè», à ïîïðàâóþ «÷åðíûìè».  àëãîðèòìå çàìåíèìáëîêè îæèäàíèÿ ïîêàçàíèé äàò÷èêîâ íà«Æäè ÷åðíîãî» è «Æäè áåëîãî» (ðèñ. 8).

task main(){while (true){ motor[motorB] = 50; motor[motorC] = 0; while(SensorValue[S1]>45); motor[motorB] = 0; motor[motorC] = 50; while(SensorValue[S1]<45);}}

Áîëåå óñòîé÷èâî àëãîðèòì ðàáîòàåò,åñëè â Robolab èñïîëüçîâàòü ìîòîðû ñóïðàâëåíèåì ìîùíîñòüþ îò �100 äî 100.

 ýòîì ñëó÷àå åñòü âîçìîæíîñòü îòðåãóëè-ðîâàòü ïëàâíîñòü ïîâîðîòà â ñîîòâåòñòâèèñ êðèâèçíîé ëèíèè (ðèñ. 9).

task main(){while (true){ motor[motorB] = 80; motor[motorC] = 20; while(SensorValue[S1]>45); motor[motorB] = 20; motor[motorC] = 80; while(SensorValue[S1]<45);}}

 ýòîì àëãîðèòìå ïðèòîðìàæèâàþùèåìîòîðû íà ïîâîðîòå íå îñòàíàâëèâàþòñÿïîëíîñòüþ, à ëèøü ïîíèæàþò ìîùíîñòüäî 20 ïóíêòîâ. Ýòî äåëàåò ïîâîðîò áîëååïëàâíûì, íî ìîæåò ïðèâåñòè è ê ïîòåðåëèíèè íà ðåçêîì ïîâîðîòå. Ïîýòîìó ÷èñ-ëà 80 è 20 ïîñòàâëåíû óñëîâíî, èõ ñòîèòïîäîáðàòü ñàìîñòîÿòåëüíî.

Ñëåäóþùèé ïðèìåð äâèæåíèÿ âäîëüãðàíèöû ÷åðíîãî è áåëîãî ñ èñïîëüçî-âàíèåì âåòâëåíèÿ (ðèñ. 10).  êà÷åñòâåçíà÷åíèÿ ïåðåõîäà ãðàíèöû ÷åðíîãî èáåëîãî âçÿòî òî æå ÷èñëî 45, êîòîðîåáûëî ðàññ÷èòàíî äëÿ ïðåäûäóùèõ àëãî-ðèòìîâ.

Ðèñ. 9. Àëãîðèòì äâèæåíèÿ ïî ëèíèè ñ îäíèì äàò÷èêîì îñâåùåííîñòè:óëó÷øåíî óïðàâëåíèå ìîòîðàìè

Page 5: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

38

Ôèëèïïîâ Ñ.À.

© ÊÎÌÏÜÞÒÅÐÍÛÅ ÈÍÑÒÐÓÌÅÍÒÛ Â ØÊÎËÅ. ¹ 5, 2010 ã.

task main(){while (true){ if (SensorValue[S1]>45) { motor[motorB] = 100; motor[motorC] = 0; } else { motor[motorB] = 0; motor[motorC] = 100; } wait1Msec(1);}}

Çàäåðæêà â îäíó ìèëëèñåêóíäó ïðåä-íàçíà÷åíà äëÿ òîãî, ÷òîáû íåìíîãî ðàç-ãðóçèòü ìèêðîêîíòðîëëåð: íà íåáîëüøèõñêîðîñòÿõ çà ýòî âðåìÿ íè÷åãî ñóùåñòâåí-íîãî íå ïðîèñõîäèò.

 àëãîðèòìå èñïîëüçîâàí ìîäèôèöè-ðîâàííûé çåëåíûé ñâåòîôîð «beginNXT», êîòîðûé ïîçâîëÿåò ïåðåäàâàòü ïðî-ãðàììû íà êîíòðîëëåð íå òîëüêî ñ èìå-íåì rbl, íî è ñ ëþáûì äðóãèì äëèíîé äî6 ñèìâîëîâ. Ïèêòîãðàììà ýòîãî ñâåòîôî-ðà íàõîäèòñÿ â ïàëèòðå «NXT». Èñïîëü-çóÿ ðàçëè÷íûå èìåíà, ìîæíî õðàíèòü âïàìÿòè êîíòðîëëåðà ñðàçó íåñêîëüêî ïðî-ãðàìì. Èìÿ óêàçûâàåòñÿ â ïðÿìîóãîëüíîììîäèôèêàòîðå, ïðèñîåäèíÿåìîì ê ñâåòî-ôîðó (íà ðèñ. 10 èìÿ rele1).  ñðåäåRobotC ýòà ïðîáëåìà ðåøåíà èíà÷å: ïðî-ãðàììà çàãðóæàåòñÿ íà «NXT» ñ òåì èìå-íåì, c êîòîðûì ñîõðàíåíà íà êîìïüþòå-ðå.

Ï-ÐÅÃÓËßÒÎÐ

Ïðîïîðöèîíàëüíûé ðåãóëÿòîð � ýòîóñòðîéñòâî, îêàçûâàþùåå óïðàâëÿþùååâîçäåéñòâèå u(t) íà îáúåêò ïðîïîðöèîíàëü-íî åãî ëèíåéíîìó îòêëîíåíèþ e(t) îò çà-äàííîãî ñîñòîÿíèÿ x0(t);

e (t) = x0(t) � x(t),ãäå x (t) � ñîñòîÿíèå â äàííûé ìîìåíò âðå-ìåíè;

u (t) = ke(t),ãäå k � óñèëèâàþùèé êîýôôèöèåíò.

Òî åñòü, ÷åì äàëüøå ðîáîò îòêëîíÿåò-ñÿ îò çàäàííîãî êóðñà, òåì àêòèâíåå äîë-æíû ðàáîòàòü ìîòîðû, âûðàâíèâàÿ åãî.

Äâèæåíèå ïî ãðàíèöå ÷åðíîãî è áåëî-ãî òîæå ìîæíî ïîñòðîèòü íà Ï-ðåãóëÿòî-ðå. Õîòÿ âíåøíå çàäà÷à ïðåäñòàâëÿåòñÿ ðå-øàåìîé òîëüêî ñ ïîìîùüþ ðåëåéíîãî ðå-ãóëÿòîðà, ïîñêîëüêó â ñèñòåìå ïðèñóòñòâó-åò âñåãî äâà âèäèìûõ ÷åëîâå÷åñêîìó ãëàçóñîñòîÿíèÿ: ÷åðíîå è áåëîå. Íî ðîáîò âñåâèäèò èíà÷å, äëÿ íåãî îòñóòñòâóåò ðåçêàÿãðàíèöà ìåæäó ýòèìè öâåòàìè. Ìîæíî ñêà-çàòü, îí áëèçîðóê è âèäèò ãðàäèåíòíûé ïå-ðåõîä îòòåíêîâ ñåðîãî (ðèñ. 11). Âîò ýòîíàì è ïîìîæåò ïîñòðîèòü Ï-ðåãóëÿòîð.

Îïðåäåëÿÿ ñîñòîÿíèå ðîáîòà êàê ïî-êàçàíèÿ äàò÷èêà îñâåùåííîñòè, íàó÷èìñÿîêàçûâàòü ïðîïîðöèîíàëüíîå óïðàâëÿþ-ùåå âîçäåéñòâèå íà ìîòîðû ïî ñëåäóþ-ùåìó çàêîíó:

e = s1� grey,ãäå s1 � òåêóùèå ïîêàçàíèÿ äàò÷èêà, àgrey � çàäàííîå çíà÷åíèå,

Ðèñ. 11. Îòëè÷èå âîñïðèÿòèÿðîáîòà è ÷åëîâåêà

Ìîæíî ñêàçàòü, îí áëèçîðóê è âèäèòãðàäèåíòíûé ïåðåõîä îòòåíêîâ ñåðîãî...

Page 6: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

39

Îñíîâû ðîáîòîòåõíèêè íà áàçå êîíñòðóêòîðà Lego Mindstorms NXT.Çàíÿòèå 5. Äâèæåíèå ïî ëèíèè

ÇÀÎ×ÍÀß ØÊÎËÀ ÑÎÂÐÅÌÅÍÍÎÃÎ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß

Ðèñ. 12. Àëãîðèòì äâèæåíèÿ ïî ëèíèè ñ îäíèì äàò÷èêîì îñâåùåííîñòè íà Ï-ðåãóëÿòîðå

u = k*e,MotorB = N + u,MotorC = N � u,

ãäå N � áàçîâàÿ ìîùíîñòü äâèãàòåëåé.Òàê âûãëÿäèò àëãîðèòì ïðîïîðöèî-

íàëüíîãî ðåãóëÿòîðà äëÿ îäíîãî äàò÷èêàîñâåùåííîñòè (ðèñ. 12).

Âåëè÷èíà s1 � ýòî ïîêàçàíèÿ äàò÷èêàîñâåùåííîñòè ïîñëå åãî èíèöèàëèçàöèèíà ïåðâîì ïîðòó (ïî óìîë÷àíèþ).  êà÷å-ñòâå çàäàííîãî ñðåäíåãî çíà÷åíèÿ äàò÷è-êà îñâåùåííîñòè âçÿòî ÷èñëî 48. Íà ìî-òîðû ïîäàåòñÿ áàçîâàÿ ìîùíîñòü 50%, êî-òîðàÿ ñîõðàíÿåòñÿ ïðè íóëåâîì óïðàâëÿ-þùåì âîçäåéñòâèè u.  äàííîì ñëó÷àå îò-êëîíåíèå (s1 � 48) óìíîæàåòñÿ íà óñèëè-âàþùèé êîýôôèöèåíò 2, êîòîðûé íà âû-ñîêèõ ñêîðîñòÿõ ìîæåò áûòü è áîëüøå.

Òîò æå àëãîðèòì íà RobotC.

task main(){ int u; float k=2;while (true) { u=k*(SensorValue[S1]-48); motor[motorB]=50+u; motor[motorC]=50-u; wait1Msec(1);}}

Ïðè ñëèøêîì âûñîêîì óñèëèâàþùåìêîýôôèöèåíòå ïîâåäåíèå ðîáîòà íàïîìè-íàåò äâèæåíèå íà ðåëåéíîì ðåãóëÿòîðå:åãî ïîñòîÿííî çàíîñèò èç ñòîðîíû â ñòî-ðîíó. Ïðè íèçêîì êîýôôèöèåíòå ðîáîòìîæåò ïîòåðÿòü ëèíèþ. Äëÿ äîñòèæåíèÿíàèáîëüøåãî ýôôåêòà îò Ï-ðåãóëÿòîðà ñëå-äóåò íàéòè îïòèìàëüíîå ñîîòíîøåíèå êîí-ñòðóêöèè ðîáîòà, áàçîâîé ìîùíîñòè (êî-òîðàÿ ìîæåò äîñòèãàòü 100%) è óñèëèâàþ-ùåãî êîýôôèöèåíòà.

ÊÀËÈÁÐÎÂÊÀ ÄÀÒ×ÈÊÀ

Îáðàòèìñÿ ê ÷èñëó 48, èñïîëüçîâàí-íîìó â ôîðìóëå óïðàâëåíèÿ u. Ýòî ñðåä-íåå àðèôìåòè÷åñêîå ïîêàçàíèé äàò÷èêà îñ-âåùåííîñòè íà ÷åðíîì è íà áåëîì, íà-ïðèìåð (40 + 56)/2 = 48. Îäíàêî ïîêàçà-íèÿ äàò÷èêîâ ÷àñòî ìåíÿþòñÿ ïî ðàçíûìïðè÷èíàì: äðóãàÿ ïîâåðõíîñòü, èçìåíåíèåîáùåé îñâåùåííîñòè â ïîìåùåíèè, íå-áîëüøàÿ ìîäèôèêàöèÿ êîíñòðóêöèè è ò. ï.(â ïðåäûäóùèõ ïðèìåðàõ áûëî ÷èñëî 45,äîïóñòèìîå â êîìíàòíûõ óñëîâèÿõ, à ãäå-íèáóäü íà ñòàäèîíå ýòî çíà÷åíèå ìîæåòâûðàñòè íà 20�30 ïóíêòîâ). Ïîýòîìó èìååòñìûñë íàó÷èòü ðîáîòà ñàìîñòîÿòåëüíî âû-÷èñëÿòü ñðåäíåå àðèôìåòè÷åñêîå, òî åñòüçíà÷åíèå ãðàíèöû áåëîãî è ÷åðíîãî.

Åñòü íåñêîëüêî ñïîñîáîâ âûïîëíèòü êà-ëèáðîâêó äàò÷èêà.  ïðîñòåéøåì ñëó÷àåâìåñòî âû÷èñëåíèÿ ñðåäíåãî àðèôìåòè÷åñ-êîãî ïðîñòî ïîíèæàåòñÿ çíà÷åíèå áåëîãî.Ñìûñë ñïîñîáà â òîì, ÷òî ðîáîò ñíèìàåòïîêàçàíèÿ íà áåëîì, âû÷èòàåò èç íåãî íåêî-òîðîå ïðåäïîëàãàåìîå çíà÷åíèå è ïîëó÷åí-íîå ÷èñëî ñ÷èòàåò ãðàíèöåé áåëîãî è ÷åð-

...åãî ïîñòîÿííî çàíîñèò èç ñòîðîíû â ñòîðîíó.

Page 7: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

40

Ôèëèïïîâ Ñ.À.

© ÊÎÌÏÜÞÒÅÐÍÛÅ ÈÍÑÒÐÓÌÅÍÒÛ Â ØÊÎËÅ. ¹ 5, 2010 ã.

Ðèñ. 14. Àëãîðèòì äâèæåíèÿ ïî ëèíèè íà ïðîïîðöèîíàëüíîì ðåãóëÿòîðåñ èíèöèàëèçàöèåé äàò÷èêà è êàëèáðîâêîé

Ðèñ. 15. Àëãîðèòì äâèæåíèÿ ïî ëèíèè ñ îäíèì äàò÷èêîì îñâåùåííîñòèíà ïðîïîðöèîíàëüíîì ðåãóëÿòîðå ñ ðàñ÷åòîì çíà÷åíèÿ ñåðîãî

íîãî. Íàïðèìåð, 56 � 8 = 48 ìîæíî ñ÷èòàòüïîêàçàíèÿìè äàò÷èêà íà ñåðîì (ðèñ. 13).

Çíà÷åíèå îñâåùåííîñòè ñ äàò÷èêà íàïîðòó 1 ñ÷èòûâàåòñÿ â èìåíîâàííûé êîí-òåéíåð grey, ïîñëå ÷åãî îíî óìåíüøàåòñÿíà ÷èñëî 8, è â ôîðìóëå óïðàâëåíèÿ u ïå-ðåìåííàÿ grey èñïîëüçóåòñÿ êàê çàäàííîåçíà÷åíèå ñåðîãî. Èíèöèàëèçàöèÿ äàò÷èêàïðîèñõîäèò ïðè âûçîâå êîìàíäû ñ÷èòû-âàíèÿ â êîíòåéíåð, ïîýòîìó îòäåëüíàÿ êî-ìàíäà íå òðåáóåòñÿ. Äðóãèì ñïîñîáîì àíà-ëîãè÷íóþ êàëèáðîâêó ìîæíî âûïîëíèòüòàê (ðèñ. 14).

Âîîáùå ãîâîðÿ, â RobotC òîæå òðåáó-åòñÿ èíèöèàëèçàöèÿ äàò÷èêà. Ïðîèçâåñòèåå ìîæíî ÷åðåç ìåíþ Robot →→→→→ Motorsand Sensors Setup.  êà÷åñòâå òèïà äàò÷è-

êà óñòàíàâëèâàåòñÿ Light Active. Òàêæåðåêîìåíäóåòñÿ çàäàòü èìÿ äàò÷èêà è â ïðî-ãðàììå èñïîëüçîâàòü èìÿ âìåñòî ïðèâÿ-çàííîãî ê êîíêðåòíîìó ïîðòó çíà÷åíèÿ S1.Îäíàêî â äàííîé ñòàòüå äëÿ êðàòêîñòèîñòàâèì ïðåæíèé ñòèëü.

task main(){ int u;float k=2;int grey=SensorValue[S1]-8;while (true) { u=k*(SensorValue[S1]-grey); motor[motorB]=50+u; motor[motorC]=50-u; wait1Msec(1);}}

Ðèñ. 13. Àëãîðèòì äâèæåíèÿ ïî ëèíèè ñ îäíèì äàò÷èêîì îñâåùåííîñòè íà ïðîïîðöèîíàëüíîìðåãóëÿòîðå ñ ïðåäâàðèòåëüíîé êàëèáðîâêîé (îïðåäåëåíèåì çíà÷åíèÿ ñåðîãî).

Page 8: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

41

Îñíîâû ðîáîòîòåõíèêè íà áàçå êîíñòðóêòîðà Lego Mindstorms NXT.Çàíÿòèå 5. Äâèæåíèå ïî ëèíèè

ÇÀÎ×ÍÀß ØÊÎËÀ ÑÎÂÐÅÌÅÍÍÎÃÎ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß

Íàäî èìåòü â âèäó, ÷òî òàêîé ñïîñîáêàëèáðîâêè íå ó÷èòûâàåò âñå âîçìîæíûåâàðèàíòû, à òîëüêî ýêîíîìèò âðåìÿ íà ïðî-ãðàììèðîâàíèå è îòëàäêó. Åñëè æå âðåìå-íè äîñòàòî÷íî, åñòü äðóãîé ñïîñîá, ïðèêîòîðîì äåéñòâèòåëüíî ïðîèçâîäèòñÿ ðàñ-÷åò ñðåäíåãî àðèôìåòè÷åñêîãî (ðèñ. 15).

task main(){ int u, white, black;float grey, k=2;white = SensorValue[S1];PlaySound(SoundBeepBeep);wait1Msec(2000);black = SensorValue[S1];PlaySound(SoundBeepBeep);grey=(white+black)/2;while (true) { u=k*(SensorValue[S1]-grey); motor[motorB]=50+u; motor[motorC]=50-u; wait1Msec(1);}}

Ïðåäëîæåííûé àëãîðèòì îáëàäàåò íå-êîòîðûì íåóäîáñòâîì: ïðè çàïóñêå ïîòðå-áóåòñÿ áûòü âíèìàòåëüíûì è íå ïðîïóñ-òèòü çâóêîâîãî ñèãíàëà, ïîñëå êîòîðîãîðîáîò íàäî ïåðåìåñòèòü òàê, ÷òîáû äàò÷èêîñâåùåííîñòè îêàçàëñÿ íàä áåëûì ïîëåì.Ïîíÿòíî, ÷òî âíà÷àëå ñëåäîâàëî ïîìåñòèòüðîáîò òî÷íî íàä ÷åðíîé ëèíèåé.  êîí-

òåéíåðå black áóäåò ñîõðàíåíî çíà÷åíèå÷åðíîãî, â êîíòåéíåðå white � çíà÷åíèåáåëîãî.  ïåðåìåííóþ grey ïîìåùàåòñÿçíà÷åíèå ñåðîãî, êîòîðîå èñïîëüçóåòñÿ âðåãóëÿòîðå. Ñðàçó ïîñëå âòîðîãî çâóêî-âîãî ñèãíàëà ðîáîò íà÷íåò äâèæåíèå.

Ïðîöåññ êàëèáðîâêè ìîæíî ñäåëàòü óï-ðàâëÿåìûì. Äëÿ ýòîãî ïîñëå êàæäîãî ñ÷è-òûâàíèÿ äàííûõ íåîáõîäèìî âñòàâèòü îæè-äàíèå êàêîãî-ëèáî âíåøíåãî ñîáûòèÿ,íàïðèìåð íàæàòèÿ íà äàò÷èê êàñàíèÿ,óìåíüøåíèÿ ðàññòîÿíèÿ íà óëüòðàçâóêî-âîì äàò÷èêå èëè ïðîñòî íàæàòèÿ íà êíîï-êó «NXT». Ðàññìîòðèì ïðîñòåéøèé ïðè-ìåð ñ äîïîëíèòåëüíûì äàò÷èêîì êàñàíèÿ,ïîäñîåäèíåííûì êî âòîðîìó ïîðòó. Çàïó-ñòèòü ïðîãðàììó èìååò ñìûñë, àêêóðàòíîóñòàíîâèâ òåëåæêó ñ äàò÷èêîì îñâåùåí-íîñòè íàä ÷åðíîé ëèíèåé (ðèñ. 16).

Ðèñ. 16. Êàëèáðîâêà äàò÷èêà îñâåùåííîñòè ñ îæèäàíèåì êàñàíèÿ

... ïåðåìåííóþ greyïîìåùàåòñÿ çíà÷åíèå ñåðîãî,

êîòîðîå èñïîëüçóåòñÿ â ðåãóëÿòîðå.

Page 9: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

42

Ôèëèïïîâ Ñ.À.

© ÊÎÌÏÜÞÒÅÐÍÛÅ ÈÍÑÒÐÓÌÅÍÒÛ Â ØÊÎËÅ. ¹ 5, 2010 ã.

 äâóõ ïîñëåäíèõ ïðèìåðàõ èñïîëüçî-âàíû èìåíîâàííûå êîíòåéíåðû (black èwhite), êîòîðûå ïî ñóòè ÿâëÿþòñÿ ïåðå-ìåííûìè, êàê â îáû÷íîì ÿçûêå ïðîãðàì-ìèðîâàíèÿ. Îáðàòèòå âíèìàíèå, ÷òî çâó-êîâîé ñèãíàë ïåðåä ñòàðòîì ñïîñîáñòâóåòòîìó, ÷òîáû ðîáîò íå ñðåàãèðîâàë äâàæ-äû ïîäðÿä íà îäíî íàæàòèå, ÷òî íå èñ-êëþ÷åíî.  ïðèìåðå íà ÿçûêå RobotC ýòàïðîáëåìà ðåøàåòñÿ îæèäàíèåì îòïóñêà-íèÿ äàò÷èêà.

task main(){ int u, white, black;float grey, k=2;white = SensorValue[S1];PlaySound(SoundBeepBeep);while (SensorValue[S2]==0); //Æäàòü íàæàòèÿwhile (SensorValue[S2]==1); //Æäàòü îòïóñêàíèÿblack = SensorValue[S1];PlaySound(SoundBeepBeep);grey=(white+black)/2;while (SensorValue[S2]==0);while (SensorValue[S2]==1);while (true) { // Íà÷àëî äâèæåíèÿ u=k*(SensorValue[S1]-grey); motor[motorB]=50+u; motor[motorC]=50-u; wait1Msec(1);}}

Ïîñëå ïåðâîãî çâóêîâîãî ñèãíàëà íóæ-íî ïåðåñòàâèòü òåëåæêó òàê, ÷òîáû äàò÷èêîñâåùåííîñòè îêàçàëñÿ íàä áåëûì. Ïîñ-ëå âòîðîãî � ïîäãîòîâèòüñÿ ê ñòàðòó (äàò-÷èê îñâåùåííîñòè íà ãðàíèöå ìåæäó ÷åð-íûì è áåëûì), è ïî ïîâòîðíîìó íàæàòèþêíîïêè ðîáîò íà÷íåò äâèæåíèå.

Àíàëîãè÷íûé îïûò ìîæíî ïðîâåñòè,èñïîëüçóÿ äàò÷èê ðàññòîÿíèÿ âìåñòî äàò-÷èêà íàæàòèÿ. Ïðåèìóùåñòâî çäåñü â òîì,÷òî ñòàðò ðîáîòà áóäåò îñóùåñòâëÿòüñÿáåñêîíòàêòíî. Ýòî ïîìîæåò ñòàðòîâàòü âòî÷íî âûáðàííîì ïîëîæåíèè. Òîëüêî íàäîáûòü âíèìàòåëüíûì è íå÷àÿííî íå ïðîâå-ñòè ðóêîé âîçëå äàò÷èêà ðàññòîÿíèÿ ïðèïåðåìåùåíèè ðîáîòà. Ìîäèôèöèðóéòå àë-ãîðèòì ñàìîñòîÿòåëüíî. Êîìàíäà îæèäàíèÿîáúåêòà óæå âñòðå÷àëàñü â ïðåäûäóùåé ñòà-òüå â àëãîðèòìå ñ ïîèñêîì êåãëåé.

ÏÎËÅ

Áîëåå èíòåðåñíóþ òðàåêòîðèþ, ÷åì îê-ðóæíîñòü, ñòîèò ñäåëàòü ñàìîìó íà ñâåòëîéïîâåðõíîñòè äîñòàòî÷íî áîëüøîé ïëîùàäèñ ïîìîùüþ òîé æå ÷åðíîé èçîëåíòû.  êà-÷åñòâå ïîâåðõíîñòè ïîäîéäåò ëèñò ôàíåðû,îðãàëèòà èëè ÏÂÕ, îáðàòíàÿ ñòîðîíà ëèñòàëèíîëåóìà, áàííåðíàÿ òêàíü, áåëàÿ êëååíêàè ìíîãîå äðóãîå. Ðàçìåðû ïîëÿ æåëàòåëüíîäåëàòü íå ìåíüøå, ÷åì 100×150 ñì. Ïðèðàçìåòêå òðàåêòîðèè ñëåäóåò ó÷åñòü îòñòóïîò ëèíèè äî êðàÿ ïîëÿ íå ìåíåå 20 ñì,÷òîáû êîëåñà ðîáîòà íå ñúåçæàëè ñ òðàñ-ñû âî âðåìÿ äâèæåíèÿ.

Èìåÿ îïðåäåëåííûé íàâûê, ìîæíî íà-êëåèòü èçîëåíòó òàê, ÷òî ïîëó÷èòñÿ çàìê-íóòàÿ êðèâàÿ. Åñëè íå âûõîäèò îäíèì êóñ-êîì, ñìåëî ïîëüçóéòåñü íîæíèöàìè, ÷òîáûèçãèáû ñ ìàëûì ðàäèóñîì êðèâèçíû ñî-ñòàâèòü èç íåñêîëüêèõ ÷àñòåé. Äëÿ íà÷àëàíå ñòîèò ðèñîâàòü ñëèøêîì ðåçêèõ ïîâî-ðîòîâ. Âîò ïðèìåð òðàåêòîðèè (ðèñ. 17).

Ëèíèþ ìîæíî ñîñòàâèòü êàê èç îäíîé,òàê è èç äâóõ-òðåõ ïîëîñ èçîëåíòû èëèñàìîêëåþùåéñÿ ïëåíêè. Òîãäà ðîáîòó áó-äåò ëåã÷å îðèåíòèðîâàòüñÿ è íå ñúåõàòü ñêóðñà.

Íàèáîëåå èíòåðåñíûå ñîðåâíîâàíèÿäâèæåíèÿ ïî ÷åðíîé ëèíèè â Ðîññèè ïðî-âîäÿòñÿ â Ïîëèòåõíè÷åñêîì ìóçåå â Ìîñ-êâå [8].  òóðíèðå íà êóáîê Ïîëèòåõíè-÷åñêîãî ìóçåÿ ó÷àñòâóþò êàê Ëåãî-ðîáî-òû, òàê è ñàìîäåëüíûå òâîðåíèÿ ìîëîäûõè âçðîñëûõ ðîáîòîòåõíèêîâ. Øèðèíà ëè-íèè íà ýòèõ ñîñòÿçàíèÿõ ñîñòàâëÿåò 5 ñì,à äëèíà ïðåâûøàåò 10 ì.

Ðèñ. 17. Ïðèìåð òðàåêòîðèè äëÿ ñîñòÿçàíèé«Äâèæåíèå ïî ëèíèè»

Page 10: dmitržсновы робототехники на базе... · Title: dmitr Author: novikova Subject: dmitr Created Date: 191110110093827

43

Îñíîâû ðîáîòîòåõíèêè íà áàçå êîíñòðóêòîðà Lego Mindstorms NXT.Çàíÿòèå 5. Äâèæåíèå ïî ëèíèè

ÇÀÎ×ÍÀß ØÊÎËÀ ÑÎÂÐÅÌÅÍÍÎÃÎ ÏÐÎÃÐÀÌÌÈÐÎÂÀÍÈß

Ôèëèïïîâ Ñåðãåé Àëåêñàíäðîâè÷,ó÷èòåëü èíôîðìàòèêèôèçèêî-ìàòåìàòè÷åñêîãî ëèöåÿ¹ 239, ìåòîäèñò.

Ëèòåðàòóðà

1. Ñ.À. Ôèëèïïîâ. Ðîáîòîòåõíèêà äëÿ äåòåé è ðîäèòåëåé. Ïîä ðåä. À.Ë. Ôðàäêîâà. ÑÏá.: Íàóêà,2010.

2. Ì.Ñ. Àíàíüåâñêèé, Ã.È. Áîëòóíîâ, Þ.Å. Çàéöåâ, À.Ñ. Ìàòâååâ, À.Ë. Ôðàäêîâ, Â.Â. Øèåãèí. Ñàíêò-Ïåòåðáóðãñêèå îëèìïèàäû ïî êèáåðíåòèêå. Ïîä ðåä. À.Ë. Ôðàäêîâà, Ì.Ñ. Àíàíüåâñêîãî. ÑÏá.: Íàóêà,2006.

3. Ñàéò ïîäðàçäåëåíèÿ Lego Education: http://www.lego.com/education/.4. Ñðåäà òðåõìåðíîãî ìîäåëèðîâàíèÿ Lego Digital Designer: http://ldd.lego.com/.5. Ñðåäà ïðîãðàììèðîâàíèÿ RobotC: http://www.robotc.net/.6. Ñàéò ïîääåðæêè ïîëüçîâàòåëåé Lego Mindstorms, Robolab 2.9.4 è ïð.:

http://www.legoengineering.com/.7. Ñàéò î ðîáîòàõ, ðîáîòîòåõíèêå è ìèêðîêîíòðîëëåðàõ: http://www.myrobot.ru/.8. Ðåãëàìåíò ñîñòÿçàíèé ðîáîòîâ «Ñëåäîâàíèå ïî ëèíèè»: http://railab.ru/kanikul/2011/

line_v2_2.html.