11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ROSAdvent Calendar 2021

Day 8

Mycobot PiのMoveIt対応

Last updated at Posted at 2021-12-07

この記事の内容について

こんにちは、ROS Advent Calenderの8日目を担当させていただく株式会社キビテク開発部のAlirezaです。
こちらはmyCobot PiでMoveItを使用する方法について説明させていただきます。
myCobot PiはメーカーがMoveItのサポートを行っていません。myCobotのFacebookグループでは、 myCobot PiでMoveItを使用する方法を探している人が多くいました。
そこで、myCobot PiでMoveItが利用できず、困っている方のためにこの記事を書きました。

このROSパッケージの簡単な説明

  • myCobot PiでMoveItが利用できるようにメーカーのROSパッケージ・3rd party ROSパッケージのソースコードを改変しました
  • ROSでグリッパー(吸引タイプ、通常タイプ)を利用できるようにソースコードを追加しました

myCobotの簡単な紹介

myCobotは、世界最小かつ最軽量の協調ロボットマニピュレータです。
$40000のマニピュレータと比較すると、myCobotは非常に安い価格です。
myCobot PiはRaspberry Pi 4Bが搭載されているmyCobotロボットシリーズの一種です。

Screenshot from 2021-11-13 15-15-39.png (327.1 kB)Fig.1 - myCobot Pi

myCobot PiでMoveItを使用することが難しい理由

  1. myCobot Pi にはROS Kineticが構築済みのRaspbian Buster OSがインストールされています。
    このような組み込みOS向けのLinuxディストリビューションでは、MoveItをソースインストールする必要があります。
    単純なバイナリインストールに比べて時間と労力がかかります。
    MoveItをインストールした後でも、moveit rviz pluginの可視化処理が重すぎるため、RPiで処理できません。
    そのため、PCとRPiのマルチマシン環境でROSを動作させることで、MoveItが動作するようにしました。(MoveIt Planner自体はRPiで処理可能です。)

  2. MoveItを実際のロボットに対応するのは難しいです。
    MoveItを実行するために必要最低限な3つの要件:

    1. /joint_state ROS Topic
    2. ロボットのtf情報
    3. followJointTrajectory Action Service

    myCobot Piのpkgを変更することで、1/2の要件を達成しました。
    (myCobot PiをROSで動作させる方法については、この会話の最後にあるメモを参照してください)。
    3の要件を達成するには、ros_controlを使用する必要があります。
    ロボットからのデータの読み取り、コントローラーへのデータの受け渡し、コントローラーからのコマンドの取得、およびロボットへのコマンドの送信を担当する"RobotHW"ノードも必要です。このROS NodeはRobot APIやモータ指令値等ににアクセスできるものです。

    ※Gazeboの場合、このノードを自分で作成する必要はなく、代わりに"Transmission Element"をジョイントに追加し、"ros_control"プラグインをurdfファイルに追加します。

myCobot PiでMoveItを使用する

Mycobot PiでMoveItを使用する手順について説明します。
Mycobot Piは購入時に、ROS KineticがインストールされたDebian Busterが構築済みです。
ここでは、ROS KineticがMyCobotPiにすでにインストールされていることを前提とします。

1. 必要なもの

  1. myCobot Pi

  2. ROS Kinetic/Melodic/Noetic構築済みのPC
    MoveItを動作させるために必要です。
    ROS Melodic/Noeticを利用することを推奨します。
    PC側のROS Melodic/NoeticとRPi側のROS Kineticの組み合わせで動作確認しました。

  3. ルーター
    myCobotとPCは同一ネットワーク上にある必要があります。

図2に、システムの大まかな構成図を示します。

Screenshot from 2021-11-13 15-15-39.png (327.1 kB)Fig.2 - 大まかなシステムの構成図

2. マルチマシンでのROS設定

myCobot PiでMoveItを使用するには、ロボットと同一ネットワーク内にある別のROS Melodic/Noetic構築済みPCが必要です。
myCobotPiとコンピューターの両方がお互いを認識できることを確認してください。

  • 次のコマンドでIPアドレスを取得できます。

    hostname -I
    

    まず、次のコマンドを使用して、rpiとコンピューターの両方がお互いを認識できることを確認してください。

    ping THE_OTHER_SYSTEM_IP
    

    THE_OTHER_SYSTEM_IP:他のシステム(rpiまたはPC)のIPアドレスです。

ROS_MASTERの設定

マルチマシンでのROS動作時にはROS_MASTERの設定が必要です。

  • PC側の実行コマンド
    export ROS_MASTER_URI=http://PC_IP_ADDRESS:11311
    export ROS_IP=PC_IP_ADDRESS
  • RPi側の実行コマンド
    export ROS_MASTER_URI=http://PC_IP_ADDRESS:11311
    export ROS_IP=RPI_IP_ADDRESS        

これらのコマンドは、ターミナルを開くたびに実行してください。

roscoreを実行する

PC側で

roscore

を起動してください。

詳細については、こちらを参照してください.

3. MoveItのインストール

PC側にMoveItをインストールする必要があります。
以下のコマンドを実行します。

sudo apt-get install ros-noetic-moveit

4. GitHubレポジトリのクローン

catkin workspaceにGithubリポジトリをクローンします。

  • RPI側での実行コマンド
  git clone -b  mycobot-pi https://github.com/QibiTechInc/mycobot_ros.git
  git clone -b rpi-pkg  https://github.com/QibiTechInc/mycobot_moveit.git

  • PC側の実行コマンド

    git clone -b  mycobot-pi https://github.com/QibiTechInc/mycobot_ros.git
    git clone -b pc-pkg https://github.com/QibiTechInc/mycobot_moveit.git
    

