ใ€Pythonใ€‘Telloใ‚’SDKใƒขใƒผใƒ‰ใซใ—ใ€ใ‚ณใƒžใƒณใƒ‰ใ‚’้€ไฟกใ—ใฆ่‡ชๅ‹•้ฃ›่กŒ

ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐ่จ€่ชžPythonใงTelloใซใ‚ณใƒžใƒณใƒ‰ใ‚’้€ไฟกใ—ใฆ่‡ชๅ‹•ๅˆถๅพกใ—ใฆ้ฃ›่กŒใ•ใ›ใ‚‹ๆ–นๆณ•ใซใคใ„ใฆๅ…ฅ้–€่€…ๅ‘ใ‘ใซใพใจใ‚ใพใ—ใŸใ€‚

Telloใ‚’้ ้š”ๅˆถๅพกใ—ใฆใฟใ‚ˆใ†(ใ‚ณใƒžใƒณใƒ‰ๅ…ฅๅŠ›็‰ˆ)

Telloใฎ้ ้š”ๅˆถๅพกใซใคใ„ใฆๅญฆใถใŸใ‚ใซใ€ใพใšใฏPCใ‹ใ‚‰ใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’็”จใ„ใŸใ‚ณใƒžใƒณใƒ‰ๅ…ฅๅŠ›ใง้ ้š”ๅˆถๅพกใ—ใฆใฟใพใ™ใ€‚

Telloใฏใ€PCใจWi-FiใงๆŽฅ็ถšใ—ใ€ใ‚ฝใ‚ฑใƒƒใƒˆ้€šไฟก๏ผˆUDP/IP๏ผ‰ใซใ‚ˆใ‚ŠTelloใธๅ‘ฝไปค(้›ข้™ธใ€็€้™ธใ€็งปๅ‹•ใชใฉ)ใ—ใŸใ‚Šใ€Telloใ‹ใ‚‰ๆฉŸไฝ“ใฎใ‚นใƒ†ใƒผใ‚ฟใ‚นๆƒ…ๅ ฑ(ใƒใƒƒใƒ†ใƒชใƒผๆฎ‹้‡ใชใฉ)ใ‚’ๅ–ๅพ—ใงใใพใ™ใ€‚
Telloใธๅ‘ฝไปคใ‚’้€ใ‚‹ๅ ดๅˆใ€Telloใ‹ใ‚‰ๆฉŸไฝ“ใฎใ‚นใƒ†ใƒผใ‚ฟใ‚นๆƒ…ๅ ฑใ‚’ๅ–ๅพ—ใ™ใ‚‹ๅ ดๅˆใ€Telloใ‹ใ‚‰ใ‚ซใƒกใƒฉๆ˜ ๅƒใ‚’ๅ–ๅพ—ใ™ใ‚‹ๅ ดๅˆใ€ใใ‚Œใžใ‚Œไปฅไธ‹ใฎใ‚ˆใ†ใซ้€šไฟกใ‚’่กŒใ„ใพใ™ใ€‚

ๅ‹•ไฝœ ้€šไฟกๆ–นๆณ•
Telloใธๅ‘ฝไปคใ‚’้€ใ‚‹ๅ ดๅˆ TelloใฎIPใ‚ขใƒ‰ใƒฌใ‚นใƒปใƒใƒผใƒˆๅฎ›ใฆ(192.168.10.1:8889)ใซใ‚ณใƒžใƒณใƒ‰ใ‚’UDP้€šไฟกใง้€ไฟก
Telloใ‹ใ‚‰ๆฉŸไฝ“ใฎใ‚นใƒ†ใƒผใ‚ฟใ‚นๆƒ…ๅ ฑใ‚’ๅ–ๅพ—ใ™ใ‚‹ๅ ดๅˆ ๆ“ไฝœ็”จใฎPCๅฎ›ใฆ(0.0.0.0:8880)ใซUDP้€šไฟกใง้€ใ‚‰ใ‚Œใฆใใ‚‹ใฎใงUDP้€šไฟกใงๅ—ไฟก
Telloใ‹ใ‚‰ใ‚ซใƒกใƒฉๆ˜ ๅƒใ‚’ๅ–ๅพ—ใ™ใ‚‹ๅ ดๅˆ Telloใธใƒ“ใƒ‡ใ‚ชใ‚นใƒˆใƒชใƒผใƒ ๆœ‰ๅŠนๅŒ–ใฎๅ‘ฝไปค(streamon)ใ‚’้€ใ‚‹ใจใ€ๆ“ไฝœ็”จใฎPCๅฎ›ใฆ(0.0.0.0:11111)ใซUDP้€šไฟกใง้€ใ‚‰ใ‚Œใฆใใ‚‹ใฎใงUDP้€šไฟกใงๅ—ไฟก

