SlideShare a Scribd company logo
1 of 34
ROS+GitHub+test
千葉工業大学 上田隆一
今日の内容
• ロボット(実機)でROSを扱う
• ROSだけではなく次のものも扱う
– GitHub
– Travis CI(CIツール)
2018年6月3日 ROS講習会@ROBOMECH2018 2
ROSとインターネット上のサービス
• ROSを使うときに以外に引っかかる人がいる事実
– インストールしたからってロボットが賢くなるわけではない
– 独立したソフトウェアだがインターネット上の
様々なサービスと連携しないと効果が薄い
• インターネットとのやりとりの例
– APTを使ってパッケージをインストール
– GitHubからパッケージをインストール
– GitHubでパッケージを公開
2018年6月3日 ROS講習会@ROBOMECH2018 3
テストはどうでしょう?
• テストを書いたことはありますか?
• ソフトウェアの世界ではテストすら
インターネット上のサービスで
• 本日のテーマ: ロボットでどうやるんだ
– ハードがないのにテストできるのか?
2018年6月3日 ROS講習会@ROBOMECH2018 4
テスト入門
2018年6月3日 ROS講習会@ROBOMECH2018 5
テスト入門
• ここでやるのは「ユニットテスト」(単体テスト)
– プログラム中で入出力が起こる各部分で
入出力が正しいか確認
2018年6月3日 ROS講習会@ROBOMECH2018 6
原始的なテスト
• 次のようなplus.pyを作りましょう(ライブラリとして記述)
• 別のプログラムから呼び出します
• ライブラリplus.pyのテストを書きましょう
2018年6月3日 ROS講習会@ROBOMECH2018 7
#!/usr/bin/env python
def plus(a,b):
returna + b
#!/usr/bin/env python
from plus import plus
print(plus(1,2))
テスト
• 一般的に
終了ステータスを利用
– プログラムを実行後、
echo $?で調査
• Pythonの場合
– sys.exit
• sys.exit(0): 正常
• sys.exit(0でない数字):
何らかの異常
– モジュールの場合、
if __name__ ...
の下に書くことが可能
2018年6月3日 ROS講習会@ROBOMECH2018 8
#!/usr/bin/env python
def plus(a,b):
return a + b
if __name__ =='__main__':
importsys
ifplus(1,2) !=3:
sys.exit(1)
ifplus(1.1,2.2) <3.299999 orplus(1.1,2.2) > 3.300001:
sys.exit(2)
ifplus("abc","def") !="abcdef":
sys.exit(3)
sys.exit(0)
unittestを使う
• unittest: Pythonのユニットテストフレームワーク
2018年6月3日 ROS講習会@ROBOMECH2018 9
#!/usr/bin/envpython
importunittest
fromplusimportplus
classTestPlus(unittest.TestCase): # unittestクラスからTestPlusを派生
deftest_int(self): #テスト用のメソッドはtest_...と書く
self.assertEqual(plus(1,2),3,"erroron int")
deftest_float(self):
self.assertTrue(3.299999<plus(1.1,2.2)<3.300001,"erroronfloat")
deftest_str(self):
self.assertEqual(plus("ab","cd"),"abcd", "erroronstr")
unittest.main() #unittestのmainメソッドを呼ぶ
unittestの出力
• 右: テストにパス
• 下: エラー
2018年6月3日 ROS講習会@ROBOMECH2018 10
ueda@remote:~/tmp$./test_plus.py
...
--------------------------------------------Ran 3testsin0.000s
OK
ueda@remote:~/tmp$./test_plus.py
..F
======================================================================
FAIL:test_str(__main__.TestPlus)
----------------------------------------------------------------------
Traceback(mostrecentcall last):
File "./test_plus.py",line15, in test_str
self.assertEqual(plus("a","cd"),"abcd", "erroron str")
AssertionError:erroronstr
----------------------------------------------------------------------
Ran3testsin 0.000s
FAILED(failures=1)
ueda@remote:~/tmp$echo $?
1 #終了ステータスでも成否がわかるようになっている(自動化のため)
GitHub + Travis CI
• CI(continuous integration、継続的インテグレーション)サービス
– コードを常に改善しながらシステムに反映するためのもの
– 機能: コードをテストしてから本番投入(デプロイ)
– 今回はTravis CIを使います
• 他の方が良いかもしれませんが今回はこれで
• GitHubへコードを公開するとテストが走るように設定
2018年6月3日 ROS講習会@ROBOMECH2018 11
今のテストをTravis CI上で実行
• まず、GitHubにリポジトリを作る
– テストのテストリポジトリなので「testtest」としましょう
– 今までラズパイで書いたコードをtesttestディレクトリに置く
• Plus.py, main.py, test_plus.py
– GitHubにプッシュ
• 次のページのように操作
– Travis CIと連携
• 次々ページのように操作
2018年6月3日 ROS講習会@ROBOMECH2018 12
GitHubの操作
2018年6月3日 ROS講習会@ROBOMECH2018 13
ueda@remote:~/tmp/testtest$ git init #ローカルリポジトリ初期化
Initialized empty Git repository in /home/ueda/tmp/testtest/.git/
ueda@remote:~/tmp/testtest$ git add-A #ステージング
ueda@remote:~/tmp/testtest$ git commit -m “Addfiles” #コミット
[master (root-commit) 8f04172] Addfiles
3 files changed, 40 insertions(+)
create mode 100755 main.py
create mode 100755 plus.py
create mode 100755 test_plus.py
ueda@remote:~/tmp/testtest$ git remote add origin #次の行も続けて
https://github.com/ユーザ名/testtest
ueda@remote:~/tmp/testtest$ git push originmaster #プッシュ
(略。IDとパスワードを聞かれる。)
*[new branch] master -> master
Travis CIの設定
• Sign in with GitHubを押してサインイン
• 右上のユーザのアイコンを押してProfileに行く
• 「testtest」のスイッチをONに
• リポジトリに.travis.ymlというファイルを置く
– 中身は次の1行
• push
2018年6月3日 ROS講習会@ROBOMECH2018 14
ueda@remote:~/tmp/testtest$ git add -A
ueda@remote:~/tmp/testtest$ git commit -m"Add .travis.yml"
(略)
ueda@remote:~/tmp/testtest$ git push origin master
(略)
8f04172..6646392 master ->master
script: ./test_plus.py
テストの実行
• Travis CIの画面でしばらく待っているとテストが走る
2018年6月3日 ROS講習会@ROBOMECH2018 15
GitHub上にテスト結果を表示
• Travis CIの「build passing」と書いたアイコンを押す
• Markdownを選択して下のコードをコピー
• コピーしたコードを
README.mdにコピー
– README.mdは
リポジトリのディレクトリ
直下に作成しましょう
• GitHubのリポジトリにテストの
合否が表示される
2018年6月3日 ROS講習会@ROBOMECH2018 16
ROS上でのテスト
2018年6月3日 ROS講習会@ROBOMECH2018 17
やること
• ryuichiueda/raspimouse_ros_2 をfork
• ラズパイマウスにclone
• ロボットの動作確認
• ロボット上でテスト
• Travis CI上でテスト
2018年6月3日 ROS講習会@ROBOMECH2018 18
リポジトリのforkとクローン
• Forkボタンを押して自分のアカウントにコピー
• その後、自分のリポジトリで~/catkin_wr/src下にクローン
– Clone or downloadボタンを押してhttpsのURIをコピー
2018年6月3日 ROS講習会@ROBOMECH2018 19
ubuntu@ubuntu:~/catkin_ws/src$ git clone https://github.com/自分のアカウント/raspimouse_ros_2.git
ロボットの動作確認(デバイスドライバ)
• デバイスドライバのセット
• デバイスドライバの動作確認
2018年6月3日 ROS講習会@ROBOMECH2018 20
ubuntu@ubuntu:~$cd ~/RaspberryPiMouse/src/drivers/
ubuntu@ubuntu:~/RaspberryPiMouse/src/drivers$sudo insmod
###距離センサ###
ubuntu@ubuntu:~$cat /dev/rtlightsensor0
211292312
###モータ###
ubuntu@ubuntu:~$echo 5005001000> /dev/rtmotor0
ロボットの動作確認(ROS)
• ビルド
• 起動
• 「トピック」を使ってセンサ値を読み出し
2018年6月3日 ROS講習会@ROBOMECH2018 21
ubuntu@ubuntu:~/catkin_ws$sudo apt install ros-kinetic-tf
ubuntu@ubuntu:~/catkin_ws$sudo apt install ros-kinetic-tf2-ros
ubuntu@ubuntu:~$cd ~/catkin_ws/
ubuntu@ubuntu:~/catkin_ws$catkin_make
ubuntu@ubuntu:~/catkin_ws$source ~/.bashrc
ubuntu@ubuntu:~/catkin_ws$roslaunch raspimouse_ros_2 raspimouse.launch
ubuntu@ubuntu:~$ rostopic echo /lightsensors
right_forward:0
right_side: 0
left_side: 0
...
ロボットの動作確認(ROS, 続き)
• 「サービス」、「トピック」を使ってモータを動かす
2018年6月3日 ROS講習会@ROBOMECH2018 22
ubuntu@ubuntu:~$ rosservice call /motor_on
success: True
message: "ON"
ubuntu@ubuntu:~$ rostopic pub/cmd_vel geometry_msgs/Twist "linear:
x:0.2
y:0.0
z:0.0
angular:
x:0.0
y:0.0
z:0.0"
publishing andlatching message. Press ctrl-C to terminate
^Cubuntu@ubuntu:~$ #Ctrl+Cで止める(1秒後にモータ停止)
ubuntu@ubuntu:~$ rosservice call /motor_off
success: True
message: "OFF"
ROSとデバイスドライバ
• ROS上で動くプログラム(ノード)がトピック、
• サービスを通じて別のノードから要求を受け、
デバイスドライバに書き込む
• なんでこんな2重構造になっているか
– 変換・抽象化
• 例: モータ: 速度・角速度からステップモータの周波数へ
– ROSを使うと他のROSパッケージが使える
– ROSを使わなくても良い
2018年6月3日 ROS講習会@ROBOMECH2018 23
ロボットのテスト
• なるべくロボットを動かさずに入出力を確認
• デバイスドライバに値を書き込むと読めないので
普通のファイルに置き換えてテスト
2018年6月3日 ROS講習会@ROBOMECH2018 24
###こいつらを普通のファイルに置き換え###
ubuntu@ubuntu:~$ ls /dev/rt*
/dev/rtbuzzer0 /dev/rtled0 /dev/rtlightsensor0 /dev/rtmotoren0
/dev/rtcounter0 /dev/rtled1 /dev/rtmotor0 /dev/rtswitch0
/dev/rtcounter_l0 /dev/rtled2 /dev/rtmotor_raw_l0 /dev/rtswitch1
/dev/rtcounter_r0 /dev/rtled3 /dev/rtmotor_raw_r0 /dev/rtswitch2
###再起動すると消えます###
ubuntu@ubuntu:~$ reboot
ロボットのテスト(続き)
• ダミーファイルを作る
• raspimouse_ros_2のノードを立ち上げて読めるか確認
2018年6月3日 ROS講習会@ROBOMECH2018 25
ubuntu@ubuntu:~$echo 12 3 4| sudo tee /dev/rtlightsensor0
1 2 34
ubuntu@ubuntu:~$cat /dev/rtlightsensor0
1 2 34
ubuntu@ubuntu:~$rostopic echo /lightsensors
right_forward: 1
right_side: 2
left_side: 3
left_forward: 4
sum_all: 10
sum_forward: 5
---
ROSを使ったテスト
• まず、一通りダミーファイルを作る
2018年6月3日 ROS講習会@ROBOMECH2018 26
### スクリプトがパッケージに準備されてます ###
ubuntu@ubuntu:~/catkin_ws/src/raspimouse_ros_2$ cat test/travis_prepare_dummy_files.bash
#!/bin/bash -xve
sudo touch /dev/rt{buzzer,motor,motoren,motor_raw_{l,r}}0
sudo chmod 666/dev/rt{buzzer,motor,motoren,motor_raw_{l,r}}0
echo "0000" | sudo tee /dev/rtlightsensor0
sudo chmod 666/dev/rtlightsensor0
echo "0"| sudo tee /dev/rtswitch{0,1,2}
sudo chmod 666/dev/rtswitch{0,1,2}
### 実行 ###
ubuntu@ubuntu:~/catkin_ws/src/raspimouse_ros_2$ ./test/travis_prepare_dummy_files.bash
テストスクリプト
• 例: パッケージのtest/travis_test_lightsensors.py
• コードの主要な部分
– Lightsensorsトピックにデータを送るオブジェクト
(サブスクライバ)を作成
– Unittestのassert...を利用している部分
2018年6月3日 ROS講習会@ROBOMECH2018 27
9 def setUp(self):
10 self.count =0
11 rospy.Subscriber('/lightsensors', LightSensorValues, self.callback)
12 self.values =LightSensorValues()
18 def check_values(self,lf,ls,rs,rf):
19 vs =self.values
20 self.assertEqual(vs.left_forward, lf,“different value: left_forward”)# unittestのasserEqualを利用
21 ...
テストスクリプト(続き)
– テストを実行するメソッド
2018年6月3日 ROS講習会@ROBOMECH2018 28
31 def test_get_value(self):
32 (略)
33 (略)
34 with open(“/dev/rtlightsensor0”,“w”) asf:#ダミーの値の書込
35 f.write("-1 0 123 4321n")
36
37 time.sleep(3)
38 ###コールバック関数が最低1回は呼ばれ、値が取得できているかを確認###
39 self.assertFalse(self.count ==0,“cannot ...
40 self.check_values(4321,123,0,-1) #値の確認
ROSでのテストの実行
• launchファイル
– ノードを一斉に立ち上げるための設定を書いたファイル
– パッケージのlaunchディレクトリにはロボットを動作させる
ためのlaunchファイルとテスト用のlaunchファイルが存在
• 特に分ける必要はないが事情により
2018年6月3日 ROS講習会@ROBOMECH2018 29
ubuntu@ubuntu:~/catkin_ws/src/raspimouse_ros_2$ ls launch/
raspimouse.launch test.launch
ubuntu@ubuntu:~/catkin_ws/src/raspimouse_ros_2$ cat launch/test.launch
<launch>
<node pkg="raspimouse_ros_2" name="buzzer" type="buzzer.py" required="true" />
(略)
<test test-name="test_buzzer" pkg="raspimouse_ros_2"
(略)
</launch>
ROSでのテストの実行(続き)
2018年6月3日 ROS講習会@ROBOMECH2018 30
ubuntu@ubuntu:~$ rostest raspimouse_ros_2 test.launch
...
[ROSTEST]-----------------------------------------------------------------------
(略)
[raspimouse_ros_2.rosunit-test_motors/test_put_freq][passed]
[raspimouse_ros_2.rosunit-test_motors/test_put_value_timed][passed]
SUMMARY
*RESULT: SUCCESS
*TESTS: 11
*ERRORS: 0
*FAILURES: 0
rostest log fileis in /home/ubuntu/.ros/log/rostest-ubuntu-5841.log
Travis CIでのテスト
• 毎回ROSをセットアップしてからテスト
– Dockerで手間を減らせそうですが試してません
– 下図: パッケージ内の.travis.yml
2018年6月3日 ROS講習会@ROBOMECH2018 31
1 sudo: required
2 dist: trusty
3 install:
4 - bash -xve ./test/travis_ros_install.bash
5 - source ~/catkin_ws/devel/setup.bash
6 before_script:
7 - bash -xve ./test/travis_package_make.bash
8 - source ~/catkin_ws/devel/setup.bash
9 - bash -xve ./test/travis_prepare_dummy_files.bash
10 script:
11 - rostest raspimouse_ros_2 test.launch
Travis CIでテストしてみましょう
• Travis CIでforkしたraspimouse_ros_2を監視対象に
• あとは少しリポジトリをいじってpush
2018年6月3日 ROS講習会@ROBOMECH2018 32
この後の課題
• 自分でテストを書いてみる
• ラズパイマウスで遊ぶ
2018年6月3日 ROS講習会@ROBOMECH2018 33
参考資料
• ROS Wiki
– http://wiki.ros.org/action/show/Quality/Tutorials/UnitTesting
– http://wiki.ros.org/CIs
• 上田: Raspberry Piで学ぶ ROSロボット入門, 日経BP,
2017
– テストを扱ってます
2018年6月3日 ROS講習会@ROBOMECH2018 34

More Related Content

What's hot

設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
Takuya Sato
 

What's hot (20)

世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
The only one big thing every programmer should know
The only one big thing every programmer should knowThe only one big thing every programmer should know
The only one big thing every programmer should know
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門 【学習メモ#7th】12ステップで作る組込みOS自作入門
【学習メモ#7th】12ステップで作る組込みOS自作入門
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについてeBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
 
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
 
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
02 第3.1節-第3.5節 ROS2の基本機能(1/2) ROS2勉強合宿 @別府温泉
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
今さら聞けないDiとspring
今さら聞けないDiとspring今さら聞けないDiとspring
今さら聞けないDiとspring
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外設計と実装で 抑えておきたい サービスクラスと例外
設計と実装で 抑えておきたい サービスクラスと例外
 

Similar to ROSチュートリアル ROBOMECH2018

IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Hideki Takase
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
Daiki Maekawa
 

Similar to ROSチュートリアル ROBOMECH2018 (20)

IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
 
Rancher と GitLab を使う3つの理由
Rancher と GitLab を使う3つの理由Rancher と GitLab を使う3つの理由
Rancher と GitLab を使う3つの理由
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
 
BotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミングBotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミング
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
 
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
Turtlebot3とrealsenseで作るお手軽移動ロボットros japan ug #23 関西勉強会
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5
 
ネットワークAPI のあれこれ (ENOG37)
ネットワークAPI のあれこれ (ENOG37)ネットワークAPI のあれこれ (ENOG37)
ネットワークAPI のあれこれ (ENOG37)
 
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
 
補足 : LOOLのビルドについて
補足 : LOOLのビルドについて補足 : LOOLのビルドについて
補足 : LOOLのビルドについて
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
hubotで快適BOT生活
hubotで快適BOT生活 hubotで快適BOT生活
hubotで快適BOT生活
 
LibreOfficeとモバイルデバイス
LibreOfficeとモバイルデバイスLibreOfficeとモバイルデバイス
LibreOfficeとモバイルデバイス
 
ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)
ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)
ロボット・ソフトウェア開発環境ROSとは何か? (in Japanese)
 
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
Mautic Meetup Tokyo #3 データベース不要CMS:Gravの紹介
 
