O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

4.049 visualizações

Publicada em

ROSについて。

Publicada em: Tecnologia
  • Seja o primeiro a comentar

ロボットシステム学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

×