ๅคงใพใ‹ใชๆ‰‹้ †ใฏไปฅไธ‹ใฎใจใŠใ‚Šใงใ™ใ€‚

1 Telloใฎ้›ปๆบใ‚’ๅ…ฅใ‚Œใ‚‹ใจใ€TelloใฏWi-Fi่ฆชๆฉŸ๏ผˆSSID:TELLO-ใ€‡ใ€‡๏ผ‰ใจใชใ‚‹ใฎใงใ€PCใงใใ“ใธๆŽฅ็ถšใ—ใพใ™ใ€‚
2 PCๅดใงPythonใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’่ตทๅ‹•ใ—ใ€UDPใ‚ฝใ‚ฑใƒƒใƒˆ้€šไฟกใงใ€IPใ‚ขใƒ‰ใƒฌใ‚นใฏใ€Œ192.168.10.1ใ€ใ€ใƒใƒผใƒˆ็•ชๅทใฏใ€Œ8889ใ€ๅฎ›ใซใ€Œcommandใ€ใจใ„ใ†ใƒ†ใ‚ญใ‚นใƒˆใ‚’้€ไฟกใ™ใ‚‹ใจใ€TelloใŒใ‚ณใƒžใƒณใƒ‰ใƒขใƒผใƒ‰ใซใชใ‚Šใพใ™(ใ‚ณใƒžใƒณใƒ‰ใงๅˆถๅพกๅฏ่ƒฝใช็Šถๆ…‹ใจใชใ‚‹)ใ€‚
3 ไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’ใƒ†ใ‚ญใ‚นใƒˆใง้€ไฟกใ™ใ‚‹ใจใ€TelloใŒๅ‘ฝไปค(ใ‚ณใƒžใƒณใƒ‰)ใซๅพ“ใฃใฆๅ‹•ไฝœใ—ใพใ™ใ€‚ใพใŸใ€Telloใ‹ใ‚‰ใ‚นใƒ†ใƒผใ‚ฟใ‚นๆƒ…ๅ ฑใ‚„ใ‚ซใƒกใƒฉๆ˜ ๅƒ(streamonใงๆœ‰ๅŠนๅŒ–ใ—ใŸๅ ดๅˆ)ใŒPCใซ้€ใ‚‰ใ‚Œใฆใใ‚‹ใฎใงใ€ใใ‚Œใ‚‰ใ‚’ๅ–ๅพ—ใงใใพใ™ใ€‚

Telloใงไฝฟใˆใ‚‹ไธปใชใ‚ณใƒžใƒณใƒ‰ใฏไปฅไธ‹ใฎใจใŠใ‚Šใงใ™ใ€‚

