2014年11月30日日曜日

7.1 単位系と座標系

7. 移動ロボットを動かす
7.1 単位系および座標系

座標系

ROSではいわゆる「右手座標系」が使われています。

z座標の回転は「反時計回りが正」「時計回りが負」の値になります。

単位系

直進方向の速度は メートル・毎秒[ m / sec]
回転方向の速度は ラジアン・毎秒[ rad / sec]

2014年11月22日土曜日

6.3 独自ロボットをシミュレータで試す

手元にはKobukiがベースのTurtlebot2があったので、Arbotixシミュレータで動かしてみました。
これです→

~/catkin_ws/src/rbx1/rbx1_bringup/launch ディレクトリにある、fake_turtlebot.launchをTurtlebot2 用に修正します。
$roscd rbx1_bringup/launch
あるいは
$cd ~/catkin_ws/src/rbx1/rbx1_bringup/launch
どちらでも同じです。
$cp fake_turtlebot.launch fake_turtlebot2.launch
ここで、fake_turtlebot2.launch を以下のように修正します。

<launch>
  <param name="/use_sim_time" value="false" />

  <!-- Load the URDF/Xacro model of our robot -->
  <arg name="urdf_file" default="$(find xacro)/xacro.py '$(find turtlebot_description)/robots/kobuki_hexagons_kinect.urdf.xacro'" />

  <param name="robot_description" command="$(arg urdf_file)" />

  <node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
      <rosparam command="delete" param="/arbotix" />
      <rosparam file="$(find rbx1_bringup)/config/fake_turtlebot2_arbotix.yaml" command="load" />
      <param name="sim" value="true"/>
  </node>

  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher">
      <param name="publish_frequency" type="double" value="20.0" />
  </node>
</launch>

先々の為に、
<rosparam file="$(find rbx1_bringup)/config/fake_turtlebot_arbotix.yaml" command="load" />
<rosparam file="$(find rbx1_bringup)/config/fake_turtlebot2_arbotix.yaml" command="load" />
このように修正して。
cp $(find rbx1_bringup)/config/turtlebot_arbotix.yaml $(find rbx1_bringup)/config/fake_turtlebot2_arbotix.yaml
のようにコピーしておく。いまのところ中身はそのままです。

これでTurtlebot2がシミュレータで使えます。
$roslaunch rbx1_bringup fake_turtlebot2.launch
可視化ツールのrvizで表示します
$rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz
$rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'
同じように、これで動きます。
真上からなので解りにくいですけど、Turtlebot2になりました。

2014年11月21日金曜日

6.2 Arbotixシミュレータのテスト

いよいよシミュレータでロボットを動かします。
ROS by ExampleのサンプルはTurtlebotです。

一つ目のTerminalを開いて、roscore を実行します。この本では、 各章のサンプルでコマンドをコピペすれば動くのですが、roscoreを実行しなければいけないことを説明していないので注意して下さい。

(注意)Terminalを開いたら、以下のコマンドを忘れないで下さい。
ターミナルウィンドウは Ctrl+Alt+t キーで開きます。

$ cd ~/catkin_ws
$ source devel/setup.bash
 一つ目のTerminalで
$ roscore
二つ目のTerminalで
$roslaunch rbx1_bringup fake_turtlebot.launch
もし別のロボット(Pi Robot)で実行したいなら、二つ目のTerminalで
$roslaunch rbx1_bringup fake_pi_robot.launch
可視化ツールのrvizで表示します
$rosrun rviz rviz -d `rospack find rbx1_nav`/sim.rviz

ここまでで、Arbotixシミュレータが起動し、指定したロボットが rvizで表示されていると思います。
次に、シミュレータ上のロボットを動かします。
三つ目のTerminalで以下のコマンドを入力して下さい。
$rostopic pub -r 10 /cmd_vel geometry_msgs/Twist '{linear: {x: 0.2, y: 0, z: 0}, angular: {x: 0, y: 0, z: 0.5}}'
少し長いコマンドですが、スペースの部分でタブキーを押すと以下の候補が表示されるので、入力が楽になります。


ロボットを止めるには以下のコマンドを入力します。
$rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}'
ここでロボットを動かした rostopic コマンドは、指定したトピックにメッセージをパブリッシュするコマンドで頻繁に使うコマンドです。
詳しくは、後ほど説明しようと思います。

ここでは、「/cmd_vel  というトピックに geometry_msgs/Twist  という型のメッセージを送るとロボットが動く」、と覚えておいてください。


2014年11月20日木曜日

6. ARBOTIX  シミュレータのインストールとテスト

6.1 Arbotixシミュレータのインストール
$sudo apt-get install ros-hydro-arbotix-*
$rospack profile
6.2 シミュレータのテスト
下記のコマンドにより、Arbotixシミュレータのテストを行って下さい。

