MoveItでPandaを動かそう:前編(WMD 2019 in Tokyo 準備編)

著者:yuki.onishi

MoveItでPandaを動かそう:前編(WMD 2019 in Tokyo 準備編)

はじめに

本記事では,World MoveIt Day 2019 in Tokyo(WMD 2019 in Tokyo) の会場にて動かすことのできるロボットアーム Panda を,実際にPCと接続して動かす方法を紹介します.
前編では,Panda を動かすPCの環境構築と,PCと実機の接続方法について紹介します.当日実際に機体を動かしてみたい方は,必見です!

1. franka_ros の導入

1.1. Franka Control Interface (FCI) について

Franka Control Interface (FCI) は, Panda の製造元である FRANKA EMIKA が提供する,オープンソースのライブラリです.
FCI には,C++ライブラリである libfranka と,これを ROS1 に対応させた ROSパッケージ群 franka_ros があります.これらのライブラリはイーサネットを通じて,PC と Panda との高速な双方向通信を行い,1 kHz でのリアルタイム制御と計測を実現します.
制御のインターフェースとしては,次の5種類がサポートされています.

  1. 自重・摩擦補償付きトルク指令
  2. 関節位置指令
  3. 関節速度指令
  4. 手先位置指令
  5. 手先速度指令

また,同時に次の計測値を得ることができます.

  1. 関節角度
  2. 関節速度
  3. 関節トルク
  4. 手先に加わるレンチ(外力とトルク)の推定値

ライブラリには他にも,シミュレーション等で役立つロボットの物理モデルや,運動学・動力学の計算に使える関数が用意されています.

1.2. Linux へのインストール

ここでは,次の環境を想定します.

  • OS: Ubuntu 18.04 LTS Bionic Beaver
  • ROS: ROS1 Melodic Morenia

最も簡単な方法は,apt コマンドを利用する方法です.次のコマンドを実行してください.

sudo apt install ros-melodic-libfranka ros-melodic-franka-ros

ソースコードからビルドしたい方は,こちらを参考に行ってください.

1.3. リアルタイムカーネルのセットアップ

次に,ロボットをリアルタイムで制御するために必要な,リアルタイムカーネルのセットアップを行います.

1.3.1. 依存パッケージのインストール

依存するパッケージのインストールを行います.

sudo apt install build-essential bc curl ca-certificates fakeroot gnupg2 libssl-dev lsb-release libelf-dev bison flex

1.3.2. カーネルとパッチのダウンロード

こちらのリンクから,リアルタイム用のカーネルパッチのバージョンを選びます.今回は 4.14.12 を選択します.
ダウンロードするディレクトリへ移動し,curl コマンドを利用して,カーネルとパッチを取得します.異なるバージョンを選択した場合は数字の部分を変更してください.

curl -SLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.sign
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.12-rt10.patch.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.12-rt10.patch.sign

ダウンロードしたファイルを解凍します.

xz -d linux-4.14.12.tar.xz
xz -d patch-4.14.12-rt10.patch.xz

1.3.3. カーネルとパッチの検証

カーネルにパッチを当てるにあたり, gpg2 コマンドを用いて署名の検証を行います.

gpg2 --verify linux-4.14.12.tar.sign
もし次のようなエラー
gpg: RSA鍵 <ABCD> を使用
gpg: 署名を検査できません: 公開鍵がありません
が発生したら,<ABCD>の値を利用して,次のコマンドを実行してみてください.
gpg2  --keyserver hkp://keys.gnupg.net --recv-keys 0xABCD

次のような結果が得られたら完了です.

gpg: RSA鍵 <ABCD> を使用
gpg: "Greg Kroah-Hartman <gregkh@linuxfoundation.org>"からの正しい署名 [不明の]
gpg: 別名"Greg Kroah-Hartman <gregkh@kernel.org>" [不明の]
gpg: 別名"Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg: この署名が所有者のものかどうかの検証手段がありません.
主鍵フィンガープリント: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E

パッチファイルについても同様の検証を行います.

gpg2 --verify patch-4.14.12-rt10.patch.sign

1.3.4. カーネルのビルド

それでは,ダウンロードファイルを解凍し,パッチを適用します.

tar xf linux-4.14.12.tar
cd linux-4.14.12
patch -p1 < ../patch-4.14.12-rt10.patch

次に,カーネルのコンフィグレーションを設定します.次のコマンドを実行すると,テキストベースの設定が始まります.

make oldconfig

ほとんどの設定はデフォルトのままで問題ありませんが,”Preemption Model” の設定のときだけ,次のように, PREEMPT_RT_FULL に指定してください.

Preemption Model
    1. No Forced Preemption (Server) (PREEMPT_NONE)
    2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY)
    3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL) (NEW)
    4. Preemptible Kernel (Basic RT) (PREEMPT_RTB) (NEW)
    > 5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL) (NEW)

