Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go言語によるROSプログラミング
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
akio
September 14, 2018
Technology
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go言語によるROSプログラミング
Slides used in my talk about ROS client library implementation for ROS.
akio
September 14, 2018
More Decks by akio
See All by akio
2016-06-26 第8回ROS勉強会LT資料 catkin-tools
akio
0
410
2016-06-26 第8回ROS勉強会資料 ROSCRAFT
akio
0
510
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
akio
0
740
Other Decks in Technology
See All in Technology
Claude Mythos、Fable...フロンティアAIの最新動向と企業のセキュリティ対策
flatt_security
0
170
A Bag-of-Documents Model for Query Specificity
dtunkelang
0
170
データ活用研修 問いの発見と仮説構築【MIXI 26新卒技術研修】
mixi_engineers
PRO
1
680
データエンジニアこそ組織のオントロジーに向き合うべき — 問いに答えるAIから、事業を動かすAIへ
gappy50
6
2.6k
カメラ×AIで挑む「ホワイト物流」― 車両管理、自動化の壁と突破口【SORACOM Discovery 2026】
soracom
PRO
0
180
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
1
140
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
390
人依存からAIネイティブの体制へ:バックエンド開発の裏側【SORACOM Discovery 2026】
soracom
PRO
0
130
PLaMo 3.0 Primeの構造化出力サポート
pfn
PRO
0
130
テックカンファレンス三大ステークホルダーの文化人類学 ─ 違いを認め合う関係性作り
bash0c7
5
1.2k
MCPをつなげて作る組織横断のAIエージェント基盤
tsubakimoto_s
0
400
新しい SLO が良い感じにハマっている話
z63d
0
310
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
880
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Accessibility Awareness
sabderemane
1
170
Bash Introduction
62gerente
615
220k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
A Modern Web Designer's Workflow
chriscoyier
698
190k
How to build a perfect <img>
jonoalderson
1
5.8k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Become a Pro
speakerdeck
PRO
31
6k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
New Earth Scene 8
popppiees
3
2.4k
Transcript
GoݴޠʹΑΔROSϓϩάϥϛϯά https://github.com/akio/rosgo.git
ࣗݾհ
ࣗݾհ • Akiyoshi(Akio) Ochiai • Sr Engineer @ Toyota Research
Institute • ϞόΠϧϚχϐϡϨʔγϣϯϩϘοτͷݚڀ։ൃʹैࣄ • GitHub: http://github.com/akio • ࠓݸਓతͳOSS׆ಈͷΛ͠·͢
ROSؔͰ࡞ͬͨͷ • rosrb • ROSͷRubyΫϥΠΞϯτϥΠϒϥϦ • ࣌ಉ͡ձࣾʹ͍ͨ@OTLࢯͱ͔Ϳ্ͬͨʹग़ΕͯϘπ • vim-ctrlp-ros •
Vim Ctrl-P ROS ϓϥάΠϯ • msg/srv/actionͳͲΛVim͔ΒΠϯΫϦϝϯλϧαʔν • RosCraft • MinecraftΛROS͔Β੍ޚͰ͖Δͧ • Կ͕͔ͨͬͨ͠ͷ͔Α͘Θ͔Βͳ͍ • fluent_logger_ros • ROSͷϩάΛfluentdʹྲྀ͠ࠐΉখ • mask_rcnn_ros • Advent CalendarͷωλͷͨΊʹ։ൃ • menoh_ros • ONNXΛROSͷը૾ॲཧύΠϓϥΠϯʹυϩοϓΠϯ • rosgo • ࠓճൃද͢Δ༰ • ͦͷଞ׆ಈ • MoveIt! ͷPRɺϝϯςφʔձٞࢀՃͳͲ • ROSίΞύοέʔδͷPRͳͲ
ެ։ROS͓ࣄ • ։ൃνʔϜͷڠྗͷͱɺτϤλHSRͷϩϘοτϞσϧϑΝΠϧΛΦʔϓϯιʔεԽ͠·ͨ͠ • hsr_description • https://github.com/ToyotaResearchInstitute/hsr_description • hsr_meshes •
https://github.com/ToyotaResearchInstitute/hsr_meshes https://github.com/OTL/gear ROSҎ֎Ͱͷ׆༻ྫ
Why Go?
ಈػ • 2013࣌ɺROS։ൃਓࡐͷҭʹΜͰ͍ͨ • C++ • ෳࡶͳݴޠ༷ • Python/MatlabͳͲ͔Βདྷͨਓͷϋʔυϧ͕ߴ͍ •
Cݴޠܦݧऀ͕৽֓೦ΛֶͿͷ͍͠ʢOOPɺδΣωϦοΫϓϩάϥϛϯάʣ • Python • ֶशίετ͍ • ੑೳ͕ඞཁʹͳΔͱ݁ہC/C++/CythonͳͲΛॻ͔͟Δ͑ͳ͘ͳͬͨΓ͢Δ
͍֮͑͢ ͍ͦͦ͜͜ ͋ΔఔϦΞϧλΠϜੑͷ͋Δ ϓϩάϥϛϯάݴޠͳ͍͔ʁ
̎̌̍̏࣌ͷީิൺֱ • Java • rosjava͕͢Ͱʹଘࡏ • ωΠςΟϒίϯύΠϧͰ͖ͳ͍ • ύοέʔδ͕ͭΒ͍ •
Go • Better C తͳจ๏ • ػೳ͕ߜΒΕ֮͑Δ͜ͱ͕গͳ͍ • ωΠςΟϒίϯύΠϧͰ݁ߏ͍ • GC͕ϝϞϦͷੈΛͯ͘͠ΕΔ • Rust • ͍ɺ҆શɺؾ͍͍࣋ͪ • ͕ࣗٻΊ͍ͯͨͷ͕େମ͋Δ • ͋Γ͗ͯͬ͢ͺΓֶशίετ͕ߴ ͍ͷͰ‥.ʁ • Julia • ॻ͖ͯͯ͘͘͢࠷ڧʹݟ͑Δ • Ͱ࣌Ͱ͖͔ͨΓͰ৭ʑػೳ͕ Γͳ͔ͬͨ • ฒྻॲཧ͕ͭΒͦ͏
ͦͷଞͷڧΈ • ڧྗͳ։ൃମ੍ʢby Google) • ϨΠςϯγͳΨϕʔδίϨΫγϣϯʢޙड़) • ๛ͳ։ൃ࣮(DockerͳͲ) • σϑΥϧτͰ੩తϦϯΫ͞ΕͨγϯάϧόΠφϦΛੜ
• πʔϧ։ൃͳͲʹ͘ • σϓϩΠ͕؆୯
αϒϛϦඵGC ग़యɿhttps://twitter.com/brianhatfield/status/804355831080751104
ऑΈ • ϝϞϦΛେྔʹ֬อɾղ์͢ΔΑ͏ͳ͍ํΛ͢Δͱεϧʔϓοτ͕ѱԽ • Պֶٕज़ܭࢉ༻ͷϥΠϒϥϦ͕গͳ͍ʢগͣͭ͠૿͖͑ͯͨɺޙͰհʣ • ԋࢉࢠΦʔόʔϩʔυ͕ͳ͍ʢˢʹͪΐͬͱӨڹʣ • όΠφϦαΠζ͕େ͖͘ͳΓ͕ͪ
GoͰROSϓϩάϥϛϯάͰ͖ΔΑ͏ʹ͠Α͏
rosgo ॳظ։ൃ൛(2013) • ͕ΜΓϙΠϯτ • XMLRPCϥΠϒϥϦ͕ͳ͔ͬͨͷͰࣗͰ࣮ͨ͠ • CatkinπʔϧνΣʔϯʹ౷߹
࠷ۙͷΞοϓσʔτ(2018) • RemappingΛ࣮ • ΫϥΠΞϯτϥΠϒϥϦͷػೳ͕Ұ௨ΓͦΖͬͨ • v1.0.0ͷ४උ͕ͬͨʁ • ಠཱͨ͠msg/srvίʔυδΣωϨʔλΛ࣮ •
Good bye, Catkin and CMake! • GoͷίʔυδΣωϨʔλΛ࣮ͯ͠ Pure Go ύοέʔδԽ • Go generateͱvendoringΛར༻ʢޙड़ʣ
ϝοηʔδੜ • Goͷػೳ go generate (v1.4+)ɹͱ vendorng (v1.5+)Λ׆༻ • ιʔείʔυதʹҎԼͷΑ͏ʹॻ͍͓ͯ͘
• //go:generate gengo msg your_pkg/MsgType • $ go generate <GO_PKG_NAME> Λ࣮ߦ • ͢Δͱɺ$GOPATH/your_pkg/vendorҎԼʹGoίʔυ͕ੜ
rosgo ίʔυྫ
Πϯετʔϧ 1. GoͷΠϯετʔϧ 2. $ go get -u github.com/akio/rosgo/ros 3.
$ go install github.com/akio/rosgo/gengo 4. import “github.com/akio/rosgo/ros"
Publisher package main //go:generate gengo msg std_msgs/String import ( "fmt"
"github.com/akio/rosgo/ros" "os" "std_msgs" "time" ) func main() { node, _ := ros.NewNode("/talker", os.Args) defer node.Shutdown() pub, _ := node.NewPublisher("/chatter", std_msgs.MsgString) for node.OK() { node.SpinOnce() var msg std_msgs.String msg.Data = fmt.Sprintf("hello %s", time.Now().String()) pub.Publish(&msg) time.Sleep(time.Second) } }
Subscriber package main //go:generate gengo msg std_msgs/String import ( "fmt"
"github.com/akio/rosgo/ros" "os" "std_msgs" ) func callback(msg *std_msgs.String) { fmt.Printf("Received: %s\n", msg.Data) } func main() { node, _ := ros.NewNode("/listener", os.Args) defer node.Shutdown() node.NewSubscriber("/chatter", std_msgs.MsgString, callback) node.Spin() }
Example: Service Server package main //go:generate gengo srv rospy_tutorials/AddTwoInts import
( "fmt" "github.com/akio/rosgo/ros" "os" "rospy_tutorials" ) func callback(srv *rospy_tutorials.AddTwoInts) error { srv.Response.Sum = srv.Request.A + srv.Request.B fmt.Printf("%d + %d = %d\n", srv.Request.A, srv.Request.B, srv.Response.Sum) return nil } func main() { node, _ := ros.NewNode("server", os.Args) defer node.Shutdown() server, _ := node.NewServiceServer("/add_two_ints", rospy_tutorials.SrvAddTwoInts, callback) defer server.Shutdown() node.Spin() }
Service Client package main //go:generate gengo srv rospy_tutorials/AddTwoInts import (
"fmt" "github.com/akio/rosgo/ros" "os" "rospy_tutorials" ) func main() { node, _ := ros.NewNode("client", os.Args) defer node.Shutdown() cli, _ := node.NewServiceClient("/add_two_ints", rospy_tutorials.SrvAddTwoInts) defer cli.Shutdown() var srv rospy_tutorials.AddTwoInts srv.Request.A = 1 srv.Request.B = 2 _ = cli.Call(&srv) fmt.Printf("%d + %d = %d\n", srv.Request.A, srv.Request.B, srv.Response.Sum) }
Parameters package main import ( "fmt" "github.com/akio/rosgo/ros" "log" "os" )
func main() { node, _ := ros.NewNode("/test_param", os.Args) defer node.Shutdown() hasParam, _ := node.HasParam("/rosdistro") param, _ := node.GetParam("/rosdistro") err := node.SetParam("/test_param", 42) param, _ := node.GetParam("/test_param") err := node.DeleteParam("/test_param") foundKey, _ := node.SearchParam(“/rosdistro") }
͜Ε͔Β
ػೳՃ • Action Client/Server • TF • ଞʁ
ϩϘοτ։ൃʹ͑ΔGoϥΠϒϥϦͷհ • GoCV • OpenCVͷGoόΠϯσΟϯά • Tensorflow • ެࣜͷGoόΠϯσΟϯά͕ ͋Δ
• GoNum • NumpyతͳܭࢉϥΠϒϥ Ϧ • gobot • ओʹIoTͳ֎෦σόΠεͱͷI/Oॲཧϥ ΠϒϥϦ • g3n • ήʔϜΤϯδϯɺՄࢹԽͳͲʹ͑Δ • GoRO • ৭ʑΓͳ͍ͷͰࣗͰ࡞Γ࢝Ίͨ • https://github.com/akio/goro • ·ͩURDF parser ͘Β͍͔͠ͳ͍
Go 2 • GoݴޠͷΧϯϑΝϨϯε GopherCon2018ʹͯɺGo 2ͷυϥϑτ͕ൃද • Τϥʔॲཧจ๏ͷվྑ • δΣωϦΫεͷՃ
ROS2 • DDSΛ࣮͢Δͷେมͦ͏ • rclΛcgoͰϥοϓ͢Δʁ
·ͱΊ • GoݴޠͰ͑ΔROSΫϥΠΞϯτϥΠϒϥϦΛ։ൃͨ͠ • ฏ͕ऴΘΔલʹൃදͰ͖ͯྑ͔ͬͨ
Thank you! https://github.com/akio/rosgo.git