iRobotLab
開始行:
#contents
----
*概要 [#la6605f3]
-Linux組み込みボードのシリアルデバイス経由でプログラムに...
--Linux組み込みボードのシリアルデバイス
---RS-232Cレベルの信号を扱うシリアルデバイスである.具体...
--AGB65-RSC
---シリアルポート経由で受けた指令を元にサーボを制御する機...
--AGB65-232C
---RS-232Cレベルの信号とTTLレベルの信号には電圧互換がない...
--サーボモータ
---物体の位置などを制御量として目標値に追従するように自動...
*準備 [#t1cbbb8a]
**接続 [#r7a7ad46]
+Armadillo-300とAGB65-232Cを接続する.(接続ケーブル:ピンソ...
+AGB65-232CとAGB65-RSCを接続する.(接続ケーブル:付属の4ピ...
+AGB65-RSCのHVピンをジャンパピンで短絡させる.
+サーボを接続する.
+サーボ用電源にバッテリーを接続する.
#ref(connection_servocontroller.png,,67%);
--図 サーボ接続図
-Armadillo-300とAGB65-RSCのシリアル信号は電圧レベルが違う...
--Armadillo-300は232Cレベル
--AGB65-RSCはTTLレベル
#ref(DSC_0280.jpg,zoom,320x160)
--図 部品配置
#ref(DSC_0281.jpg,zoom,320x160)
--図 部品接続
*プログラム1 [#qb576910]
**AGB65-RSC の簡単な使い方 [#q311f4a9]
-以下のように配列を定義して値を代入する.
-- unsigned char output[7] = {255,3,4,2,0,127,20};
|シンクロバイト(255)|RSCにデータの通信開始を知らせるデ...
|ID(3)|RSCに設定された固有のID(AGB65シリーズを複数...
|送信バイト数(4)|送信される命令の(バイト)数.シンクロバ...
|命令1(2)|個別サーボ駆動設定|
|命令2(0)|サーボ番号.0はRSC基板上のP0に対応|
|命令3(127)|角度(min:0,max:255で,絶対位置を指定)|
|命令4(2)|指定した角度まで移動する速度(x15ms)|
-この配列をシリアル送信する.
**AGB65-RSCへの命令値とサーボ角度の関係について [#jd3c1bf8]
-命令値は0から255まで.
-命令値に対するサーボの可動角は0°から180°まで.(0°の位置は...
**対話的サーボ制御プログラムの作成 [#j1764aef]
-下記のプログラムを入力
#ref(servo_control.c)
--0から255までの値を入力すると、その値に応じてサーボモー...
--0-255以外の値を入力するとプログラムは終了する.
01:#include <sys/types.h>
02:#include <sys/stat.h>
03:#include <sys/ioctl.h>
04:#include <fcntl.h>
05:#include <termios.h>
06:#include <unistd.h>
07:#include <stdio.h>
08:#include <stdlib.h>
09:#include <string.h>
10:
11:#define SERIAL_PORT "/dev/ttyAM1"
12:
13:int main(){
14: int fd;
15: fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);
16: if(fd < 0){
17: printf("%s doesn't open it\n",SERIAL_PORT);
18: return -1;
19: }
20:
21: struct termios oldtio, newtio;
22: tcgetattr(fd, &oldtio);
23: newtio = oldtio;
24:
25: /* 通信方式の設定・非カノニカル入力処理選択 */
26: newtio.c_iflag = IGNPAR;
27: newtio.c_lflag = 0;
28:
29: /* read関数での文字待ちうけの設定 */
30: newtio.c_cc[VTIME] = 0; /* 値x0.1秒待つ */
31: newtio.c_cc[VMIN] = 1; /* 値の文字分だけ入力される...
32:
33: /* 通信速度の設定 */
34: cfsetspeed(&newtio, B9600);
35:
36: /* シリアルデバイス初期化処理 */
37: tcflush(fd, TCIFLUSH);
38: tcsetattr(fd, TCSANOW, &newtio);
39:
40: /* サーボ指令の雛形 */
41: /* 個別サーボ駆動モード, サーボコントローラID:3, サ...
42: unsigned char output[7] = {255,3,4,2,0,127,20};
43:
44: /* input(入力):サーボへの角度指令:有効範囲0(0°)-255...
45: /* 入力が有効範囲内の間,サーボをコントロール */
46: int input;
47: while(1){
48: printf("input value from 0 to 255[-1:end]:");
49: scanf("%d", &input);
50: if(input < 0 || input > 255){ /* サーボコントロー...
51: break;
52: }
53: /* output[5]がサーボへの角度指令 */
54: output[5] = (unsigned char)input;
55: write(fd, output, sizeof(output));
56: }
57:
58: /* シリアルデバイス終了処理 */
59: tcsetattr(fd, TCSANOW, &oldtio);
60: close(fd);
61: return 0;
62:}
*プログラム2 [#ga8d55fc]
**お題 [#qfaaae8a]
-数値を入力するとメーター上の対応する値を指すようにサーボ...
--メーターに合うように値を変換する必要がある.
*参考 [#x0d86e92]
**AGB65-RSC 命令仕様 [#sab072e6]
-マスタ(Armadillo-300)からRSCへの指示は,4〜17バイトの...
-バイトサイズ(8ビット)なので,表される数値は0〜255...
-数値は10進数.~
-&color(red){注)データは文字データではなく,数値(バイナ...
***基本形 [#u771de03]
-データの基本形は次の通り.[ ]内は1バイトを表す.()内は...
[シンクロバイト(255)] [ID(0-3)] [送信バイト数(1-14...
|シンクロバイト|RSCにデータの通信開始を知らせるデータ...
|ID|RSCに設定された固有のID(AGB65シリーズを複数接...
|送信バイト数|送信される命令の(バイト)数.シンクロバイト...
|命令|RSCに動作させたい命令.詳細は以下の表.|
***命令の説明 [#g6a71357]
|命令値|動作|方向|フォーマット|
|1|全サーボ駆動|送信|[255][ID][長(14)][命令(1)][P0][P1]....
|2|個別サーボ駆動|送信|[255][ID][長(4)][命令(2)][サーボ...
|3|全サーボパルス停止|送信|[255][ID][長(1)][命令(3)]|
|4|指定サーボパルス停止|送信|[255][ID][長(2)][命令(4)][...
|5|180°モード|送信|[255][ID][長(1)][命令(5)]|
|6|255解像度モード(default)|送信|[255][ID][長(1)][命令(6...
CENTER:(*)[Speed]は指定したサーボ位置までにかかる時間....
終了行:
#contents
----
*概要 [#la6605f3]
-Linux組み込みボードのシリアルデバイス経由でプログラムに...
--Linux組み込みボードのシリアルデバイス
---RS-232Cレベルの信号を扱うシリアルデバイスである.具体...
--AGB65-RSC
---シリアルポート経由で受けた指令を元にサーボを制御する機...
--AGB65-232C
---RS-232Cレベルの信号とTTLレベルの信号には電圧互換がない...
--サーボモータ
---物体の位置などを制御量として目標値に追従するように自動...
*準備 [#t1cbbb8a]
**接続 [#r7a7ad46]
+Armadillo-300とAGB65-232Cを接続する.(接続ケーブル:ピンソ...
+AGB65-232CとAGB65-RSCを接続する.(接続ケーブル:付属の4ピ...
+AGB65-RSCのHVピンをジャンパピンで短絡させる.
+サーボを接続する.
+サーボ用電源にバッテリーを接続する.
#ref(connection_servocontroller.png,,67%);
--図 サーボ接続図
-Armadillo-300とAGB65-RSCのシリアル信号は電圧レベルが違う...
--Armadillo-300は232Cレベル
--AGB65-RSCはTTLレベル
#ref(DSC_0280.jpg,zoom,320x160)
--図 部品配置
#ref(DSC_0281.jpg,zoom,320x160)
--図 部品接続
*プログラム1 [#qb576910]
**AGB65-RSC の簡単な使い方 [#q311f4a9]
-以下のように配列を定義して値を代入する.
-- unsigned char output[7] = {255,3,4,2,0,127,20};
|シンクロバイト(255)|RSCにデータの通信開始を知らせるデ...
|ID(3)|RSCに設定された固有のID(AGB65シリーズを複数...
|送信バイト数(4)|送信される命令の(バイト)数.シンクロバ...
|命令1(2)|個別サーボ駆動設定|
|命令2(0)|サーボ番号.0はRSC基板上のP0に対応|
|命令3(127)|角度(min:0,max:255で,絶対位置を指定)|
|命令4(2)|指定した角度まで移動する速度(x15ms)|
-この配列をシリアル送信する.
**AGB65-RSCへの命令値とサーボ角度の関係について [#jd3c1bf8]
-命令値は0から255まで.
-命令値に対するサーボの可動角は0°から180°まで.(0°の位置は...
**対話的サーボ制御プログラムの作成 [#j1764aef]
-下記のプログラムを入力
#ref(servo_control.c)
--0から255までの値を入力すると、その値に応じてサーボモー...
--0-255以外の値を入力するとプログラムは終了する.
01:#include <sys/types.h>
02:#include <sys/stat.h>
03:#include <sys/ioctl.h>
04:#include <fcntl.h>
05:#include <termios.h>
06:#include <unistd.h>
07:#include <stdio.h>
08:#include <stdlib.h>
09:#include <string.h>
10:
11:#define SERIAL_PORT "/dev/ttyAM1"
12:
13:int main(){
14: int fd;
15: fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);
16: if(fd < 0){
17: printf("%s doesn't open it\n",SERIAL_PORT);
18: return -1;
19: }
20:
21: struct termios oldtio, newtio;
22: tcgetattr(fd, &oldtio);
23: newtio = oldtio;
24:
25: /* 通信方式の設定・非カノニカル入力処理選択 */
26: newtio.c_iflag = IGNPAR;
27: newtio.c_lflag = 0;
28:
29: /* read関数での文字待ちうけの設定 */
30: newtio.c_cc[VTIME] = 0; /* 値x0.1秒待つ */
31: newtio.c_cc[VMIN] = 1; /* 値の文字分だけ入力される...
32:
33: /* 通信速度の設定 */
34: cfsetspeed(&newtio, B9600);
35:
36: /* シリアルデバイス初期化処理 */
37: tcflush(fd, TCIFLUSH);
38: tcsetattr(fd, TCSANOW, &newtio);
39:
40: /* サーボ指令の雛形 */
41: /* 個別サーボ駆動モード, サーボコントローラID:3, サ...
42: unsigned char output[7] = {255,3,4,2,0,127,20};
43:
44: /* input(入力):サーボへの角度指令:有効範囲0(0°)-255...
45: /* 入力が有効範囲内の間,サーボをコントロール */
46: int input;
47: while(1){
48: printf("input value from 0 to 255[-1:end]:");
49: scanf("%d", &input);
50: if(input < 0 || input > 255){ /* サーボコントロー...
51: break;
52: }
53: /* output[5]がサーボへの角度指令 */
54: output[5] = (unsigned char)input;
55: write(fd, output, sizeof(output));
56: }
57:
58: /* シリアルデバイス終了処理 */
59: tcsetattr(fd, TCSANOW, &oldtio);
60: close(fd);
61: return 0;
62:}
*プログラム2 [#ga8d55fc]
**お題 [#qfaaae8a]
-数値を入力するとメーター上の対応する値を指すようにサーボ...
--メーターに合うように値を変換する必要がある.
*参考 [#x0d86e92]
**AGB65-RSC 命令仕様 [#sab072e6]
-マスタ(Armadillo-300)からRSCへの指示は,4〜17バイトの...
-バイトサイズ(8ビット)なので,表される数値は0〜255...
-数値は10進数.~
-&color(red){注)データは文字データではなく,数値(バイナ...
***基本形 [#u771de03]
-データの基本形は次の通り.[ ]内は1バイトを表す.()内は...
[シンクロバイト(255)] [ID(0-3)] [送信バイト数(1-14...
|シンクロバイト|RSCにデータの通信開始を知らせるデータ...
|ID|RSCに設定された固有のID(AGB65シリーズを複数接...
|送信バイト数|送信される命令の(バイト)数.シンクロバイト...
|命令|RSCに動作させたい命令.詳細は以下の表.|
***命令の説明 [#g6a71357]
|命令値|動作|方向|フォーマット|
|1|全サーボ駆動|送信|[255][ID][長(14)][命令(1)][P0][P1]....
|2|個別サーボ駆動|送信|[255][ID][長(4)][命令(2)][サーボ...
|3|全サーボパルス停止|送信|[255][ID][長(1)][命令(3)]|
|4|指定サーボパルス停止|送信|[255][ID][長(2)][命令(4)][...
|5|180°モード|送信|[255][ID][長(1)][命令(5)]|
|6|255解像度モード(default)|送信|[255][ID][長(1)][命令(6...
CENTER:(*)[Speed]は指定したサーボ位置までにかかる時間....
ページ名:
既存のページ名で編集する