Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ロボットシステム学2015年第12回

3,962 views

Published on

ROSについて。

Published in: Technology
  • Be the first to comment

ロボットシステム学2015年第12回

  1. 1. ロボットシステム学 第12回 上田隆一
  2. 2. 本日の内容 • ROSの概要とインストール • 経験者には裏側を説明 • 出典: – 小倉: ROSで始めるロボットプログラミング, 工学社, 2015. • かなり依存しているので、ぜひご一読を – 前川: 林原研究室 ROS勉強会 (入門編) 2015年12月16日 ロボットシステム学 2
  3. 3. セットアップ • Linux環境を準備 – 今のところUbuntu 14.04が良い • 特定のデバイスが使えない等の理由で 12.04も使われている(2015年現在) • アップデートは怖がらずにこまめに – $ sudo apt-get update – $ sudo apt-get upgrade – ただしディストリビューションのバージョンは 迂闊に上げてはいけない • ついでにvimもフルバージョンをインストール(vim使いなら) – $ sudo apt-get update vim 2015年12月16日 ロボットシステム学 3
  4. 4. 通信周りの設定 • 「通信を制すものはLinuxを制す」 • 外からssh接続できるようにしておく – ロボットに組み込むときはリモート接続できないと不便 • $ sudo apt-get install openssh-server • 鍵認証にも慣れましょう – 手順 • $ mkdir ~/.ssh • $ chmod 700 ~/.ssh • $ cat id_rsa.pub >> ~/.ssh/authorized_keys (id_rsa.pubは接続元で作成のこと) • $ chmod 600 ~/.ssh/authorized_keys 2015年12月16日 ロボットシステム学 4
  5. 5. APTにROSの情報を追加 • APTがパッケージをダウンロードするときに 参照するリスト: /etc/apt/sources.list.d/ に存在 – ここにROSのパッケージの在り処のファイルを置く • 方法 – /etc/apt/sources.list.d/ros-latest.list というファイルに次の1行 • deb http://packages.ros.org/ros/ubuntu trusty main • スペルに注意 • URLは正しければブラウザにコピペでサイトが見られます 2015年12月16日 ロボットシステム学 5
  6. 6. ROSのサイトから公開鍵を取得 • curlで鍵を取ってきてapt-keyで登録 – だいたいマニュアルだとwgetを使っているがオプションが 面倒 • 手順 – まず、curlをインストール • $ sudo apt-get install curl – 以下を打って謎のバイナリが出力されるか確認 • $ curl https://raw.githubusercontent.com/ros/rosdistro/master/ros.key – 最後に登録 • $ curl https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo apt-key add - OK <- これが出力されたらOK 2015年12月16日 ロボットシステム学 6
  7. 7. ROSのインストール • 手順 – ROS込みでパッケージをアップデート • $ sudo apt-get update – ROS本体のインストール • $ sudo apt-get install ros-indigo-desktop-full – rosdepの初期化とアップデート • rosdep: ROSのパッケージを作る時に依存するものを ダウンロード&インストールするツール • $ sudo rosdep init • $ rosdep update 2015年12月16日 ロボットシステム学 7
  8. 8. 環境変数等の設定 • .bashrcに次の一行を書き込み – source /opt/ros/indigo/setup.bash • /opt/ros/indigo/setup.bashの中身は確認しておきましょう • 反映 – $ source ~/.bashrc – あるいは一度全部の端末をexitする(こちらがオススメ) • 確認 – $ echo $CATKIN_SHELL bash <- シェルの名前が出てくる 2015年12月16日 ロボットシステム学 8
  9. 9. rosinstallのインストール • rosinstall: ソース管理のためのツール – Git等と組み合わせて使う – $ sudo apt-get install python-rosinstall 2015年12月16日 ロボットシステム学 9
  10. 10. ROSの動作確認 • $ roscore – 色々情報が出てプログラムが立ち上がる – Ctrl+cで出ましょう 2015年12月16日 ロボットシステム学 10
  11. 11. サンプルプログラムを動かす • 端末で – $ roscore • 別の端末で – ROSの動くマシンの端末で – $ rosrun turtlesim turtlesim_node – 亀のいるウィンドウが生成される • また別の端末で – $ rosrun turtlesim turtle_teleop_key – 矢印を押すと亀が動く 2015年12月16日 ロボットシステム学 11
  12. 12. サンプルから分かること • ps aux | grep ros してみる – roscoreのプロセスとrosrunで立ち上げたプログラム • プロセス間で通信しているようだ – どうやらROSは異なるプロセスを連携させる フレームワークのようだ – UNIXの基礎通り 2015年12月16日 ロボットシステム学 12
  13. 13. ROSのプロセス • 「マスタ」と「ノード」から成る • ノード: rosrunで立ち上がるアプリケーション • マスター: ノード間の通信をつかさどる – roscoreで立ち上がる – 通信はTCP/IP or UDPベースで ファイルシステムの考え方を取り入れている(後述) • UNIXらしい方法 • 共有メモリは使わない – 参考: ROSチュートリアル第二回 -- ROSの通信モデル 2015年12月16日 ロボットシステム学 13
  14. 14. マスタとノードの図示 • rqt_graphというツールで図示 – デフォルトではノードが箱で表示される – データの流れが矢印で図示される • ディレクトリの ように見えるもの = トピック 2015年12月16日 ロボットシステム学 14
  15. 15. トピック • ノード間を流れるデータの通り道 – データは「メッセージ」 • rostopicというコマンドで観察 • 下図: – rostopic...をタイプ後、turtle_teleop_keyで操作した時の出力 • rostopicもノード – rqt_graphで 確認を – 一つのトピックを 複数のノードで 2015年12月16日 ロボットシステム学 15 ueda@rosubuntuvm:~$ rostopic echo /turtle1/cmd_vel linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 ---
  16. 16. メッセージの「型」 • rostopic typeで調べられる – geometry_msgs/Twist • Vector3 linear • Vector3 angular – コマンドからメッセージを投げてみましょう • 出るときはCtrl+cで 2015年12月16日 ロボットシステム学 16 ueda@rosubuntuvm:~$ rostopic type /turtle1/cmd_vel geometry_msgs/Twist $ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -- '[1,2,3]' '[4,5,6]' $ rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist -- '[1,2,3]' '[4,5,6]'
  17. 17. サービス • トピックで受け渡しされるメッセージは投げっぱなし – ファイルに読み書きしているようなもの • サービス – 特定のノードに対してデータを渡す受け口 • ノードが提供 – コマンドの読み書きをしているようなもの • 一覧はrosservice list で 2015年12月16日 ロボットシステム学 17 ueda@rosubuntuvm:~$ rosservice list /clear /kill /reset /rosout/get_loggers /rosout/set_logger_level
  18. 18. サービスを使う • コマンドのように使う • 引数なしならサービスの名前をcallの後に • 引数を調べるときはtype – ---の上が引数、下が出力 • 引数の渡し方(右) 2015年12月16日 ロボットシステム学 18 $ rosservice call clear ueda@rosubuntuvm:~$ rosservice type spawn | rossrv show float32 x float32 y float32 theta string name --- string name $ rosservice call spawn 1 2 3 ""
  19. 19. パラメータ • システムの定数 • rosparamで操作 2015年12月16日 ロボットシステム学 19 ueda@rosubuntuvm:~$ rosparam list /background_b /background_g /background_r /rosdistro /roslaunch/uris/host_rosubuntuvm__45910 /rosversion /run_id ueda@rosubuntuvm:~$ rosparam get background_r 69 ueda@rosubuntuvm:~$ rosparam set background_g 255 ueda@rosubuntuvm:~$ rosservice call clear
  20. 20. ROSのプログラム • 基本、ROSのライブラリを読み込んでメソッドを使うだけ • ちゃんと作るにはディレクトリをROS仕様にしてから – Gitと同じような運用 2015年12月16日 ロボットシステム学 20 $ cat hell_world.py #!/usr/bin/python import rospy rospy.init_node('hell_world_node') rospy.loginfo('hell') rospy.spin()
  21. 21. ディレクトリの地ならし • 「ワークスペース」を作る • .bashrcを編集して端末を開き直す • echo $ROS_PACKAGE_PATHでパスの確認 2015年12月16日 ロボットシステム学 21 ueda@rosubuntuvm:~$ mkdir -p ~/catkin_ws/src ueda@rosubuntuvm:~$ cd ~/catkin_ws/src/ ueda@rosubuntuvm:~/catkin_ws/src$ catkin_init_wor kspace ueda@rosubuntuvm:~/catkin_ws/src$ cd .. ueda@rosubuntuvm:~/catkin_ws$ catkin_make ###こうなる### ueda@rosubuntuvm:~/catkin_ws$ ls build devel src #source /opt/ros/indigo/setup.bash <-あったら削除 source ~/catkin_ws/devel/setup.bash <- 追加
  22. 22. パッケージの準備 • 「mytest」というパッケージを作ってみましょう – catkin_create_pkg • 最初にパッケージ名、後に依存するパッケージ名 • 「roscd mytest」でパッケージの場所に移動 2015年12月16日 ロボットシステム学 22 $ cd ~/catkin_ws/src/ $ catkin_create_pkg mytest rospy roscpp std_msgs $ ls CMakeLists.txt mytest
  23. 23. コードを書く • パッケージのディレクトリ下に移動 – scriptsというディレクトリを作ってその下に コードを置くのが通常 • コードを書く – https://github.com/ryuichiueda/ros_book_programs/tree/ master/ros_start/scritps のlistner.pyとtalker.py (https://github.com/OTL/ros_book_programsからfork) 2015年12月16日 ロボットシステム学 23 $ roscd mytest $ mkdir scripts $ cd scripts/
  24. 24. 実行 • roscoreを走らせておく • scriptsディレクトリで – 別の端末で 2015年12月16日 ロボットシステム学 24 $ chmod +x *.py $ rosrun mytest talker.py $ rosrun mytest listener.py

×