่ชฌๆ˜Ž ๅ‹•ไฝœ ๅ€คใฎ็ฏ„ๅ›ฒ
Command SDKใƒขใƒผใƒ‰ใ‚’้–‹ๅง‹(ใ‚ณใƒžใƒณใƒ‰ใงTelloใ‚’้ ้š”ๆ“ไฝœใ™ใ‚‹้š›ใซๆœ€ๅˆใซๅฟ…ใšๅฎŸ่กŒ) ใƒผ
streamon ใƒ“ใƒ‡ใ‚ชใ‚นใƒˆใƒชใƒผใƒ ใ‚’ๆœ‰ๅŠนๅŒ–(ใ‚ซใƒกใƒฉๆ˜ ๅƒใ‚’้€ไฟกใ™ใ‚‹) ใƒผ
streamoff ใƒ“ใƒ‡ใ‚ชใ‚นใƒˆใƒชใƒผใƒ ใ‚’็„กๅŠนๅŒ–(ใ‚ซใƒกใƒฉๆ˜ ๅƒใ‚’้€ไฟกใ—ใชใ„) ใƒผ
emergency ็ทŠๆ€ฅๅœๆญข(ใ™ใใซใƒขใƒผใ‚ฟใƒผใ‚’ๅœๆญขใ•ใ›ใ‚‹) ใƒผ
wifi ssid pass Wi-FiใฎSSIDใจใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’่จญๅฎš(Telloใ‚ขใƒ—ใƒชใ‹ใ‚‰ใงใ‚‚่จญๅฎšๅฏ่ƒฝ) ssid:SSIDใ€pass:ใƒ‘ใ‚นใƒฏใƒผใƒ‰
ap ssid pass Telloใ‚’ใ‚นใƒ†ใƒผใ‚ทใƒงใƒณใƒขใƒผใƒ‰ใซ่จญๅฎšใ—ใ€ใ‚ขใ‚ฏใ‚ปใ‚นใƒใ‚คใƒณใƒˆใฎSSIDใจใƒ‘ใ‚นใƒฏใƒผใƒ‰ใ‚’ไฝฟ็”จใ—ใฆๆ–ฐใ—ใ„ใ‚ขใ‚ฏใ‚ปใ‚นใƒใ‚คใƒณใƒˆใซๆŽฅ็ถš ssid:SSIDใ€pass:ใƒ‘ใ‚นใƒฏใƒผใƒ‰
takeoff ้›ข้™ธ ใƒผ
land ็€้™ธ ใƒผ
stop ็ฉบไธญใงๅœๆญข(ใƒ›ใƒใƒชใƒณใ‚ฐ) ใƒผ
speed x ้€Ÿๅบฆใ‚’x[cm/s]ใซ่จญๅฎš 10ใ€œ100
left x ๅทฆใซx[cm]็งปๅ‹• 20~500
right x ๅณใซx[cm]็งปๅ‹• 20~500
forward x ๅ‰ใซx[cm]็งปๅ‹• 20~500
back x ๅพŒใ‚ใซx[cm]็งปๅ‹• 20~500
up x x[cm]ไธŠๆ˜‡ 20~500
down x x[cm]ไธ‹้™ 20~500
cw x ๅณๅ›žใ‚Šใซx[ๅบฆ]ๅ›ž่ปข 1ใ€œ360
ccw x ๅทฆๅ›žใ‚Šใซx[ๅบฆ]ๅ›ž่ปข 1ใ€œ360
flip x xๆ–นๅ‘ใซๅ่ปข ใ€€”l”:ๅทฆใ€”r”:ๅณใ€”f”:ๅ‰ใ€”b”:ๅพŒใ‚
speed? ็พๅœจใฎ้€Ÿๅบฆ[cm/s]ใ‚’ๅ–ๅพ— 0ใ€œ100
battery? ็พๅœจใฎใƒใƒƒใƒ†ใƒชใƒผๆฎ‹้‡[%]ใ‚’ๅ–ๅพ— 0ใ€œ100
time? ็พๅœจใฎ้ฃ›่กŒๆ™‚้–“[็ง’]ใ‚’ๅ–ๅพ— ใƒผ
wifi? ็พๅœจใฎWi-FiใฎS/Nๆฏ”๏ผˆไฟกๅท้›‘้Ÿณๆฏ”๏ผ‰ใ‚’ๅ–ๅพ— ใƒผ
sdk? Tello SDKใฎใƒใƒผใ‚ธใƒงใƒณใ‚’ๅ–ๅพ— ใƒผ
sn? Telloใฎใ‚ทใƒชใ‚ขใƒซใƒŠใƒณใƒใƒผใ‚’ๅ–ๅพ— ใƒผ
height? ็พๅœจใฎ้ซ˜ใ•(cm)ใ‚’ๅ–ๅพ— 0-3000
temp? ็พๅœจใฎๆธฉๅบฆ(โ„ƒ)ใ‚’ๅ–ๅพ— 0-90
attitude? IMU(ๆ…ฃๆ€ง่จˆๆธฌ่ฃ…็ฝฎ) ใฎๅงฟๅ‹ขๆƒ…ๅ ฑใ‚’ๅ–ๅพ— ใƒผ
baro? ใƒใƒญใƒกใƒผใ‚ฟ๏ผˆๆฐ—ๅœง่จˆ๏ผ‰ใฎๅ€ค(m)ใ‚’ๅ–ๅพ— ใƒผ
acceleration? IMU่ง’ๅŠ ้€Ÿๅบฆใƒ‡ใƒผใ‚ฟใ‚’ๅ–ๅพ— ใƒผ
tof? TOFใ‹ใ‚‰ใฎ่ท้›ข(cm)ใ‚’ๅ–ๅพ— 30-1000