その前に!!!

GazeboやRvizなどの表示系のプログラムとディスプレイドライバの不具合が報告されています。
特に、私のように仮想マシンを使っているとGazeboやRvizが動かない場合が多いようです。
詳しい人が皆さん苦労して、解決方法を探っていますが決定版はありません。
ディスプレイドライバを最新にするとか…
で、*経験的*に以下の二つを実行するとエラーになる確率が減るようです。

mesa-utils をインストールする。
何故かうまく行く様になることが多いです。何故でしょう???
sudo apt-get install mesa-utils

さらに、VMware などの仮想環境をお使いの方は、
「表示」メニューで「シングルウィンドウ」では無く「フルスクリーン」にする。
シングルウィンドウの場合も、出来るだけ大きな画面にドラッグしておく。
画面の解像度も出来るだけ高解像度にしておく。

私の環境では、この二つに注意したところ今のところ問題なくGazeboやRvizが使えています。

ということで、もう一度、Arbotixシミュレータのテストです。
別の記事に書きます…

2014年11月13日木曜日

5. ROS by Exampleのサンプルプログラムを実行するための準備

5.1 必要なROSパッケージをインストールします。

$ sudo apt-get install ros-hydro-turtlebot-* \ros-hydro-openni-camera ros-hydro-openni-launch \ros-hydro-openni-tracker ros-hydro-laser-* \
ros-hydro-audio-common ros-hydro-joystick-drivers \
ros-hydro-orocos-kdl ros-hydro-python-orocos-kdl \ros-hydro-dynamixel-motor-* ros-hydro-pocketsphinx \gstreamer0.10-pocketsphinx python-setuptools python-rosinstall \
ros-hydro-opencv2 ros-hydro-vision-opencv \
ros-hydro-depthimage-to-laserscan ros-hydro-arbotix-* \
git subversion mercurial
これで一気にインストールできるはずです。

5.2 サンプルプログラムのダウンロード
以下のコマンドでgitリポジトリからROS by Exampleのプログラムをダウンロードします。以下のコマンドを順番に実行して下さい。
$cd ~/catkin_ws/src
$git clone https://github.com/pirobot/rbx1.git
$cd rbx1
$git checkout hydro-devel
$cd ~/catkin_ws
$catkin_make
$source ~/catkin_ws/devel/setup.bash




2014年11月12日水曜日

4.12 実機ロボットと制御用PCとのネットワーク

この章は大事です。
ROSではネットワークに接続された複数のPCで分散してプログラムを実行することができます。
そのため、各PCで時刻が揃っていることが必要です。マスタとクライアントのPCで時刻がズレていて思わぬ不具合が生じる例もあります。

4.12.1で説明している時刻の同期は必ず行って下さい。

4.12.1 時刻を同期するツールの chrony  をインストールする
$ sudo apt-get install chrony
再起動するとchronyデーモンが実行され、インターネット上のサーバから正確な時刻を取得します。

この本のサンプルを一台のPCで実行する場合は以降の設定は必要ありません。
5章まで一気に飛んで下さい。
ロボット内蔵のPCと制御用のPCを繋いで実行する場合など、ネットワーク経由でROSを使う場合の設定は別の記事に書きます。

2014年11月4日火曜日

4.3 CatkinによるROSパッケージの作成

このページをよく読んで、ワークスペースの概要を学んで下さい。
次に下記のコマンドでパッケージを管理するワークスペースを作って下さい。

$ source /opt/ros/hydro/setup.bash
ホームディレクトリの直下に catkin_ws という名前でワークスペースを作ります
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace

ワークスペースをビルドします
$ cd ~/catkin_ws/
$ catkin_make

新しい端末を開く度に以下のコマンド実行してください
$ cd ~/catkin_ws
$ source devel/setup.bash


これは少し面倒なので、.bashrc  を変更するのが便利です。
  • $ vi ~/.bashrc
~/.bashrc の最後に以下の一行を加えておく
  • source ~/catkin_ws/devel/setup.bash

2014年11月3日月曜日

4.1 ROSのインストール

ROSのバージョンはHydroです。
インストールのページを見て、以下の順番にコマンドを実行すればほぼ失敗なくインストールができます。
日本語のチュートリアルには「Ubuntuレポジトリを構成する」という項目がありますが、今回は必要ありません。

  • 新しい端末を開く度に以下のコマンド実行してください
    $ cd ~/catkin_ws
    $ source devel/setup.bash

これは少し面倒なので、.bashrc  を変更するのが便利です。
  • $ vi ~/.bashrc
~/.bashrc の最後に以下の一行を加えておく
  • source /opt/ros/hydro/setup.bash
    source ~/catkin_ws/devel/setup.bash