5. RPI側でROS Launchを起動

RPi側で、以下のコマンドを実行。

 roslaunch mycobot_moveit mycobot_rpi_control_v2.launch

このROS Launchでは、以下の処理を行います。

  • robot_descriptionパラメータの定義
  • robot_state_publisher Nodeの実行
  • get / set_joint_angles ROS Serviceを管理するNodeの実行
  • mycobot_moveitパッケージのmycobot_hw_interface.pyの実行
    このNodeは、PC側で実行されるhw_interface.cpp Nodeの /joint_cmd_array Topicを購読し、指令値が配信されると、mycobot python APIを介してロボットにコマンドを送信します。

6. PC側でROS Launchを起動

コンピューターで以下のコマンドを実行。

roslaunch mycobot_moveit mycobot_moveit_control_master_v2.launch

このROS Launchでは、以下の処理を行います。

  • moveitを実行するために必要なNodeの実行(moveit_ros_move_groupからのmove_group)
  • ros controllerの生成(joint_state_publisherおよびfollow_joint_trajectory)
  • mycobot_moveitパッケージのmycobot_control Nodeの実行。Controller Managerノード。

:tada: 上記の手順に従うことで、myCobotPiでMoveItを使用できるようになります :tada:

mycobot Pi with MoveIt

エンドエフェクタ

吸引ポンプの接続方式がわかりにくいので、説明します。
MyCobot Piには、通常の並行リンクのグリッパーと吸引ポンプがあります。

photo_2021-11-13_10-21-18.jpg (132.4 kB) Fig.3 - Current myCobot grippers

図3では、上部に吸引ポンプがあり、右下にもう1つのグリッパーがあります。 並行リンクのグリッパーの接続方法についてはこちらのリンクを参照ください。
吸引ポンプに関しては、モータとソレノイドが入っている小さな箱の中に、IOポートが2つあります。

photo_2021-11-13_10-44-07.jpg (81.7 kB)Fig.4 - suction pump power cable, and input command interfaces

図4の左側のポートは吸引ポンプに電力を供給するために使用され、
右側のポートはG2ピンとG5ピンが吸引ポンプのON/OFFを指令するために利用されます。
G2とG5をRaspberry PiのGPIOに接続することで、吸引ポンプのON/OFFを切り替えます。

ROSで通常のグリッパーを使用する

次のパッケージを起動します。

roslaunch mycobot_280 gripper.launch  

これにより、ROSで並行リンクのグリッパーが利用できます。

グリッパーの操作

グリッパーを開くように命令するには、 / gripper_command ROS Topicを使用します。(std_msgs/Float64)

0の指令値を送ると、グリッパーは完全に閉じます。
100の指令地を送ると、グリッパーは完全に開きます。

0~100の間の指令値は正確に動作しない場合があります。

グリッパーの状態取得

ROS Topic / gripper_statusを介して、グリッパーの現在の状態(0〜100の数値)を取得できます。
このトピックでは、実際の値の代わりに-1の値が取得され、グリッパーの状態が取得できないことがあります。これは、mycobot APIの問題のようです。
※joint_anglesを読んでいる場合、mycobot.launchまたはMoveItを起動している場合に発生しやすいです。

吸引ポンプの設定(ハードウエア)

G2 : RPi GPIO 5ピン
G5 : RPi GPIO 6ピン
上記のように接続してください。

ROSでmyCobot Piの吸引ポンプを動かしてみる

mycobot Pi with MoveIt

以下のコマンドを実行します。

rosrun mycobot_280 suction_gripper.py 

std_msgs :: Bool型のメッセージを /suction_gripper_commandトピックに送ることで、吸引グリッパーをON/OFFできます。

true : 吸引ポンプをON
false : 吸引ポンプをOFF

RPiのピン番号を変更したい場合は、suction_gripper.py内のG2_PINとG5_PINを任意のピン番号の値に変更してください。

トラブルシューティング

プログラム内のパラメータのPORTとBAUD_RATEがmyCobotPiに対して適切に定義されていることを確認してください。現在のmyCobotPiの場合、この値は次のとおりです:

  • BAUD_RATE = 1000000
  • PORT = /dev/ttyAMA0

ポートのデバイスファイル名は以下のコマンドで発見できます。

    sudo ls /dev | grep "tty"
  • ポートが閉じられているエラーが出た場合、以下のコマンドを使用してRPiのシリアルポートのユーザー権限を付与してください。
  sudo chmod 777 /dev/ttyAMA0

mycobot PIでmycobot Python APIを利用する場合

元のパッケージのプログラムの多くは、mycobotオブジェクトを定義するために以下のコンストラクタが使用されています。この形式を使用しないでください。

   from pymycobot.mycobot import MyCobot
   
   mycobot = MyCobot(port)

上記の代わりに、以下のコンストラクタを使用してください。

    from pymycobot.mycobot import MyCobot
    from pymycobot import PI_PORT, PI_BAUD
    
    mycobot_ = MyCobot(PI_PORT, PI_BAUD)

ROSパッケージが見つからない場合

RPi側でroslaunchを使用してmycobot PiのROSパッケージが見つからなかった場合は、
以下のコマンドを利用してください。

 source ros_catkin_ws/devel/setup.bash

謝辞

ElephantroboticsNisshanの功績を称えたいと思います。
これらのレポジトリ2つをforkし, mycobot Piで利用できるように改変しました。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?