ไปŠๅ›žใ€ใ‚ณใƒžใƒณใƒ‰ๅ…ฅๅŠ›ใ‚’ๅ—ไป˜ใ™ใ‚‹ใŸใ‚ใฎPythonใฎๆจ™ๆบ–ๅ…ฅๅŠ›ใซใคใ„ใฆใฎ่ชฌๆ˜Žใ‚’็œ็•ฅใ—ใพใ™ใŒใ€ไปฅไธ‹ใƒšใƒผใ‚ธใง่ชฌๆ˜Žใ—ใฆใ„ใพใ™ใฎใงๅ‚่€ƒใซใ—ใฆใใ ใ•ใ„ใ€‚

ใ€Pythonใ€‘ๆจ™ๆบ–ๅ…ฅๅŠ›ใงใ‚ญใƒผใƒœใƒผใƒ‰ใ‹ใ‚‰ใƒ‡ใƒผใ‚ฟใ‚’ๅ—ใ‘ๅ–ใ‚Š๏ผˆsys.stdin.readlinesใ€input้–ขๆ•ฐ๏ผ‰
Python่จ€่ชžใฎsys.stdin.readlinesใ€input้–ขๆ•ฐใชใฉใ‚’็”จใ„ใฆๆจ™ๆบ–ๅ…ฅๅŠ›ใ‚’ๅฎŸ่ฃ…ใ™ใ‚‹ๆ–นๆณ•ใ‚’ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ไป˜ใใง่งฃ่ชฌใ—ใพใ™ใ€‚

ใ‚ฝใ‚ฑใƒƒใƒˆ้€šไฟกใ™ใ‚‹ใŸใ‚ใฎsocketใƒขใ‚ธใƒฅใƒผใƒซใซใคใ„ใฆใ‚‚ใ€ไปฅไธ‹ใƒšใƒผใ‚ธใง่ชฌๆ˜Žใ—ใฆใ„ใพใ™ใ€‚

ใ€Pythonใ€‘ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐๅ…ฅ้–€
Pythonใ‚’็”จใ„ใŸใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใซใคใ„ใฆใ€ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ไป˜ใใงๅ…ฅ้–€่€…ๅ‘ใ‘ใซใพใจใ‚ใพใ—ใŸใ€‚

ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰

ใ‚ญใƒผใƒœใƒผใƒ‰ๅ…ฅๅŠ›ใงใ‚ณใƒžใƒณใƒ‰ใ‚’้€ไฟกใ—ใ€Telloใ‚’้ ้š”ๅˆถๅพกใ™ใ‚‹ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰ใฏไปฅไธ‹ใฎใจใŠใ‚Šใงใ™ใ€‚


ไธŠ่จ˜ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰ใ‚’ๅฎŸ่กŒใ—ใ€ไปฅไธ‹ใฎใ‚ณใƒžใƒณใƒ‰ใ‚’1่กŒใšใค้ †ใซๆจ™ๆบ–ๅ…ฅๅŠ›ใงๅฎŸ่กŒใ™ใ‚‹ใจใ€TelloใŒใ€ŒSDKใƒขใƒผใƒ‰ๆœ‰ๅŠนๅŒ–โ†’้›ข้™ธโ†’30cmไธŠๆ˜‡โ†’30cmไธŠๆ˜‡โ†’50cmไธŠๆ˜‡โ†’100cmไธ‹้™โ†’็€้™ธใ€ใ—ใพใ™ใ€‚

command
takeoff
up 30
up 30
up 50
down 100
land