広島IT勉強会カレンダー(仮)はRubyを使っています
広島IT勉強会カレンダー(仮)はRubyを使っています広島IT勉強会カレンダー(仮)はRubyを使っています
広島IT勉強会カレンダー(仮)はRubyを使っています
 
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
 

More from Ryuichi Ueda

2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド
2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド
2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド
Ryuichi Ueda
 

More from Ryuichi Ueda (20)

第27回ロボティクスシンポジアスライド
第27回ロボティクスシンポジアスライド第27回ロボティクスシンポジアスライド
第27回ロボティクスシンポジアスライド
 
シェル・ワンライナー160本ノック
シェル・ワンライナー160本ノックシェル・ワンライナー160本ノック
シェル・ワンライナー160本ノック
 
日本ロボット学会第139回ロボット工学セミナー
日本ロボット学会第139回ロボット工学セミナー日本ロボット学会第139回ロボット工学セミナー
日本ロボット学会第139回ロボット工学セミナー
 
シェル芸勉強会と会場の話
シェル芸勉強会と会場の話シェル芸勉強会と会場の話
シェル芸勉強会と会場の話
 
移動ロボットのナビゲーション
移動ロボットのナビゲーション移動ロボットのナビゲーション
移動ロボットのナビゲーション
 
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
 