ビルドを行います.コア数に応じて,並列化オプションを変更してください.かなりの時間を要しますので,ご注意ください.

fakeroot make -j4 deb-pkg

1.3.5. カーネルのインストール

カーネルのビルドが完了したら,インストールを行います.

sudo dpkg -i ../linux-headers-4.14.12-rt10_*.deb ../linux-image-4.14.12-rt10_*.deb

実行が終わったら,PCを再起動してください.起動時に,カーネルバージョンが選択できますので,ビルドしたもの(PREEMPT_RT と書かれているもの)を選択しましょう.
これで,リアルタイム対応のカーネルが利用可能になっているはずです.ターミナル上でコマンド uname -a を実行して,望みのカーネルが立ち上がっているか確認してください.

1.3.6. パーミッションの設定

リアルタイム対応のカーネル上で,パーミッションの設定を行います.そのために,新たにユーザグループとユーザを作成します.

sudo addgroup group_name
sudo usermod -a -G group_name user_name

group_nameuser_name は自由に設定可能です.

作成したユーザグループに対して,パーミッションを設定します./etc/security/limits.conf を編集し,次の設定を書き足します.

@group_name soft rtprio 99
@group_name soft priority 99
@group_name soft memlock 102400
@group_name hard rtprio 99
@group_name hard priority 99
@group_name hard memlock 102400

これで,リアルタイムカーネルのセットアップ作業はすべて終了です.

2. 実機とPCの接続

2.1. 安全への配慮

実機を動かす際には,危険が伴います.ここでは,安全に実機を動作させるための注意事項を記します.毎回,以下の点に注意するようにしてください.

  1. 機体が安定した土台に,仕様通りにしっかりと固定され,外れないことを確認してください.
  2. 通信ケーブルが機体とコントローラの両方にしっかりと刺さっていることを確認してください.
    ※ PC と機体は直接接続しません.必ずコントローラを介して接続します.
  3. external activation device をロボットに繋ぎ,いつでも緊急停止が行えるようにしながら,作業をしてください.

ここで,external activation を行ったとき,各関節は今の位置を保つように停止します.直ちに脱力しないことに注意してください.

2.2. ネットワーク設定

2.2.1. ネットワーク構成

PC とコントローラはイーサネットケーブルを介して  LAN で通信を行います.コントローラと機体は別のケーブルで接続します.
PC と機体を直接イーサネットケーブルで繋ぐことのないようにしてください.
ネットワークの設定には,静的な IP アドレスを利用するのが最も簡単です.両者が同じネットワーク上に存在する条件のもと,IP アドレスは自由に決めることができます.
簡単のため,ここでは,次のような設定を行うことにします.

Workstation PC Control
Address 172.16.0.1 172.16.0.2
Netmask 24 24

2.2.2. コントローラ側の設定

コントローラは既に,マニュアル通りのセットアップが完了していることを想定します.
まず,機体には何も繋がず,PC とコントローラのみを接続してください.
コントローラの IP アドレス(今回は 172.16.0.2)を用いて,ブラウザで次のページにアクセスします.

https://172.16.0.2

すると,コントローラの管理ページが開きます.次の図のように, [Setting] を選択してください.

設定画面が開けたら,左から [Network] のタブを選択し,静的 IP アドレスを設定します.

右下の [APPLY] ボタンを押して,コントローラ側の設定は完了です.これ以降は,機体とコントローラを接続して問題ありません.

2.2.3. PC側の設定

次に,PC 側の設定を行います.ここでは Ubuntu 16.04 での GUI による設定方法を紹介しますが, Ubuntu 18.04 でもほとんど変わりません.
デスクトップ右上のネットワークのアイコンを選択し,イーサネットの設定を編集します.新たに設定を追加しても問題ありません.

IPv4 の設定タブを開き,IP アドレスとネットマスクを先程決めたように設定します.

設定を保存し,現在の接続にこの設定を適用します.これで PC 側の設定も完了です.

2.2.4. 接続の確認

実際に接続に成功しているかを,サンプルプログラムを用いて確認します.次のコマンドを実行してください.

roslaunch franka_visualization franka_visualization.launch robot_ip:=172.16.0.2 load_gripper:=false

RViz が立ち上がり,ロボットの現在の状態が描画されれば,設定完了です.


これで,実際に Panda を動かす準備が整いました.後編では,ROS や MoveIt と連携させる方法について紹介します.

 

参考リンク

MoveIt の本家リポジトリへコミットする方法(WMD 2019 in Tokyo 準備編)
MoveItの各プランナーについての解説(WMD 2019 in Tokyo 準備編)

著者について

yuki.onishi editor

コメントを投稿するにはログインしてください。