Baxterの操作手順

1. 起動

1) Baxter本体の左後ろ下のスイッチを押して電源を投入。BaxterのディスプレイにRethinkRoboticsのロゴが表示される。
baxter_switch.jpg

2) Baxter操作用PCを起動し、Ubuntuにログインする(ID: vmrguser, Pass: ←に同じ)
baxter_pc.jpg
PCはBaxter前の作業机の下に配置してある(2016.03.16現在)

3) Baxterに接続できるようにする

 % cd ~/ros_ws
 % baxter.sh

baxter.shを実行することで、IP/portを設定してBaxterに操作PCから接続できるようになる。以下のようになればOK。
baxter_sh.png

注意1:上記はターミナルごとに実行する必要がある。
注意2:操作PCのIPアドレスもbaxter.shに指定する必要がある。現状操作PCは固定IPが設定されていない(DHCP)ので、IPアドレスが変更された際にはbaxter.sh内のIPアドレスを書き換える必要がある。
参考:baxterとの接続モードから抜けたい場合は'ctl-D'。
TODO:固定IPを操作PCに設定すること。

4) Baxterの駆動系をON(Baxterをエネーブル)
ここまではBaxternoの駆動系に電源が入っていない状態。ここでONにする。

 % rosrun baxter_tools enable.py -e 
 Robot Stopped: Attempting Reset...
 Resetting robot...
 Robot Enabled

注意:以下を実行すると、腕が若干ガクガクッと動く。


2. 終了

1) Baxterの駆動系をOFF(Baxterをディセーブル)

 % rosrun baxter_tools enable.py -d
 Robot Disabled

注意:disable後は自動的に下記の初期姿勢に戻るので、周囲状況に注意する必要あり。
baxter-disable-pose.jpg

2) Baxter本体の電源をOFF
ディスプレイも含めて全て消える。

3) 操作PCをシャットダウン


3. Baxterを操作するために必要なソフトウェア

Baxter操作用PC(Ubuntu)にすべてインストール済み。Baxter本体は何もいじらない(いじれない)。

1) ROS
現状Groovyが通常の方法でインストール済み

2) Baxterのros-package
ユーザ直下の"ros_ws"フォルダがbaxterのワークスペース。srcに関係するpackageのソースファイルなどが保存されている。
自分で作成したpackageについてもここに置いておくとやりやすい。
move_baxter, force_control, replay, move_msgsはIxchelさん作成のpackage。

注意:ROSのバージョンとBaxterのros-packageのバージョンを合わせること
参考http://sdk.rethinkrobotics.com/wiki/Workstation_Setup


4. Baxterの操作(スクリプト使用)

Baxter側から提供されているros topicを使用して操作することができる。

1) 使用できるros topicのリストを表示
/robot/***となっているものがBaxterからのros topic

 % rostopic list

2) 状態を取得する(JointAngle等)
 % rostopic echo /robot/***        (取得し表示し続ける)
 % rostopic echo -n 1 /robot/*** (1回分のデータのみ取得して表示)

3) コマンドを実行
 % rostopic pub /robot/***

<参考>
ServiceCall_replayJoints.txtでhand Calibrationも含めたコマンドが保存してあるので、それを参考にコマンドの説明を追加

注意1: topicはBaxterのenable/disable状態関係なく送信され受け取られる。そのため、Baxterがdisable状態の時に動作実行系のtopicを送信し、その後enable処理をしてしまうと、すでに受け取られていたtopicが実行される。
注意2: topicは一つのみ受け付けられ、未実行のものは上書きされる。


5. Baxterの操作(ソースから、自分の作成したros nodeから)

1) nodeひな形の作成
roscreate_packageを使用できる。依存パッケージ等を指定すると、自動的にCMakeList.txt, packageList.xmlを作成してくれる。
自分で他のpackageからCMakeList.txt, packageList.xmlをコピーして、中身を編集するのでもOK。
上記2ファイルには、package名や依存関係が定義され、catkin makeで使用される。

<参考>ここら辺は通常のROS nodeの作成方法と一緒なので、そちらを参考にすればよい。

2) 状態を定期的に取得
対象のtopicをsubscribe()する。

注意:subscribeごとに1スレッドのイメージ。複数subscribeする場合は、MultiTread.spiner()でnodeが複数subscribeを同時にできるように設定する必要がある。(通常のROS nodeでの注意と同じ)

3) サービスの提供
対象のサービスをadvertise()する。

<参考>Ixchelさんが作られたmove_baxterのinitialPose.h/cppが参考になる。


6. その他

1) 腕のキャリブレーション
腕全体を伸ばした状態になるので、Baxter周囲に2m以上の空間が必要。
1つに一度程度はキャリブレーションをということだったそうだが、現状実行していない。

2) グリッパのキャリブレーション
これは毎回起動時に行わないと、グリッパの操作ができない

 % rostopic pub /robot/****

3) 左手の位置精度
手先位置を指定して動かした場合、左手が右手に比べ約1cm高くなってしまう。腕のキャリブレーション後も同じ現象。

4) 状態取得のsubscribeの周期
100 or 200HzでBaxter側からは提供されている。

5) Baxterの力情報
各関節駆動系(elastic *** 要確認 )の負荷トルクから手先にかかっているであろう力を推定して出力している。
推定計算は全てBaxter内で行われている。rostopic echoで手先の推定値および各関節のトルク値を取得可能。精度はかなり悪いとのこと(変動が大きい+何も負荷がなくても0近くにならない等)

6) 軌道制御
JointTrajectoryServerというtopicがあり、時間とそれに対応したjoint angleをドカッと全て送ると、その通りに実行してくれる。
ただしjoint velocity limitが設定されてて、それを超えるような指令は、limit内に収まるようにBaxter側で勝手に変更して実行される。
limit値はどこで定義されているか不明。