第45回シェル芸勉強会オープニングスライド
第45回シェル芸勉強会オープニングスライド第45回シェル芸勉強会オープニングスライド
第45回シェル芸勉強会オープニングスライド
 
bash(の変な使い方)update
bash(の変な使い方)updatebash(の変な使い方)update
bash(の変な使い方)update
 
第41回シェル芸勉強会 午後オープニング
第41回シェル芸勉強会 午後オープニング第41回シェル芸勉強会 午後オープニング
第41回シェル芸勉強会 午後オープニング
 
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
 
20181113_子ども夢ロボット&トーク
20181113_子ども夢ロボット&トーク20181113_子ども夢ロボット&トーク
20181113_子ども夢ロボット&トーク
 
第37回シェル芸勉強会イントロ
第37回シェル芸勉強会イントロ第37回シェル芸勉強会イントロ
第37回シェル芸勉強会イントロ
 
シェル芸勉強会にみる、コミュニティを通じたIT学習
シェル芸勉強会にみる、コミュニティを通じたIT学習シェル芸勉強会にみる、コミュニティを通じたIT学習
シェル芸勉強会にみる、コミュニティを通じたIT学習
 
poster of PFoE used in ICRA 2018
poster of PFoE used in ICRA 2018poster of PFoE used in ICRA 2018
poster of PFoE used in ICRA 2018
 
Robot frontier lesson3 2018
Robot frontier lesson3 2018Robot frontier lesson3 2018
Robot frontier lesson3 2018
 
Robot frontier lesson2 2018
Robot frontier lesson2 2018Robot frontier lesson2 2018
Robot frontier lesson2 2018
 
Robot frontier lesson1 2018
Robot frontier lesson1 2018Robot frontier lesson1 2018
Robot frontier lesson1 2018
 
第34回シェル芸勉強会
第34回シェル芸勉強会第34回シェル芸勉強会
第34回シェル芸勉強会
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
 
2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド
2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド
2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド
 

Recently uploaded

Recently uploaded (12)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

ROSチュートリアル ROBOMECH2018