Note: This tutorial assumes that you have completed the previous tutorials: Writing a realtime joint controller. |
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. |
Running a realtime joint controller
Description: このチュートリアルはあなたに既存のJoint空間コントローラーのコンフィギュレーションを設定して、実行する方法を教えますTutorial Level: BEGINNER
Next Tutorial: Communicating with a realtime joint controller
Contents
Introduction
このチュートリアルで我々は前のチュートリアルで作られたコントローラーを動かすでしょう。
このチュートリアルは以下を使います:
コントローラーを動かすgazeboシミュレータ環境。もしあなたが一度もgazeboについて聞いたことがないなら、このチュートリアルを最初にチェックアウトします。
Parameter Serverコントローラーの初期化/コンフィギュレーションで使われるパラメータをストアするために使います。
コントローラーの実行をコントロールするpr2_controller_manager。
Starting the pr2 in Gazebo
そしたら,最初に gazebo を走らせましょう
$ rosmake pr2_gazebo $ roslaunch gazebo_worlds empty_world.launch
あなたは空のgazebo世界が見られるでしょう。
今この世界の中にpr2ロボットを作成しましょう:
$ roslaunch pr2_gazebo pr2.launch
そしてあなたのシミュレーション世界はこのように見えるべきです。
Running the Controller
今あなたはシステムについてフィードバックを手に入れるためにrxconsoleをスタートするべきです。これはあなたのコントローラーがなぜロードし損ねるかもしれないかを見るために有用です。良い習慣として、あなたがroboと共に働いているとき、あなたは常にrxconsoleあるいはpr2_dashboardを動かすべきです:
$ rxconsole
Configuring the Controller
コントローラーを動かすことへの第一歩はパラメータサーバーでそのコンフィギュレーションを並べ広げることです。
すべてのコントローラーが必要とする1つのパラメータ:コントローラータイプがあります;これは我々がコントローラーを登録するために使った名前、一般にclassnameと同じです。それで、もし我々が我々のコントローラーmy_tutorial_controllerを呼び出すなら、我々が設定する必要があるパラメータは次のmy_tutorial_controller/typeです:
$ rosparam set my_controller_name/type my_controller_pkg/MyControllerPlugin
我々のコントローラーは我々が、joint_nameと呼ばれて指定する必要がある1つの内部のパラメータを持っています。利用可能なJoint、タイプのリストを受けとるために次をタイプします:
$ rosrun pr2_controller_manager pr2_controller_manager list-joints
このチュートリアルについて、我々は右肩パンJointを使うでしょう:
$ rosparam set my_controller_name/joint_name r_shoulder_pan_joint
我々がただ設定したすべてのパラメータをリストするために次をタイプします:
$ rosparam get -p my_controller_name
Checking status of other controllers
我々のコントローラーをスタートする前に、ほかに何がシステム上で動作しているか見ることはおそらく良い考えです。システムが立ち上がるとき、いくつかのコントローラーは自動的にスタートされることができます。同じリソースを使う2つのコントローラーを走らせて、つまり、同じJointをコントロールしようとしてください、それはダメな結果を導くでしょう。何が起こったか見るために次をタイプします:
$ rosrun pr2_controller_manager pr2_controller_manager list
もしあなたがコンフリクトについて心配しているなら、あなたは異なったJointを使うことに決めるかもしれません、あるいは他のコントローラーをストップすることができます。コントローラをストップするために次をタイプします:
$ rosrun pr2_controller_manager pr2_controller_manager stop CONTROLLER_NAME
Loading and Starting the Controller
最終的に、我々はcontroller managerに我々のコントローラーが登録されたかどうか調べる必要があります。登録されたコントローラーのリストを得るために次をタイプします:
$ rosrun pr2_controller_manager pr2_controller_manager list-types
アウトプットの中で我々のコントローラーMyControllerPluginを見つけてください。もしそれがそこにあるなら、あなたはロードして、そしてそれでスタートする準備ができています。
Load
しすべてが良さそうに見えるなら、我々のコントローラーをロードしましょう:
$ rosrun pr2_controller_manager pr2_controller_manager load my_controller_name
- "Loaded my_controller_name"が見えるはずです.
我々はコントローラーが下記でロードされることを確認することができます:
$ rosrun pr2_controller_manager pr2_controller_manager list
Start
あなたは、我々のコントローラーがロードされると気付くでしょう、けれどもそれはまだ止まっていて、そしてロボットはまだ動いていません。我々が今、それをするために必要とするすべてのことは我々のコントローラーをスタートすることです:
$ rosrun pr2_controller_manager pr2_controller_manager start my_controller_name
pr2の右のアームは動いてスタートします
我々はコントローラーが稼働していることを下記で確認することができます:
$ rosrun pr2_controller_manager pr2_controller_manager list
Stop
コントローラーをストップする非常にわかりやすいコマンド:
$ rosrun pr2_controller_manager pr2_controller_manager stop my_controller_name
あなたはストップした後、あなたは再びスタートして、再びストップするなどすることができました。
Unload
我々のコントローラーをcontroller managerからすっかり取り除くために、次をタイプしてください: To totally remove our controller from the controller manager type:
$ rosrun pr2_controller_manager pr2_controller_manager unload my_controller_name
コントローラーが止められるとき、unloadがただ作動するだけであることに注意を払ってください。コントローラーがなくなっていることを確認するために、次をタイプしてください:
$ rosrun pr2_controller_manager pr2_controller_manager list
Making things easier
Yaml configuration
コントローラーを動かす上の方法は多くのタイピングを必要としました。まあ、あなたは、すべてのコンフィギュレーションをyamlファイルの中にストアすることによって、ずっとより容易にすることができます。ただmy_controller.yamlと呼ばれるファイルを作成して、そしてパラメータをコピーしてください:
my_controller_name: type: my_controller_pkg/MyControllerPlugin joint_name: r_shoulder_pan_joint
今あなたは下記によってパラメータをロードすることができます:
$ rosparam load my_controller.yaml
すぐにコントローラーをロードして、それでスタートするために、あなたはspawnオプションを使うことができます:
$ rosrun pr2_controller_manager pr2_controller_manager spawn my_controller_name
コントローラーをアンロードして、そしてストップするために、1つのコールのkillオプションを使ってください:
$ rosrun pr2_controller_manager pr2_controller_manager kill my_controller_name
Launch file
ことをさらにより容易にするために、launchファイルとspawnerツールを使って(もっと多くのコントローラーとやり取りするツールに関する詳細についてはcontroller manager参照)、'''launch'''ファイルからあなたのコントローラーを走らせます。単にmy_controller.launchと呼ばれるファイルを作ってください:
<launch> <rosparam file="$(find my_controller_pkg)/my_controller.yaml" command="load" /> <node pkg="pr2_controller_manager" type="spawner" args="my_controller_name" name="my_controller_spawner" /> </launch>
そして、実行します:
$ roslaunch my_controller.launch
そしてストップするためには、ただCtrl-cを押してください。 今あなたは次のコントローラーのための用意ができていて、方法communicate with a realtime joint controllerを学びます