Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
TurtleBotのオドメトリとジャイロのキャリブレーション
Description: ここで、キャリプレーション、または, ナビゲーションをベースとした何らかのアプリケーションを実行する際に推奨されているTurtleBotのキャリブレーションをテストする方法を示します。 この手順はCreateの場合に限り必要なものです。Kobukiには工場出荷時にキャリブレーション済のジャイロが搭載されています。Tutorial Level: BEGINNER
Next Tutorial: Setup the Navigation Stack
セットアップ
TurtleBotがどのジャイロを使っているかを特定してください。TurtleBotsは作られたメーカーごとに、違う測定レートのジャイロを持っています。turtlebotパワー/センサーのボードの右側の上の小さなチップを見て、その部品番号 (example)を見つける必要があります。 いくつかの共通のものは以下のようになっています:
Chip |
Setting |
ADXRS613 |
150 |
ADXRS652 |
250 |
このリンクが助けになるでしょう:http://www.alldatasheet.com/view.jsp?Searchword=ADXRS6
以下の結果のセクションで説明されているように、rqt_reconfigureを使う、またはconfigurationファイルを編集して、 gyro_measurement_rangeの値を キャリブレーションを実行する前に 設定してください。
TurtleBotの初期位置は、長いまっすぐな壁(少なくとも2メートルの長さ)の中心で、壁に直面して、壁から約30cm離れています。
実行
すでにロボットをスタートさせていると仮定します。(参照: TurtleBot Bringup)
SSHでTurtleBotに入り (ssh help) 、キャリブレーションのルーチンを実行します。
To ssh in to a TurtleBot from a workstation computer:
determine the IP_OF_TURTLEBOT by using ifconfig (Need more help)
To determine a computer's IP address and network interface in linux:
ifconfig
You will see something like:
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:6658055 errors:0 dropped:0 overruns:0 frame:0 TX packets:6658055 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:587372914 (587.3 MB) TX bytes:587372914 (587.3 MB) wlan1 Link encap:Ethernet HWaddr 48:5d:60:75:58:90 inet addr:10.0.129.17 Bcast:10.0.129.255 Mask:255.255.254.0 inet6 addr: fe80::4a5d:60ff:fe75:5890/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:101983 errors:0 dropped:0 overruns:0 frame:0 TX packets:37244 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:49326141 (49.3 MB) TX bytes:7588044 (7.5 MB)
the network interface for the wireless card is wlan1
the IP address of the computer is 10.0.129.17
use ssh to connect to the TurtleBot
ssh turtlebot@IP_OF_TURTLEBOT
roslaunch turtlebot_calibration calibrate.launch
Turtlebotは何周かキャリブレーションのために回転動作を実行します。Tully Footeからの覚え書き によると、キャリブレーションのための回転動作は 720° 初回と次回以降では 360°になるべきです。 ここを参照する各"時間"は、キャリブレーションのための回転動作の1つの実行で、そこで、各々のルーチンは"壁をベースにして合わせる"ことで始まり、IMUとodomエラー出力で終わります。 完全な calibrate.launch タスクは4つのそのようなルーチンを含んでいます。 (正確に、キャリブレーションの間に起こるとされていることをよりよく理解するために、 <ROS_ROOT>/lib/turtlebot_calibration/calibrate.py で、ソースコードを読むことが出来ます)。
それが終わる時、以下のような出力をスクリーン上に見るでしょう (そして、同様な数字が出力されるかどうかはまだ確信がありません):
[INFO] [WallTime: 1299286750.821002] Multiply the 'turtlebot_node/gyro_scale_correction' parameter with 1.002262 [INFO] [WallTime: 1299286750.822427] Multiply the 'turtlebot_node/odom_angular_scale_correction' parameter with 1.000263
もしTurtleBot が次のローテーションを実行する前にうまく壁に向かうように戻らないなら、データが誤っています。これは既存のパラメータにおけるエラーがあまりに大きいことが起因している可能性があります。 もし一周を超えて回転しているなら、odom_parameterを低くして、再試行します。
あるいは、この投稿で提案されているように、ジャイロ・パラメータを調節してみることができます。キャリブレーションのための回転動作がしていることの正確な説明がここにはないので、何がこれらの種類の問題に対処する正しい方法であるのかについてはわかりません。
結果
キャリブレーションのための回転動作で2つの数を出力します。ジャイロのための補正とオドメトリのための補正です。この値は、最もよい結果を得るために現在のパラメータを使って増殖させた校正要素です。(また、このQAとこのQAを参照 )
キャリブレーション実行後、パラメータをに校正で弾き出した古い値に設定します。
2つのパラメータは:
- turtlebot_node/gyro_scale_correction
- turtlebot_node/odom_angular_scale_correction
dynamic_reconfigureを使って、一度の実行でパラメータを設定することが出来ます:
rosrun rqt_reconfigure rqt_reconfigure
そして、turtlebot_nodeを選び、パラメータを設定します。Dynamic Reconfigureを使わなければなりません。そうしないとturtlebot_nodeは変化を拾わないでしょう。rosparam setを使った設定では十分ではありません。 (それぞれのキャリブレーションの後に、turtlebot_nodeを再スタートさせることも出来ますが、ここでは起動launchファイルのパラメータ変更を必要としています。)
キャリブレーションのステップに戻り、両方の係数が1に近くなるまで、プロセスを繰り返します。もしキャリブレーションが正しく働いていないなら、数はまったく収束しないかもしれません。何がこれらのパラメータのために予期する妥当な値なのかをガイドラインで与えられているのを誰も確認できていないので、プロセスが発散しているかどうかを言うのは難しいです。もしプロセスがジャイロの校正を0まで動かそうとするなら、何かが悪いと疑うべきです。
一度、両方の校正パラメータが安定した値に収束したら、次以降もこれらのパラメータを使うためにturtlebot.launch ファイルを編集します。