本記事では,World MoveIt Day 2019 in Tokyo(WMD 2019 in Tokyo) の会場にて動かすことのできるロボットアーム Panda を,実際にPCと接続して動かす方法を紹介します.
前編では,Panda を動かすPCの環境構築と,PCと実機の接続方法について紹介します.当日実際に機体を動かしてみたい方は,必見です!
Franka Control Interface (FCI) は, Panda の製造元である FRANKA EMIKA が提供する,オープンソースのライブラリです.
FCI には,C++ライブラリである libfranka と,これを ROS1 に対応させた ROSパッケージ群 franka_ros があります.これらのライブラリはイーサネットを通じて,PC と Panda との高速な双方向通信を行い,1 kHz でのリアルタイム制御と計測を実現します.
制御のインターフェースとしては,次の5種類がサポートされています.
また,同時に次の計測値を得ることができます.
ライブラリには他にも,シミュレーション等で役立つロボットの物理モデルや,運動学・動力学の計算に使える関数が用意されています.
ここでは,次の環境を想定します.
最も簡単な方法は,apt コマンドを利用する方法です.次のコマンドを実行してください.
sudo apt install ros-melodic-libfranka ros-melodic-franka-ros
ソースコードからビルドしたい方は,こちらを参考に行ってください.
次に,ロボットをリアルタイムで制御するために必要な,リアルタイムカーネルのセットアップを行います.
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_name
と user_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
これで,リアルタイムカーネルのセットアップ作業はすべて終了です.
実機を動かす際には,危険が伴います.ここでは,安全に実機を動作させるための注意事項を記します.毎回,以下の点に注意するようにしてください.
ここで,external activation を行ったとき,各関節は今の位置を保つように停止します.直ちに脱力しないことに注意してください.
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 と連携させる方法について紹介します.
コメントを投稿するにはログインしてください。
著者について