Telloใฎ้›ปๆบใ‚’ๅ…ฅใ‚ŒใฆPCใจๆŽฅ็ถšใ™ใ‚‹ใŸใณใซใ€ๆœ€ๅˆใซๅฟ…ใšใ€Œcommandใ€ใ‚’ๅฎŸ่กŒใ—ใชใ„ใจใ€SDKๆฉŸ่ƒฝใŒๆœ‰ๅŠนๅŒ–ใ•ใ‚Œใชใ„ใŸใ‚ใ€้ ้š”ๆ“ไฝœใŒใงใใชใ„ใฎใงๆณจๆ„ใŒๅฟ…่ฆใงใ™ใ€‚

Telloใ‚’้ ้š”ๅˆถๅพกใ—ใฆใฟใ‚ˆใ†(ใ‚ณใƒณใƒˆใƒญใƒผใƒซ็”ป้ขใงใƒœใ‚ฟใƒณๆ“ไฝœ็‰ˆ)

ๆฌกใฎใ‚ˆใ†ใชใ‚ณใƒณใƒˆใƒญใƒผใƒซ็”ป้ขใ‚’Tkinter(Pythonๆจ™ๆบ–ใƒขใ‚ธใƒฅใƒผใƒซ)ใงไฝœๆˆใ—ใ€ใƒœใ‚ฟใƒณๆ“ไฝœใง็ฐกๅ˜ใซTelloใ‚’้ ้š”ๅˆถๅพกใ—ใฆใฟใพใ™ใ€‚

ไปŠๅ›žใ€ใ‚ณใƒณใƒˆใƒญใƒผใƒซ็”ป้ขใ‚’ไฝœๆˆใ™ใ‚‹ใŸใ‚ใฎTkinter(Pythonๆจ™ๆบ–ใƒขใ‚ธใƒฅใƒผใƒซ)ใซใคใ„ใฆใฏ่ชฌๆ˜Žใ‚’็œ็•ฅใ—ใพใ™ใŒใ€ไปฅไธ‹ใƒšใƒผใ‚ธใง่ชฌๆ˜Žใ—ใฆใพใ™ใฎใงๅ‚่€ƒใซใ—ใฆใใ ใ•ใ„ใ€‚

ใ€Tkinterๅ…ฅ้–€ใ€‘PythonใงGUIใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’็ฐกๅ˜ใซไฝœใ‚ใ†
Python็”จใƒขใ‚ธใƒฅใƒผใƒซใ€ŒTkinterใ€ใงGUIใ‚ขใƒ—ใƒชใ‚’ไฝœๆˆใ™ใ‚‹ๆ–นๆณ•ใซใคใ„ใฆใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ไป˜ใใงใพใจใ‚ใพใ—ใŸใ€‚

ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰


TelloใจPCใ‚’WiFiใงๆŽฅ็ถšใ—ใ€Pythonใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’ๅฎŸ่กŒใ—ใฆใ€ใ‚ณใƒณใƒˆใƒญใƒผใƒซ็”ป้ขใฎใ€Œโ–ฒ้›ข้™ธใ€ใƒœใ‚ฟใƒณใ‚’ๆŠผใ›ใฐTelloใŒ้›ข้™ธใ—ใ€ใใฎๅพŒใฏๅ„็จฎใƒœใ‚ฟใƒณใซใ—ใŸใŒใฃใฆTelloใŒๅ‹•ใ„ใฆใใ‚Œใพใ™ใ€‚

ใ€Pythonร—Telloใ€‘ใƒ‰ใƒญใƒผใƒณใ‚’้ ้š”ๅˆถๅพกใƒป่‡ชๅพ‹้ฃ›่กŒใ•ใ›ใฆ้Šใถๆ–นๆณ•
Python่จ€่ชžใงใƒ‰ใƒญใƒผใƒณใ€ŒTelloใ€ใ‚’้ ้š”ๅˆถๅพกใ—ใŸใ‚Š่‡ชๅพ‹้ฃ›่กŒใ•ใ›ใฆ้Šใถๆ–นๆณ•ใซใคใ„ใฆๅ…ฅ้–€่€…ๅ‘ใ‘ใซใพใจใ‚ใพใ—ใŸใ€‚

ใ‚ณใƒกใƒณใƒˆ