Product
CR Hand
¥297,000 税込
この商品は送料無料です。
現在ご注文後2週間目処でご発送可能です。
CR Handは"本当に"人間と同等サイズの6自由度ロボットハンドです。手首取付面から指先までの距離はわずか172mmです。このコンパクトな筐体に全てのモーター・コントロールボックスが納まっており、USBケーブルと電源を接続すればすぐに動作が可能です。高精度FDM 3Dプリンタを活用することでお求めやすい価格を実現しました。教育・研究開発用途に最適です。
<主な特徴>
13関節6モーターにより多彩な動作を実現。
精密なピンチングも力強いグラスピングも可能。
バネを含んだ関節が柔軟なインタラクションや衝突時の破損の回避を実現。
指先はM2ねじで着脱可能。様々なセンサや素材を取り付けて使用できます。
<製品仕様>
重量: 326g
電圧: 6V
モータ牽引力: 最大18N(1指あたり)
材料: PTEG
<内容物一覧>
CR Hand 本体
6V電源アダプタ
USB2.0ケーブル(mini-Bタイプ)
接続フランジ(協働ロボット向けISO 9409-1-50-4-M6 UR, TM等に対応)
ネジ類 M3L8 x4, M6L10 x4
<概寸・取付部寸法>
<指先着脱部寸法>
<使用方法>
1.GUIから使用する場合
Pololu社のドライバとMaestro Control Centerをダウンロードして使用可能です。Maestro Control Centerは、ロボットハンドの操作や設定を直感的に行えるツールです。主な特徴は以下の通りです。
リアルタイム制御: 各モーターを個別に制御でき、スライダーをドラッグするだけでモーターの位置を調整可能です。
クロスプラットフォーム対応: WindowsおよびLinuxに対応しています。
スクリプト作成と実行: 内蔵のスクリプトエディタを使用して、簡単なスクリプトを作成・編集し、直接実行できます。これにより、動作の自動化やカスタマイズが可能です。
モーションの記録と再生: モーターの動作をシーケンスとして記録し、再生する機能があります。これにより、複雑な動作パターンを簡単に作成・編集できます。
これらの機能により、CR Handの動作を直感的かつ効率的に設定・制御できます。
2.プログラムから使用する場合
内蔵する制御基板Pololu Micro Maestro 6-Channel USB Servo Controllerはシリアル通信に対応しており、Pythonなどのプログラミング言語を使用してシリアル通信を行うことでCR Handを使用することが可能です。なお、シリアル通信を行う際は事前に前述のMaestro Conrol CenterのSerial Settingより、Serial modeを”USB Dual Port”に設定しておいて下さい。
以下はProcessingを使用してキーボード入力からハンドの姿勢の操作する場合の例です。
import processing.serial.*;
// シリアルオブジェクト
Serial myPort;
// 各キー('1'~'7')を押した時に設定するサーボ位置を定義
// index: 0〜6がCh0〜Ch5に対応
// 例: scenarios[0]がキー'1'を押した時に設定する各サーボの位置
int[][] scenarios = {
{4000, 4000, 4000, 4000, 4000, 4000}, // '1' Open
{8000, 7000, 4000, 8000, 8000, 8000}, // '2' Pinch_open
{8000, 7000, 6000, 8000, 8000, 8000}, // '3' Pinch_close
{8000, 4000, 4000, 4000, 4000, 4000}, // '4' Grasp_open
{8000, 6000, 8000, 8000, 8000, 8000}, // '5' Grasp_close
{4000, 4000, 8000, 8000, 8000, 8000}, // '6' Thumb_pinch_open
{4000, 8000, 8000, 8000, 8000, 8000} // '7' Thumb_pinch_close
};
void setup() {
size(400, 200);
// 利用可能なシリアルポートを表示(デバッグ用)
println(Serial.list());
// MaestroのCommand Portに接続(適宜ポート名を変更)
myPort = new Serial(this, "COM4", 9600);
println("Connected to COM4");
// 初期状態として、例えばキー'1'のポジションに合わせてみる
setAllServos(scenarios[0]);
}
void draw() {
// 特に処理なし
}
// キーが押されたときに呼ばれる
void keyPressed() {
// '1'~'7' のキーであるか判定
if (key >= '1' && key <= '7') {
int index = key - '1'; // '1'が押されたら0、'2'なら1…と計算
if (index >= 0 && index < scenarios.length) {
// scenarios[index]で定義した全サーボの姿勢を設定
setAllServos(scenarios[index]);
}
}
}
// 全サーボ(Ch0〜Ch5)の位置を指定する関数
void setAllServos(int[] positions) {
for (int ch = 0; ch < 6; ch++) {
setServoPosition(ch, positions[ch]);
}
}
// サーボ位置を設定する関数
void setServoPosition(int channel, int target) {
byte[] command = new byte[4];
command[0] = (byte)0x84; // サーボ位置設定コマンド(0x84)
command[1] = (byte)channel;
command[2] = (byte)(target & 0x7F); // 下位7ビット
command[3] = (byte)((target >> 7) & 0x7F); // 上位7ビット
println("Sending command to Ch" + channel + ": "
+ hex(command[0]) + " "
+ hex(command[1]) + " "
+ hex(command[2]) + " "
+ hex(command[3]));
println("Target: " + target + " (" + (target * 0.25) + "µs)");
myPort.write(command);
}
<アンケート>