Updated on: 2018-02-27
作成したURDFを本物のロボットと繋げてrviz
でロボットの状態を可視化します。
rviz
はURDFを表示するとき、/tf
トピックで受信したタスクフレームデータを利用してジョイントを正しい位置・角度に合わせてロボットの姿勢を正しく表示します。
/tf
に流れているデータはよくrobot_state_publisher
というノードで計算されます。
robot_state_publisher
は/joint_states
トピックから各ジョイントの位置・角度を受信して、URDFのkinetic treeとあわせて各タスクフレームの位置を計算します。
すなわち、ロボットは/joint_states
に書くジョイントの位置または角度を送信したら、rviz
でURDFを利用してロボットの現状の可視化は可能です。
manipulator.urdf.xacro
を利用してCRANE+をrviz
で可視化します。
/tf
にデータが流れていてそしてURDFがあれば、可視化は可能です。
ここでmanipulator.urdf.xacro
のジョイント名をCRANE+に合わせて、CRANE+のハードウェアを起動して、そしてCRANE+の現状の姿勢をrviz
で可視化します。
URDFのジョイント名とロボットのジョイント名を合わせることが必要です。
下記のようにmanipulator_parts.xacro
とone_finger_gripper.xacro
のジョイント名を変更します。
shoulder_rotate_joint
→ crane_plus_shoulder_revolute_joint
manipulator_parts.xacro
で変更
shoulder_pitch_joint
→ crane_plus_shoulder_flex_joint
manipulator_parts.xacro
で変更
upper_arm_link_joint
→ crane_plus_elbow_joint
manipulator_parts.xacro
で変更
1
<child link="upper_arm_link"/>
上記を下記に変更します。
1
<child link="crane_plus_elbow"/>
1
2
<xacro:arm_link link_name="upper_arm_link"
child_link_name="lower_arm_link"
上記を下記に変更します。
1
2
<xacro:arm_link link_name="crane_plus_elbow"
child_link_name="crane_plus_wrist"
lower_arm_link_joint
→ crane_plus_wrist_joint
manipulator_parts.xacro
で変更
1
<xacro:arm_link link_name="lower_arm_link"
上記を下記に変更します。
1
<xacro:arm_link link_name="crane_plus_wrist"
moving_finger_joint
→ crane_plus_moving_finger_joint
one_finger_gripper.xacro
で変更
CRANE+のハードウェアを利用するためのワークスペースを準備します。
必要なパッケージもインストールします。
そして、ワークスペースチェーニングで自己製のmanipulator_description
パッケージも利用可能にします。
まずはMoveIt!とDynamixelのドライバーをyインストールします。
1
2
$ sudo apt-get install ros-kinetic-moveit-*
$ sudo apt-get install ros-kinetic-dynamixel-motor
次に新しいワークスペースを作成します。
1
2
3
4
5
6
$ cd ~/
$ mkdir -p ~/crane_plus_ws/src/
$ cd ~/crane_plus_ws/src/
$ catkin_init_workspace
Creating symlink "~/crane_plus_ws/src/CMakeLists.txt" pointing to
"/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake"
新しいワークスペースにmanipulator_description
パッケージをコピーします。
1
2
$ cd ~/crane_plus_ws/src
$ cp -r ~/urdf_ws/src/manipulator_description .
CRANE+のROSパッケージをダウンロードしワークスペースをコンパイルします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cd ~/crane_plus_ws/src/
$ git clone https://github.com/gbiggs/crane_plus_arm.git
Cloning into 'crane_plus_arm'...
remote: Counting objects: 474, done.
remote: Total 474 (delta 0), reused 0 (delta 0), pack-reused 474
Receiving objects: 100% (474/474), 1.07 MiB | 1.09 MiB/s, done.
Resolving deltas: 100% (235/235), done.
Checking connectivity... done.
$ cd ~/crane_plus_ws/
$ catkin_make
Base path: ~/crane_plus_ws
Source space: ~/crane_plus_ws/src
Build space: ~/crane_plus_ws/build
Devel space: ~/crane_plus_ws/devel
Install space: ~/crane_plus_ws/install
(省略)
[ 80%] Built target crane_plus_arm_moveit_ikfast_plugin
[100%] Linking CXX executable /home/username/crane_plus_ws/devel/lib/
crane_plus_camera_calibration/calibrate_camera_checkerboard
[100%] Built target calibrate_camera_checkerboard
下記は新しい端末で実行します。
1
$ source ~/crane_plus_ws/setup.bash
新しい端末を開くたびに上記の実行が必要です。
CRANE+とrviz
を起動するlaunch
ファイルを作成します。
1
2
$ cd ~/crane_plus_ws
$ touch crane_plus_viz.launch
crane_plus_viz.launch
の内容を下記にします。
1
2
3
4
5
6
<launch>
<param name="robot_description"
command="$(find xacro)/xacro --inorder '$(find manipulator_description)/urdf/manipulator.urdf.xacro' use_simulation:=false"/>
<include file="$(find crane_plus_hardware)/launch/start_arm.launch"/>
</launch>
launch
ファイルはcrane_plus_hardware
パッケージのstart_arm.launch
を利用します。
CRANE+のパッケージは、シミュレータとハードウェアは制御インターフェース以外変わらないことを利点にして、シミュレータでもハードウェアでも変わらない実行するノードを再利用可能なlaunch
ファイルに提供します。
おかげで上記のように別のURDFは簡単に利用できます。
CRANE+のパッケージはシミュレータのURDFを別のパッケージで提供して、シミュレータを起動するためのlaunch
ファイルでそのURDFを利用します。
ここでは、CRANE+パッケージが提供するURDFの変わりに自己製のURDFを利用します。
ハードウェアを利用するので、use_simulation
をfalse
にします。
2つの端末を利用してCRANE+とrviz
を起動します。
端末1でCRANE+を起動します。
1
2
3
$ cd ~/crane_plus_ws
$ source ~/crane_plus_ws/setup.bash
$ roslaunch crane_plus_viz.launch
端末2でrviz
を起動します。
1
2
3
$ cd ~/crane_plus_ws
$ source ~/crane_plus_ws/setup.bash
$ rviz
rviz
が起動したら、Fixed Frame
をbase_link
に変更して、RobotModel
とTF
の可視化を追加すると下記の図のようにロボットが表示されます。
rostopic
でジョイントを制御するとrviz
の可視化は本物のロボットと同時に移動します。
1
2
3
4
$ rostopic pub -1 /crane_plus/command trajectory_msgs/JointTrajectory \
'{joint_names: ["crane_plus_shoulder_revolute_joint", "crane_plus_shoulder_flex_joint", \
"crane_plus_elbow_joint", "crane_plus_wrist_joint"], \
points: [{positions: [0.5, -0.75, 1.5, 0.75], time_from_start: [5.0, 0.0]}]}'
URDFのジョイントの舳はCRANE+と逆になっていることはあります。
修正は宿題です。
ヒント:ジョイントのaxis
を逆にするとジョイントの動く方向が逆になりながらタスクフレームはそのままです。
このソースは以下のURLでダウンロード可能です。
下記のように自分のワークスペースに入れて利用できます。
1
2
3
4
5
6
$ cd ~/urdf_ws/src
$ git clone https://github.com/gbiggs/rosjp_urdf_tutorial_packages
$ cd rosjp_urdf_tutorial_packages
$ git checkout crane_plus_visualisation
$ cd ~/urdf_ws
$ catkin_make