turtlebotのセンサをレーザーレンジファインダに切り替える
ROSさんお手やわらかに:ROS青雲編
このフォーマットで書くのは久しぶり。このカテゴリは僕のメモなので簡潔にまとめる。製作したturtlebotはkinectをセンサに使っているが、これを以前入手したURG-04LXに切り替える。turtlebotが入門用組み立てキットなら、その小改造と言ったところだ。O-V-2にプリセレクターを追加するみたいなものか。完全自作への最初のステップだ。
基本的な作業はこのページに従う。今回は元ページにあるように専用のcatkinワークスペースに主要ファイルのコピーは作らず、/opt/ros/indigo下の本体を改造する。なぜなら、将来roomba以外の移動ロボットをturtlebotスタックで制御するには、かなり広範囲に改造の必要があり、元ぺージで作るコピー環境では足りないからだ。本体を改造するテクニックを試すにはいい教材だ。下記に手順をメモする。
1:ロボットの構成を定義するturtlebot_library.urdf.xacroにレーザースキャナを追加 $ rorcd turtlebot_description/urdf/ #ディレクトリに移動 #末尾に.orgをつけてオリジナルをコピー(これはあとでもとに戻すときのためにオリジナルを保存するため) $ sudo cp turtlebot_library.urdf.xacro turtlebot_library.urdf.xacro.org #nanoで開いて $ sudo nano turtlebot_library.urdf.xacro #下記を</robot>の前に追加。origin xyzの部分は自分のロボに合わせて直してあるがコツあり。後ほど。 <joint name=\"laser\" type=\"fixed\"> <origin xyz=\"0.1 0.0 0.3\" rpy=\"0 0 0\" /> <parent link=\"base_link\" /> <child link=\"base_laser_link\" /> </joint> <link name=\"base_laser_link\"> <visual> <geometry> <box size=\"0.00 0.05 0.06\" /> </geometry> <material name=\"Green\" /> </visual> <inertial> <mass value=\"0.000001\" /> <origin xyz=\"0 0 0\" /> <inertia ixx=\"0.0001\" ixy=\"0.0\" ixz=\"0.0\" iyy=\"0.0001\" iyz=\"0.0\" izz=\"0.0001\" /> </inertial> </link> 2:minimal.launchでレーザーを起動するよう改造(手順は上に同じ) $ roscd turtlebot_bringup/launch/ $ sudo cp minimal.launch minimal.launch.org $ sudo nano minimal.launch #minimal.launchの最後にこれを追加 <node name=\"laser_driver\" pkg=\"hokuyo_node\" type=\"hokuyo_node\"> <param name=\"frame_id\" value=\"base_laser_link\" /> </node> 3:turtlebot_navigationのマップ作成、自立移動のローンチファイルから3dsensor.launchを外し、kinectを使わない設定にする $ roscd turtlebot_navigation/launch/ $ sudo cp gmapping_demo.launch gmapping_demo.launch.org $ sudo nano gmapping_demo.launch #nanoで下記のようにコメントアウトして無効にする。ただしコメントアウト部分に元々のコメントがあるので、それは削除する。そうしないとコメントアウトが面倒 <!-- <include file=\"$(find turtlebot_bringup)/launch/3dsensor.launch\"> <arg name=\"rgb_processing\" value=\"false\" /> <arg name=\"depth_registration\" value=\"false\" /> <arg name=\"depth_processing\" value=\"false\" /> <arg name=\"scan_topic\" value=\"/scan\" /> </include> --> #同じ作業を同じディレクトリにあるamcl_demo.launchにも行う。
レーザーレンジファインダのインストールは下記でできる。以前はちょっと苦労したが今はインストールするだけですんなり動くようだ。
$ sudo apt-get install ros-indigo-hokuyo-node
ポイントは、turtlebot_library.urdf.xacroに追加するレーザーの定義で、origin xyzの部分。水平オフセットと、回転オフセットを定義する。今回は上のように、ロボットのセンターから前に0.1m、中心軸上、高さ0.3m、傾きなしで設定した。元ページのデータだと逆さまにつけるよう、x成分の回転オフセットが180度(π)になっているので注意。
それと垂直方向のzオフセット、つまり高さは、元のデータでは0.36mになっている。これは実際の高さに合わせたいところだが、/opt/ros/indigo/share/turtlebot_navigation/params/costmap_common_params.yamlで高さ0.25〜0.35mの範囲のレーザー情報のみ障害物検出に使う設定になっているので、その範囲にないと地図は作れるが障害物回避ができない。これが分からなくて苦労した。高さがどうあれ、0.3mにしておく。ちゃんと設定するに前出のパラメータを修正する。これは後で。
ただし、このように本体のファイルを改造すると、apt-get upgradeでの更新で元に戻ってしまうことがあるようだ。別の実験でturtlebotをオリジナルの移動台車に切り替えてみたとき、制御に使っていたラップトップで更新を実行したら、いくつかのファイルが元に戻ってしまい、突然動かなくなってしまったことがあった。恒久的につかうなら、改造したファイルを別のディレクトリにまとめて置き、起動時にシェルスクリプトでイッキに置き換えるといった対策が必要だろう。まあ実験程度なら更新しないよう気をつければよい。
改造したのはラズパイ2を使ったHanabot2。kinectは取り外し、レーザースキャナーは外部電源タイプなのでモバイルバッテリーから給電した。一時的な実験なのでこんな感じに組み立てた。
« タミヤのギアボックスで連続回転サーボを作る | トップページ | レーザーレンジファインダーの効果は »
「ROSさんお手やわらかに」カテゴリの記事
- 3Dプリンターで作る簡単turtlebot(おしまい)(2017.01.07)
- 3Dプリンターで作る簡単turtlebot(raspberry pi3の取り付け)(2017.01.03)
- 3Dプリンターで作る簡単turtlebot(kinectの取り付け)(2017.01.02)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て2)(2016.12.29)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て1)(2016.12.25)
コメント