SlideShare a Scribd company logo
KotlinでROSノードを
書いてみた
2015/10/04 ROS勉強会
@iwata_n
@iwata_n いわたん
ros歴2ヶ月くらい
- ROS本を読んだぐらい
ロードバイクとボルダリング
Message
このノードをKotlinで作った!
今日伝えたい事
ROSノードをKotlinで書く方法
What s Kotlin?
Why Kotlin?
Kotlinを知ってる人!
まぁそうなりますよね
What's Kotlin?
Javaと同じ仮想マシン上で動くけど、
Javaより安全
Javaより簡潔
Javaと同等に速い
らしい
あとAndroidのアプリも書けるらしい
Kotlin言語は、ジェットブレインズ社の研究所のひとつ、ロシア連邦
レニングラード州都のサンクトペテルブルクで生まれた。
ジェットブレインズ社は Java、Ruby、Python などのプログラミン
グ言語による開発環境などを開発して販売してきた。Kotlin言語は同
社が経験を活かしてJava言語をもっと簡潔、安全になるように改良し
た産業利用向け汎用言語として、2011年7月20日に発表された。
オペーレーティング・システムによらずJava仮想マシン上で動く。
Java言語が書かれたプログラムと同じほど速くコンパイルされ同じほ
ど速く動作するとしている。
Java言語に望まれている機能であっても互換性を保つために実現でき
ていない機能や、将来のJava言語の仕様で実現が予定されている機能
から、有用と思う機能を採用した。また、Java仮想マシンで動く点で
似ているスクリプト言語 Groovy や関数型プログラミング言語色の強
い Scala から、機能や簡易記法(糖衣構文)を採用した。
2012年2月14日、Kotlin はApacheライセンス バージョン2.0に基づ
詳しくはWebで!
KotlinがJavaと同じ仮想マシン上で動く
↓
それならRosJavaで動くんじゃね?
↓
じゃぁ確かめよう
Why Kotlin?
技術的な話
手順
1. RosJavaを入れる
2. RosJavaのプロジェクトを作る
3. build.gradleにkotlin関係のコードを追記する
4. kotlinでコードを書く
5. ビルド
RosJavaのインストール
http://qiita.com/iwata-n@github/items/
989bed3acc21ffb28521
$ mkdir -p /ros/myjava/src
$ cd /ros/myjava/src
$ source /opt/ros/indigo/setup.bash
$ catkin_init_workspace
$ cd ..
$ catkin_make
catkinのワークスペース作成
ROS本のP42∼の作業内容と同じです
パッケージの作成
$ cd /ros/myjava/src
$ catkin_create_rosjava_pkg <Package>
ROS本のP44∼の作業に相当します。
ただ、rosjavaでパッケージを作成するので、
コマンドが違います。
<Package>はお好きな名前で。
パッケージの作成
Created repo file: /home/ros/ros/myjava/src/kotlin/settings.gradle
Created repo file: /home/ros/ros/myjava/src/kotlin/build.gradle
Created repo file: /home/ros/ros/myjava/src/kotlin/CMakeLists.txt
Created repo file: /home/ros/ros/myjava/src/kotlin/package.xml
Creating gradle wrapper: /opt/ros/indigo/lib/python2.7/dist-packages/
rosjava_build_tools/gradle/gradlew -p /home/ros/ros/myjava/src/kotlin
wrapper
:wrapper
BUILD SUCCESSFUL
Total time: 7.033 secs
catkin_create_rosjava_pkgを実行結果
プロジェクトを作成
$ cd /ros/myjava/src/kotlin/
$ catkin_create_rosjava_project sample
Creating rosjava project
Name : sample
File : build.gradle
File : settings.gradle
File : Talker.java
File : Listener.java
File : CMakeLists.txt (gradle task update)
gradleやjavaファイル等の必要なファイルを生成してくれる
package com.github.rosjava.kotlin.sample;
/* 略 */
public class Listener extends AbstractNodeMain {
@Override public GraphName getDefaultNodeName() {
return GraphName.of("rosjava/listener");
}
@Override public void onStart(ConnectedNode connectedNode) {
final Log log = connectedNode.getLog();
Subscriber<std_msgs.String> subscriber =
connectedNode.newSubscriber("chatter", std_msgs.String._TYPE);
subscriber.addMessageListener(new MessageListener<std_msgs.String>() {
@Override public void onNewMessage(std_msgs.String message) {
log.info("I heard: "" + message.getData() + """);
}
});
}
}
ビルド
$ cd /ros/myjava
$ catkin_make
Base path: /home/ros/ros/myjava
# ... 省略
#### Running command: "make -j8 -l8" in "/home/ros/ros/myjava/build"
####
Scanning dependencies of target gradle-iwatan
[100%] Gradling tasks for kotlin
Uploading: com/github/rosjava/kotlin/sample/0.1.0/sample-0.1.0.jar to
repository remote at file:/home/ros/ros/myjava/devel/share/maven
Transferring 4K from remote
Uploaded 4K
[100%] Built target gradle-kotlin
catkinでビルドが出来るが、gradleで直接ビルドした方が速い
実行
$ cd src/<Package>/sample/build/install/sample/bin
$ ./sample com.github.rosjava.kotlin.sample.Listener
rosjavaは
ここまでで手順でOK
Kotlin化
build.gradleを編集
apply plugin: 'application'
mainClassName = 'org.ros.RosRun'
dependencies {
compile 'org.ros.rosjava_core:rosjava:[0.2,0.3)'
}
roskotlin/src/<Package>/sample/build.gradle
gradleとはざっくり言うとMakefileみたいなもの
(他にも色々機能はありますが)
追加その1
apply plugin: kotlin"
buildscript {
repositories {
mavenCentral()
maven {
url 'http://oss.sonatype.org/content/repositories/snapshots'
}
}
dependencies {
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT'
}
}
追加その2
sourceSets {
deploy
}
repositories {
mavenCentral()
maven {
url 'http://oss.sonatype.org/content/repositories/snapshots'
}
}
dependencies {
compile 'com.google.guava:guava:12.0'
compile 'org.jetbrains.kotlin:kotlin-stdlib:0.1-SNAPSHOT'
deployCompile 'com.google.guava:guava:12.0'
testCompile 'org.testng:testng:6.8'
}
test.testClassesDir = project.tasks.compileTestKotlin.destinationDir
この2つを追記すれば
Kotlinで書ける
kotlinでコードを書く
• IntelliJ IDEAを使うとプラグインでJava→Kotlinが
簡単に出来る
• IntelliJはPythonでも便利なIDEなのでオススメ
• Javaのファイルを開いて自動変換するだけ
• http://kotlinlang.org/docs/tutorials/kotlin-android.html
package com.github.rosjava.kotlin.sample;
/* 略 */
public class Listener extends AbstractNodeMain {
@Override
public GraphName getDefaultNodeName() {
return GraphName.of("rosjava/listener");
}
@Override
public void onStart(ConnectedNode connectedNode) {
final Log log = connectedNode.getLog();
Subscriber<std_msgs.String> subscriber =
connectedNode.newSubscriber("chatter", std_msgs.String._TYPE);
subscriber.addMessageListener(new MessageListener<std_msgs.String>() {
@Override
public void onNewMessage(std_msgs.String message) {
log.info("I heard: "" + message.getData() + """);
}
});
Java
package com.github.rosjava.kotlin.sample
/* 略 */
public class Listener() : AbstractNodeMain() {
override public fun getDefaultNodeName(): GraphName = GraphName.of("rosjava/listener")
override public fun onStart(connectedNode: ConnectedNode) {
val log = connectedNode.getLog()
val subscriber =
connectedNode.newSubscriber<std_msgs.String>("chatter", std_msgs.String._TYPE)
subscriber.addMessageListener { message ->
log.info("Kotlin heard: "" + message.getData() + """)
}
}
}
Kotlin
ビルド
$ cd /ros/myjava
$ catkin_make
Base path: /home/ros/ros/myjava
# ... 省略
#### Running command: "make -j8 -l8" in "/home/ros/ros/myjava/build"
####
Scanning dependencies of target gradle-kotlin
[100%] Gradling tasks for kotlin
Uploading: com/github/rosjava/kotlin/sample/0.1.0/sample-0.1.0.jar to
repository remote at file:/home/ros/ros/myjava/devel/share/maven
Transferring 4K from remote
Uploaded 4K
[100%] Built target gradle-kotlin
RosJavaと全く同じ。
実行
これまたRosJavaと全く同じ。
$ cd src/<Package>/sample/build/install/sample/bin
$ ./sample com.github.rosjava.kotlin.sample.Listener
手順おさらい
1. RosJavaを入れる
2. プロジェクトを作る
3. build.gradleにkotlin関係のコードを追記する
4. kotlinでコードを書く
5. ビルド
RosJavaと一緒
RosJavaと一緒
Kotlin化
• コードは少し簡潔になった
• Null安全で実行中にぬるぽで突然死が無い
• ノードの突然死回避→普通のExceptionでは死ぬ
• IntelliJ IDEAとROSの相性がいい事に気がつく
But…
But…
• Pythonと比べると実行までに時間がかかる
• サンプルのビルドに11秒ほど
• ハッカソンなど時間が無い時にはストレスに
まとめ
まとめ
👀Kotlinでのノード実装の方法を紹介
📗RosJavaでもROS本の知識が生きる
😖短期の開発で静的型言語は大変
😃型チェックとNullセーフは安心
おしまい
リンク
• 写真素材ぱくたそ
• https://www.pakutaso.com
• RosJavaを入れた記録
• http://qiita.com/iwata-n@github/items/989bed3acc21ffb28521
• KotlinでROSのノードを書く
• http://qiita.com/iwata-n@github/items/30eefa47326fb5b0ef77
• 今日のコード+αのGithub
• https://github.com/iwata-n/roskotlin
• KotlinのGithub
• https://github.com/JetBrains/kotlin-examples/blob/master/
gradle/hello-world/build.gradle

More Related Content

PDF
1070: CUDA プログラミング入門
PPTX
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
PPTX
Java version 11 - les 9 nouveautes
PDF
機械学習・ディープラーニング、ITの実装スキル学ぶ方法(と私の場合)
PDF
Finding connections among images using CycleGAN
PDF
高速な倍精度指数関数expの実装
PPTX
ゲーム体験を支える強化学習の実応用について
PDF
Media ServicesとAIを利用した字幕付きライブ配信
1070: CUDA プログラミング入門
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Java version 11 - les 9 nouveautes
機械学習・ディープラーニング、ITの実装スキル学ぶ方法(と私の場合)
Finding connections among images using CycleGAN
高速な倍精度指数関数expの実装
ゲーム体験を支える強化学習の実応用について
Media ServicesとAIを利用した字幕付きライブ配信

What's hot (20)

PDF
Kaggleのテクニック
PDF
TensorRT Inference Serverではじめる、 高性能な推論サーバ構築
PPTX
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
PDF
[DL輪読会]Deep Reinforcement Learning that Matters
PPTX
BoostAsioで可読性を求めるのは間違っているだろうか
PDF
Volumetric Lighting for Many Lights in Lords of the Fallen
PDF
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
PDF
Precomputed Voxelized-Shadows for Large-scale Scene and Many lights
PDF
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
PDF
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
PDF
SPU Optimizations-part 1
PDF
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
PDF
最近のSingle Shot系の物体検出のアーキテクチャまとめ
PDF
モデルではなく、データセットを蒸留する
PDF
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
PDF
【DL輪読会】Mastering Diverse Domains through World Models
PDF
関数型プログラミング入門 with OCaml
PDF
【DL輪読会】Deep Transformers without Shortcuts: Modifying Self-attention for Fait...
PDF
[Review] BoxInst: High-Performance Instance Segmentation with Box Annotations...
PPTX
[DL輪読会]World Models
Kaggleのテクニック
TensorRT Inference Serverではじめる、 高性能な推論サーバ構築
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
[DL輪読会]Deep Reinforcement Learning that Matters
BoostAsioで可読性を求めるのは間違っているだろうか
Volumetric Lighting for Many Lights in Lords of the Fallen
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
Precomputed Voxelized-Shadows for Large-scale Scene and Many lights
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
SPU Optimizations-part 1
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
最近のSingle Shot系の物体検出のアーキテクチャまとめ
モデルではなく、データセットを蒸留する
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
【DL輪読会】Mastering Diverse Domains through World Models
関数型プログラミング入門 with OCaml
【DL輪読会】Deep Transformers without Shortcuts: Modifying Self-attention for Fait...
[Review] BoxInst: High-Performance Instance Segmentation with Box Annotations...
[DL輪読会]World Models
Ad

Viewers also liked (20)

PDF
生活支援ロボットMini@ROS勉強会
PDF
Pepper meets ROS
ODP
EusLispでロボットプログラミング
PDF
ROS2.0時代に備えたc++11/14
PDF
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
PDF
SIerアーキテクト視点でみたKotlinの紹介
PPTX
Dronecodeの概要とROSの対応について
ODP
Hacking Robotics(English Version)
PDF
kotlinについて
PPTX
PDF
Kotlinで快適Android開発 #W8lt
PDF
もう一度Kotlinの話をしよう #ndsmeetup4
PDF
Kotlinあるある言いたい
PDF
Kotlinでマッチョする話
PDF
UnityでC#6.0が使える未来がそろそろ来そう!
PDF
Kotlin: Why Do You Care?
PDF
普段C#を使っている僕から見たKotlin
PDF
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
PDF
Kotlinソースコード探訪
PDF
Android学ぶを君へ。生き抜くためのナレッジ共有
生活支援ロボットMini@ROS勉強会
Pepper meets ROS
EusLispでロボットプログラミング
ROS2.0時代に備えたc++11/14
明日からちょっと KotlinでAndroidが書きたくなる(かもしれない?)SAM変換と拡張関数
SIerアーキテクト視点でみたKotlinの紹介
Dronecodeの概要とROSの対応について
Hacking Robotics(English Version)
kotlinについて
Kotlinで快適Android開発 #W8lt
もう一度Kotlinの話をしよう #ndsmeetup4
Kotlinあるある言いたい
Kotlinでマッチョする話
UnityでC#6.0が使える未来がそろそろ来そう!
Kotlin: Why Do You Care?
普段C#を使っている僕から見たKotlin
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
Kotlinソースコード探訪
Android学ぶを君へ。生き抜くためのナレッジ共有
Ad

Similar to KotlinでROSノードを書いてみた (20)

PDF
Kotlinのwebフレームワーク探訪
PDF
IntelliJ IDEAとKotlinで作るSpring 5アプリケーション
PDF
Gws 20120521 gradle
PDF
Gradle handson
PDF
SDLoader SeasarCon 2009 Whire
PDF
Introduction of Rhodes
PPTX
AKS (k8s) Hands on Lab Contents
PDF
scala-kaigi1-sbt
PDF
Groovy base gradle_20130309
PPTX
Appsody でnodejsのアプリを立ち上げよう!
PDF
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
PDF
Scalaでのプログラム開発
PPTX
Ruby on Rails を用いたWEBアプリケーションの開発
PDF
Line Creators Studio Android With Kotlin
PDF
Docker for Windows & Web Apps for Containers 実践活用技法
PDF
Kotlinことはじめ -まずは触って動かしてみよう-
PDF
All I learned while working on a Scala OSS project for over six years #ScalaM...
PDF
Driverについて
PDF
クラウドカンファレンスIn静岡 r cloud
PDF
RでつくるWebアプリ~rApache編~
Kotlinのwebフレームワーク探訪
IntelliJ IDEAとKotlinで作るSpring 5アプリケーション
Gws 20120521 gradle
Gradle handson
SDLoader SeasarCon 2009 Whire
Introduction of Rhodes
AKS (k8s) Hands on Lab Contents
scala-kaigi1-sbt
Groovy base gradle_20130309
Appsody でnodejsのアプリを立ち上げよう!
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
Scalaでのプログラム開発
Ruby on Rails を用いたWEBアプリケーションの開発
Line Creators Studio Android With Kotlin
Docker for Windows & Web Apps for Containers 実践活用技法
Kotlinことはじめ -まずは触って動かしてみよう-
All I learned while working on a Scala OSS project for over six years #ScalaM...
Driverについて
クラウドカンファレンスIn静岡 r cloud
RでつくるWebアプリ~rApache編~

KotlinでROSノードを書いてみた