実際のロボットを動かす前に、シミュレータで動かしてみましょう。
まずは、ロボットのモデリングです。
次のような2つのモーターと2つの車輪で動作する移動ロボットを定義しましょう。
では、「パッケージ」を作成しましょう。
パッケージは、「catkin_create_pkg」コマンドで作成します。
今回はmy_robo_descriptionという名前のパッケージにしましょう。my_robo_descriptionにはロボットの定義ファイルを配置することにします。
$ cs $ mkdir my_robo $ cd my_robo $ catkin_create_pkg my_robo_description
このコマンドで必要なフォルダやファイルが作成されます。
ROSではURDFファイルでロボットを定義していきます。URDFファイルはXMLで記述します。
$ cd my_robo_description $ gedit my_robo.urdf
まずは車体を作成しましょう。エディタが開いたら、次のように入力してください。
<?xml version="1.0"?> <robot name="my_robo"> <link name="base_link"> <visual> <geometry> <box size="0.400 0.200 0.100"/> </geometry> </visual> <collision> <geometry> <box size="0.400 0.200 0.100"/> </geometry> </collision> </link> </robot>
各タグの説明をしましょう。
URDFではまず<robot>タグを一番外側に置きます。name属性でロボットの名前を指定しています。
<link>タグはロボットの部品です。<link>を組み合わせてロボットの構成を定義していきます。
<link>タグの中には<visual>と<collision>タグがあります。前者が見た目の設定、後者が実際のサイズ設定になります。ここでは<box>タグで20cm×40cm×10cmの四角い車体を定義しました。
では、このファイルを確認してみましょう。
確認のため、ROSの起動ファイル(ランチファイル)を作成します。ランチファイルはROSのコマンドをまとめて起動するためのスクリプトになります。
$ mkdir launch $ cd launch $ gedit display.launch
<launch> <arg name="model" default="$(find my_robo_description)/my_robo.urdf"/> <arg name="gui" default="True"/> <arg name="rvizconfig" default="$(find my_robo_description)/urdf.rviz"/> <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)"/> <param name="use_gui" value="$(arg gui)"/> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /> <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /> <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true"/> </launch>
rvizというツールを起動してURDFを表示するスクリプトです。RVizはロボットの各種情報を視覚化する重要なツールです。この先も何度も登場します。
ではロボットのモデルを表示してみましょう。作成したランチファイルは「roslaunch」コマンドを使い次のように起動します。
$ roslaunch my_robo_description display.launch
rvizが起動します。
左ペインのDisplays->Global Options->Fixed Frameにbase_linkと入力します。
左下の「Add」ボタンをクリックし、rviz->RobotModelを選択しOKを押します。
追加すると、次のように、my_robo.urdfで定義した車体が表示されます。
RVizでCtrl+sキーを押すと、現在の表示状態を保存することが出来ます。またRVizの終了時にも状態を保存するか訊かれます。ではRVizは終了してください。
では、次にタイヤを追加していきます。
エディタでmy_robo.urdfを開き、左のタイヤを表すLinkを追加します。
<link name="left_wheel_link"> <visual> <geometry> <cylinder radius="0.1" length="0.05"/> </geometry> <origin xyz="0 0 0" rpy="0 0 0"/> <material name="black"/> </visual> </link>
今度は<cylinder>タグで半径10cm、厚さが5cmの円柱を定義しました。
また、LinkとLinkは<Joint>タグで接続します。
車体Linkと左のタイヤLinkを<joint>タグで接続してみましょう。
<joint name="left_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="left_wheel_link"/> <origin rpy="-1.5707 0 0" xyz="-0.100 0.130 0"/> <axis xyz="0 0 1"/> </joint>
<joint>タグではジョイントの性質をtypeで指定します。今回のようにタイヤの軸の場合、連続回転軸であるcontinuousを指定します。
<origin>タグではxyzでparentに対するジョイントの位置を指定し、rpyで軸の向きを決めます。
<axis>では回転する軸を指定します。
ここまでできたら一旦表示してみましょう。
$ roslaunch my_robo_description display.launch
Displaysより、RobotoModel->Links->balse_linkを展開します。Alphaに0.5を指定すると、車体が半透明になります。Show Axesにチェックを入れるとx軸(赤)y軸(緑)z軸(青)が表示されます。
このように、ロボットの座標系は、進行方向がx軸、横がy軸、上方向がz軸になっています。
left_wheel_linkも同じように表示してみましょう。
同じように右タイヤのLinkとJointを追加します。
<link name="right_wheel_link"> <visual> <geometry> <cylinder radius="0.1" length="0.05"/> </geometry> <origin xyz="0 0 0" rpy="0 0 0"/> <material name="black"/> </visual> </link> <joint name="right_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="right_wheel_link"/> <origin rpy="1.5707 0 0" xyz="-0.100 -0.130 0"/> <axis xyz="0 0 1"/> </joint>
次にキャスターとそのジョイントを追加します。
<link name="caster_link"> <visual> <geometry> <sphere radius="0.05"/> </geometry> <material name="green"> <color rgba="0 1 0 1"/> </material> </visual> </link> <joint name="caster_joint" type="fixed"> <parent link="base_link"/> <child link="caster_link"/> <origin xyz="0.150 0 -0.050"/> </joint>
キャスターは球体で定義しました。球体は<sphere>タグで作成します。<joint>タグで、車体と接続します。
最後に足元を表すbase_footprintを定義しておきましょう。
<link name="base_footprint"/> <joint name="base_link_joint" type="fixed"> <parent link="base_footprint"/> <child link="base_link"/> <origin xyz="0 0 0.100"/> </joint>
これで動輪2つとキャスターをもった移動ロボットの完成です!!
次回はシミュレータ上でロボットを動かせるようにします。
ROSで始めるロボティクス(6) ー ROSでデプスカメラPMD CamBoard pico flexxを使う
ROSで始めるロボティクス(7) ー ロボットのための二次元mapを作る
ROSで始めるロボティクス(8) ー ロボットのナビゲーションを行う
ROSで始めるロボティクス(7) ー ロボットのための二次元mapを作る
ROSで始めるロボティクス(8) ー ロボットのナビゲーションを行う
参考文献:
記載されている会社名、および商品名等は、各社の商標または登録商標です。
[display.launch] is neither a launch file in package [my_robo_description] nor is [my_robo_description] a launch file name
返信削除The traceback for the exception was written to the log file
このように表示されてしまいRVizが起動しません。
catkin_ws内で
削除$source devel/setup.bash
上記の通りやってみましたが同じエラーがでます
削除[display.launch] is neither a launch file in package [my_robo_description] nor is [my_robo_description] a launch file name
The traceback for the exception was written to the log file
私も同じ問題が出ていましたが、
削除my_roboディレクトリは~/catkin_ws/src以下に置き、
~/catkin_ws/src/my_robo/my_robo_description/launch
で$ roslaunch my_robo_description display.launchを
実行するとRViZが起動しました
このコメントは投稿者によって削除されました。
返信削除このコメントは投稿者によって削除されました。
返信削除