Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
どうしてもPerlでドローンを飛ばしたい人のためのハードウェアハック概論
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
mackee
August 21, 2015
Programming
5.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
どうしてもPerlでドローンを飛ばしたい人のためのハードウェアハック概論
マコピー a.k.a mackee_w
面白法人カヤック
YAPC::Asia 2015 2015-08-21 #yapcasiaC
mackee
August 21, 2015
More Decks by mackee
See All by mackee
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
820
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
1.3k
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
6
6.4k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
7.5k
ワンバイナリWebサービスのススメ
mackee
10
9.2k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
850
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
1.2k
perl for shell, awk and sed programmers
mackee
3
2.9k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
1.1k
Other Decks in Programming
See All in Programming
SREの越境 / SRE Collaboration
y0hgi
2
220
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
220
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
290
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
330
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
250
Heart of Swift Concurrency
koher
0
880
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
110
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
210
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
550
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
410
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
464
34k
BBQ
matthewcrist
89
10k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
We Have a Design System, Now What?
morganepeng
55
8.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
530
4 Signs Your Business is Dying
shpigford
187
23k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Transcript
Ͳ͏ͯ͠PerlͰ υϩʔϯΛ ඈ͍ͨ͠ ਓͷͨΊͷϋʔυΣ ΞϋοΫ֓ Ϛίϐʔ a.k.a mackee_w ໘ന๏ਓΧϠοΫ YAPC::Asia
2015 2015-08-21 #yapcasiaC
͜Μʹͪ
@mackee_w a.k.a Ϛίϐʔ ໘ന๏ਓΧϠοΫ ࣄ ιʔγϟϧήʔϜͷ αʔόαΠυΤϯδχΞ ӡ༻&։ൃ ओʹPerlͱGolang
PR
1िؒલʹϦϦʔε͠·ͨ͠ PR
ʹग़͔ͨ͠Βʹ ͪΐͬͱຊʹͭͳ͍͛ͯ͘ ΜͰ͚͢ΕͲ
Pocket Footballer(PSGI) yellowpages (Go)
ෳͷΞʔΩςΫνϟͰ ׂΛ୲ͯ͠ ҰͭͷతΛୡ͢Δ
ϋʔυΣΞʹಉ͡Α͏ͳ ͜ͱ ద༻Ͱ͖ͳ͍͔ͱ͍͏Λ͠ ·͢
Agenda (લઓ) • ങͬͨΫΞουίϓλʔΛ֎෦͔Βૢ࡞͢Δ • ిؾతհೖ • ͦΕͰμϝͳΒྫ͑ཧͰ͑͜Ή • ΈΜͳେ͖ిͷ
• ͬऔΔͷ͕μϝͳΒج൘͝ͱೖΕସ͑Δ
• ങͬͨΫΞουίϓλʔΛ֎෦͔Βૢ࡞͢Δ • ిؾతհೖ • ͦΕͰμϝͳΒྫ͑ཧͰ͑͜Ή • ΈΜͳେ͖ిͷ • ͬऔΔͷ͕μϝͳΒج൘͝ͱೖΕସ͑Δ
Agenda (લઓ)
͕࣌ؒ༨ͬͨΒΞΠσΟΞϨ ϕϧͰ͕͢ ×ͷ෦Λͦ͏͔ͱ
Agenda (ޙઓ) • ͕ΜͬͯΫΞουίϓλʔΛ࡞Δ • ΫΞουίϓλʔͷߏཁૉ • AmazonͰύʔπΛങ͍ͬͯ͘ • PerlͰૢ࡞ͯ͠ΈΔ
ͬͪ͜ͳΜͱ͔ͳͬͨ ͷͰָ͓͠Έʹ
ങ͖ͬͯͨυϩʔϯΛ ૢ࡞͢Δ
τΠϔϦ(ʙ̎ສԁ)
Parrotͷυϩʔϯ(3ສԁʙ)
DJI Phantom(10ສԁʙ)
Ready To Fly • ϓϩϙ(ૹ৴ػ)ͱຊମ͕ηοτͰೖ͍ͬͯΔౕ • ϖΞϦϯάࡁΈ ௐࡁΈ • తͱۭͯ͠ࡱ
or ඈߦ
ిؾతհೖ
DJI Phantom • ͜Μͳײ͡ͷίϯτϩʔϥ͕ೖ͍ͬͯΔ
DJI Phantom • ͜Μͳײ͡ͷίϯτϩʔϥ͕ೖ͍ͬͯΔ →Ϟʔλʔ ϓϩϙˠ
NAZAͱ͍͏ίϯτϩʔϥ • தͲ͏ͳ͍ͬͯΔͷ͔ෆ໌ • WindowsͰPIDΛ͍͡Διϑτ͕͋Δ͚Ε Ͳɺϓϩτίϧͱ͔Θ͔Βͳ͍ • ϋοΫ͢Δޱͳ͍ͷͰɾɾɾɾʁ
ϒϥοΫϘοΫεతʹ ϋοΫ͍ͯ͘͠
ϓϩϙͷग़͢৴߸ • ݹ͖ྑ͖αʔϘ1ຊʹ͖ͭ1ຊͷέʔϒϧΛ ͏৴߸ = PWM (Pulse Width Modulation) •
ύϧε෯੍ޚ • 0ͱ1ͷ࣌ؒͷ͞ͰΛܾΊΔ
ܗΛݟͯΈΔ
ܗΛݟͯΈΔ ͜͜ͷ෯͕
ϋʔυΣΞߏ
ϋʔυΣΞߏ Firmata (UART) PWM
ೖΔ͔ͳʔೖΔ͔ͳʔ
RaspberryPi͕ͬ͢ΆΓऩ·Δ
Firmata • ArduinoΈ͍ͨͳϚΠίϯͱPCؒͷ௨৴ϓϩτί ϧ UART(Serial)Λ༻͍Δͷ͕جຊ • MIDIϕʔε • ArduinoIDEͷඪ४ϥΠϒϥϦͰ͏͜ͱ͕ग़དྷΔ •
PerlͩͱDevice::Firmata͕CPANʹ͋Δ
ArduinoͰͷPWMग़ྗ • analogWriteͱ͍͏ͷ͕͋Δ͕͜Εແࢹ(0-255 ·Ͱͷ͔͠औΕͳ͍ɻͦͷ͏ͪ͑Δͷ͘͝ Θ͔ͣͰਫ਼͕ѱ͍) • ArduinoʹαʔϘϞʔλͷϥΠϒϥϦ͕͋Δͷ ͰͦΕΛ͏ɻus୯ҐͰॻ͖ࠐΊΔ • ϓϩϙ৴߸௨ৗ1000us
- 2000usͷؒΛऔΔ
RaspberryPiଆͷϓϩάϥϜ • OpenCVΛΈ߹ΘͤΔ্ؔɺ࣮ͷ͋Δ PythonΛ༻ • pyfirmataͰarduinoͱ௨৴͢ΔϓϩηεͱOpenCV ֎෦API͔Βͷૢ࡞Λड͚͚ΔϓϩηεΛ • ͜ͷؒΛੜιέοτ௨৴ͷςΩετϓϩτίϧͰ ΓͱΓ͢ΔΑ͏ʹͨ͠
ϘʔυΛ҆શʹ࡞Δ • Phantomͷͱ͖հೖ͢ΔϘʔυ͕ڰ͏ͱͲ͔ͬඈΜ Ͱ͍ͬͯ͠·͏ͷͰɺΓସ͑Λඪ४ICΛͬͨσΟ εΫϦʔτͷճ࿏Ͱߦ͍ͬͯͨ • 2chϚϧνϓϨΫαICΛԿݸ͔Έ߹Θͤͯ͏PWM ΛεΠον • հೖϘʔυ͕ނোͯ͠ϓϧΞοϓ߅Ͱ͋Δఔͷ
έʔεखಈଆʹΓସΘΔΑ͏ʹ͍ͯͨ͠
ICͷதͷճ࿏͕༨ͬͨͷͰ • ͬͨIC4053Ͱɺ2chϚϧνϓϨΫα͕3ݸ ೖ͍ͬͯͯɺϓϩϙ৴߸4ͭΛΓସ͑Δʹ 2ͭඞཁ • ͔ͦ͠͠ͷ߹2ݸͷճ࿏͕༨Δ
ICͷதͷճ࿏͕༨ͬͨͷͰ • ͪͳΈʹհೖճ࿏पลػثͷIO͕Γͳͯ͘2 ͭͷArduinoΛࠞࡌ͍ͯͨ͠ • Arduinoͷॻ͖ࠐΈʹUARTΛ͏ • ιϑτΣΞͰॻ͖ࠐΈઌͷArduinoΛεΠον ͯ͠ܨ͗ม͑ͣʹεέονΛॻ͖ࠐΉΑ͏ʹͨ͠
લઓऴྃ
Agenda (ޙઓ) • ͕ΜͬͯΫΞουίϓλʔΛ࡞Δ • ΫΞουίϓλʔͷߏཁૉ • AmazonͰύʔπΛങ͍ͬͯ͘ • PerlͰૢ࡞ͯ͠ΈΔ
͕Μͬͯ ΫΞουίϓλʔΛ࡞Δ
ͷલʹɺΫΞουίϓλʔ ԿނඈͿͷ͔ʁ
࣮ͦΕͧΕճసํ͕ҧ͏
࣮ࡍʹճͯ͠Έͯ ԻͰฉ͍ͯΈΔ
ΫΞουίϓλʔͷߏཁૉ ϑϨʔϜ
ΫΞουίϓλʔͷߏཁૉ ϒϥγϨεϞʔλʔ
ΫΞουίϓλʔͷߏཁૉ ESC(Ξϯϓ)
ΫΞουίϓλʔͷߏཁૉ ίϯτϩʔϥʔ
MultiWii • Arduino + WiiϦϞίϯͷ9࣠ηϯαΛ ͬͨΦʔϓϯιʔεϓϩδΣΫτ • ΦʔϓϯιʔεͳͷͰNAZAͱҧͬͯ தΛݟΔ͜ͱ͕ग़དྷΔ
MultiWii
ΫΞουίϓλʔͷߏཁૉ όοςϦʔ
ΫΞουίϓλʔͷߏཁૉ ϓϩϙͱड৴ػ
͜ΕΒΛਖ਼ͭ͘͠ͳ͙ͱඈͿʂ
ϑϨʔϜ
ઢ
ग़དྷͨͷ͕ίνϥͰ͢
ඈͯ͠ΈΔ
্ख͘ඈͳ͍࣌ • ΊͪΌͪ͘Όૢॎ͕͍͠ • খܕͷػମͳͷͰϑΟʔυόοΫ੍ޚΛڧΊ ʹೖΕͯΔඞཁ͕͋Δ • MultiWiiGUI/CUI͔ΒPIDΛ͍͡Δ͜ͱ͕ ग़དྷΔ ->
DΛߴΊʹͯ҆͠ఆ
MultiWiiͷνϡʔχϯά MultiWiiConf
MultiWiiͷνϡʔχϯά https://github.com/c---/MultiWiiCL
ͦͯ͜͠͏ͳΔ
Perl͔Βඈͯ͠ΈΔ
MultiWii Serial Protocol • MultiWiiͱ͍͏ϓϩδΣΫτͷίϯτϩʔϥΛ ͓ͬͯΓɺதΦʔϓϯιʔε • UARTͰίϚϯυܦ༝Ͱͷૢ࡞Մೳ(PIDΛ GUI͔Β͍͡ΔϓϩάϥϜ͜ΕΛ͍ͬͯΔ) •
͔ͤͬ͘ͳͷͰϞδϡʔϧΛ࡞ͬͨ
Device::MultiWii Protocol::MultiWii
͜Μͳײ͡ use Device::MultiWii; my $port = "/dev/tty.usbserial"; my $mw =
Device::MultiWii->new(port => $port); is exception { $mw->open }, undef; my $ident = $mw->fetch_ident; cmp_deeply $ident, { version => 230, multitype => 3, capability => ignore(), };
͜Μͳײ͡ my $rc = $mw->fetch_rc; cmp_deeply $rc, { yaw =>
1500, pitch => 1500, roll => 1500, throttole => 1500, auxs => ignore(), }; $rc->{yaw} = 1400; ok $mw->set_raw_rc(%$rc); $refetched_rc = $mw->fetch_rc; cmp_deeply $refetched_rc, { yaw => 1400, pitch => 1500, roll => 1500, throttole => 1500, auxs => ignore(), };
ৗʹૹΓଓ͚ͳ͍ͱ ϓϩϙ৴߸Ͱ্ॻ͖͞ΕΔ
MSPʹΑΔRC্ॻ͖ͷΈ MSP(UART) PWM
MSPʹΑΔRC্ॻ͖ͷΈ 1. MSPͰRC্ॻ͖
MSPʹΑΔRC্ॻ͖ͷΈ 1. MSPͰRC্ॻ͖ 2. Χϯλ͕50ʹηοτ͞Εͯ ͦͷ্ؒॻ͖
MSPʹΑΔRC্ॻ͖ͷΈ 1. MSPͰRC্ॻ͖ 2. Χϯλ͕50ʹηοτ͞Εͯ ͦͷ্ؒॻ͖ ←͜ͷΧϯλ͕ ҰॠͰ0ʹͳΔʂʂʂ
MSPʹΑΔRC্ॻ͖ͷΈ 1. MSPͰRC্ॻ͖ 2. Χϯλ͕50ʹηοτ͞Εͯ ͦͷ্ؒॻ͖ ←͜ͷΧϯλ͕ ҰॠͰ0ʹͳΔʂʂʂ 3. ͬͪ͜ͷ৴߸Ͱ
্ॻ͖͞ΕΔ
֘෦ͷίʔυ if (chan<8 && rcSerialCount > 0) { rcSerialCount --;
#if defined(FAILSAFE) failsafeCnt = 0; #endif if (rcSerial[chan] >900) { rcData[chan] = rcSerial[chan]; } }
͜͏ม͑ͨίʔυ if ( chan<8 && (rcData4Values[AUX1][rc4ValuesIndex] > 1800 || rcSerialCount
> 0)) { rcSerialCount --; #if defined(FAILSAFE) failsafeCnt = 0; #endif if (rcSerial[chan] >900 && (chan == ROLL || chan == PITCH || chan == THROTTLE || chan == YAW)) { rcData[chan] = rcSerial[chan]; } }
AUXΛεΠονϯάʹ͏ • εςΟοΫҎ֎ʹ͍Ζ ͍ΖεΠονͱ͔͍ͭ ͍ͯΔ͚ΕͲɺ͜Εͷ ૹ৴Ͱ͖Δ -> AUX • ࠓճӈ্ͷεΠον
ΛAUX1ʹׂΓͯͨ
ͯ͞Perl͔Β͑ΔΑ͏ʹ ͳͬͨͷͰ
Q: Perl͕ಈ͘ೖख༰қͷதͰ ͬͱϑοτϓϦϯτখ͞ ͍ίϯϐϡʔλʁ
Raspberry Pi
Raspberry Pi 85.60 mm × 56.5 mm
Raspberry Pi 85.60 mm × 56.5 mm
Intel Edison
Intel Edison 35.5mm × 25.0mm
Intel Edison + Breakout Board 61mm x 29mm
Intel Edison + Breakout Board 61mm x 29mm
Intel Edison • 500MHz Atom σϡΞϧίΞ (x86ͩʂʂʂʂ) • ϔϦͱͯ͠7V -
15Vͷిݯ͕৯͑ΔͷͰ3 ηϧLiPo12V͕ͦͷ··৯͑Δͷ͕͏Ε͍͠ • RasPiʹ͍͍ͭͯͳ͍WiFi ͱ BT ͕͋Δ
Intel Edison meets MultiWii • EdisonUARTΛ2ܥ౷͍࣋ͬͯΔ͕Ϩϕϧม͕ ඞཁ(1.8V IO)ͳͷͰOTGέʔϒϧͰUSB-UARTม Λհͯ͠ଓɻϋϯμ͚ෆཁͩʂ •
Breakout boardఈ໘ʹ2.54mmϐονͷϗʔϧ͕ ۭ͍͍ͯΔ͕͜ͷஔͩͱϒϨουϘʔυʹͤ͞ ͳ͍ͷͰळ݄ిࢠͷมϘʔυ͕࣮ݧ༻ʹ͓͢ ͢ΊͰ͢
ىಈͯ͠ΈΔ (ةͳ͍ͷͰӋͳ͠Ͱ͢)
EdisonʹೖΕͨͷ • plenv (System PerlͷίΞϞδϡʔϧ͕ශ૬Ͱ opkgͰಥͬࠐΈ·͘Βͳ͍ͱ͍͚ͳ͍) • mackerel-agent(ωλɻόοςϦʔిѹͱ͔ ߴͱ͔ܭଌͰ͖ͨΒ͍͍͔͛ͯ)
Slack௨ೖΕ͍ͯΔͷͰ ى͖Δ·ͰͬͯΈ·͢
جຊCRITICALͰىಈͨ࣌͠ʹ OKʹͳΔײ͡Ͱ૽
Perl͔Βૢ࡞͢Δ͚ͩͰ Γͳ͍ͷͰ ͪ͜ΒΛPerlͰಡΈ·͢
LeapMotion
LeapMotion • Ұ࣌ظΛฉ͔ͳ͘ͳΓ·͕ͨ͠ɺࠓͰ OculusͳͲͷVRϔουηοτʹ͚ͯࣗͷ खΛVRʹු͔ͤΔ༻్Ͱ෮ݖ͖͍ͯͯ͠Δ • ࠷ۙਫ਼্͕͕ͬͨΒ͍͠(͍ͭ࠷ۙങͬͨͷ ͰΑ͘Θ͔Βͳ͍Ͱ͕͢……)
LeapMotion x QuadCopter • WebSocketͰܨ͛ΒΕΔͷͰPerl͔ΒͰ ใΛऔΔ͜ͱ͕ग़དྷΔ • ͜͜ͰAnyEvent::LeapMotionΛ͏ • ϓϩϙ͡Όͳͯ͘खͷͻΒ͚ͩͰු͔ͤͯΈ
Δ
σϞ
݁ߏݫ͍͠ɾɾɾ
None
1. खͷ͖ΛऔΔ
1. खͷ͖ΛऔΔ 2. Edisonʹཱ͍ͬͯΔPSGIʹ ϦΫΤετΛ͛Δ
1. खͷ͖ΛऔΔ 2. Edisonʹཱ͍ͬͯΔPSGIʹ ϦΫΤετΛ͛Δ 3. PSGIͷதͰDevice::MultiWiiʹ ॻ͖ࠐΈ
1. खͷ͖ΛऔΔ 2. Edisonʹཱ͍ͬͯΔPSGIʹ ϦΫΤετΛ͛Δ 3. PSGIͷதͰDevice::MultiWiiʹ ॻ͖ࠐΈ 4. ΪϡΠϯΪϡΠʔϯʂ
·ͱΊ • ϋʔυΣΞϋοΫʹ༷ʑͳํ๏͕͋Δ͕ɺ Γத͕͔͍ͬͯΔͷΛͬऔΔͷ ͕Ұ൪༰қ͍ • υϩʔϯ࡞ΕΔɹΈΜͳ࡞Ζ͏ • Perl͔Βૢ࡞Ͱ͖Ε͍ΖΜͳ͍͍͜ͱѱ͍ ͜ͱ͕ग़དྷָ͍ͯ͠Ͷʂ
ϙέοτϑοτϘʔϥʔͰݕࡧ PR
ڈͷҾ͖ଓ͖શһਓࣄ෦
͋Γ͕ͱ͏͍͟͝·ͨ͠
ී௨ͷϔϦͷΈ
ΫΞουίϓλʔͷ߹ • ্ঢԼ߱ • શମͷճసͷ্͛Լ͛ • ԣͷҠಈ(ϩʔϧ) • ࠨӈͷճసͰ͔ͤΔ •
લޙͷҠಈ(ϐον) • લޙͷճసͰ͔ͤΔ
ΊͪΌͪ͘Ό؆୯ͩʂ
ϔϦͷ߹ • ্ঢɺԼ߱ • ڧ͍ऑ͍ ← Θ͔Δ • લޙࠨӈ •
ʁʁʁʁʁʁʁʁ
ϔϦͷϩʔλʔͷ͚ࠜΛ Α͘ݟͯΈΑ͏ʂ
ϔϦͷϩʔλʔͷ͚ࠜΛ Α͘ݟͯΈΑ͏ʂ
εϫογϡϓϨʔτ • ϩʔλʔͷ֯ճస͢Δ͏ͪʹՄม͢Δ • લʹਐΈ͍ͨ࣌ޙΖͷͱ͖ʹཱͯͯલʹདྷ ͨ࣌৸͔ͤΔ -> ػମ͕͘ • εϫογϡϓϨʔτͳΔ෦Ͱʮ͜ͷ֯ͷ
དྷͨ࣌৸͔ͤΔɺཱͨͤΔʯΈ͍ͨͳͷΛ ܾΊ͍ͯΔ
↑͔͜͜Β্͕ճΔ
͔ͤΔͱΞʔϜͱ ϦϯΫػߏͰ Ӌ͕৸Δ/ཱͭ
ΊͬͪΌෳࡶʂ Ͱඒ͍͠ʂʂʂ