トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

認知ロボティクス研究室>Speecysロボット>プログラミング関係>プログラム・基本

up



Speecysプログラミングでは,多少関数間の依存等がある.ここでは使用するシーンに応じて代表的な流れを示し,理解の一助とする.

ほぼ共通の流れ

spsInitializeDeviceはSpeecysロボットを使用するための初期化関数であり,それに対応するspsCloseDeviceはSpeecysロボットの使用を終了するための関数である.ロボットのハードウェアにアクセスする場合は必須である.

int main(){
spsInitializeDevice
各種処理
spsCloseDevice
}

サーボコントロール(動作)

サーボはRS485経由でコントロールされる.よってspsOpenRS485,spsCloseRS485xによって初期化・終了処理しなければならない.
設定1はサーボの諸設定であり,なくてもデフォルトの値が用いられるので使用しなくても良い.また各種処理中に動的に設定を変えたい場合(トルク率を変えることによって擬似力制御を行いたいとか),必要に応じて当関数を用いてもよいがあまり素直な使い方とは思えない.
設定2に関しては安全に用いる為のものであり,使用者が気にしないならなくてもよい.具体的なプログラムは,サーボを動かす(トルクをオンにする)前に,ロボットの現在の状態(現在のサーボの角度)を取得してその場所を目標位置として動かすように指令する.これによってロボットの状態に対する初期化を行う.もしこれを行わなず次の操作1においてサーボのトルクをオンにすると,最悪の場合サーボが突然最大速度で動いてしまいロボットにとっても周囲の人間にとっても危険となる.
各設定が終われば,操作1によってトルクをオンにしてサーボに力を入れる.
また操作2を用いながら各動作を行わせる.
希望する動作が終わったら,操作3によってサーボの力を抜いて終了処理にはいる.

int main(){
spsInitializeDevice
spsOpenRS485
設定1:spsSetAngleLimitServo
spsSetComplianceServo
spsSetPunchServo
spsSetTorqueRatioServo
設定2:spsGetPresentDataServo
spsMoveServo
操作1:spsPowerOnOffServo
操作2:spsMoveServo
操作3:spsPowerOnOffServo
spsCloseRS485x
spsCloseDevice
}

サーボコントロール(状態取得)

サーボの情報を取得するプログラムの流れである.状態取得1はサーボコントロール(動作)での設定1で設定できる情報を取得するものである.また状態取得2はサーボの角度や温度などリアルタイムに変化する情報を取得するものである.ここで,spsSendxxxはサーボへ状態取得の指令を送るものであり,spsReadxxxは送った指令に対する返答を読み込むものである.両者は対になって用いられる.一方,spsGetxxxはspsSendxxxとspsReadxxxをまとめたものである.

状態取得1

int main(){
spsInitializeDevice
spsOpenRS485
状態取得1:spsGetSettingDataServo
spsSendSettingDataServo, spsReadSettingDataServo
spsCloseRS485x
spsCloseDevice
}

状態取得2

int main(){
spsInitializeDevice
spsOpenRS485
状態取得2:spsGetPresentDataServo
spsSendPresentDataServo, spsReadPresentDataServo
spsCloseRS485x
spsCloseDevice
}

注意

以下のようなプログラムは正常に動かなかった.

よって以下のように記述する必要がある.

サーボコントロール(一括制御)

この操作は,動作と状態取得両方を行えるものである.基本的には複数のサーボへ一度に(等差指令・状態取得の)指令を送る用途に使用される.サーボのメモリマップなど詳しく知る必要がある.

int main(){
spsInitializeDevice
spsOpenRS485
操作:spsSetLongDataServo
spsCloseRS485x
spsCloseDevice
}

頭部(カメラ以外)

頭部の制御は二種類.目を光らせるのと首を動かすものである.首は他のサーボと違ってPWM制御となっている.

int main(){
spsInitializeDevice
操作1:spsWritePWM
spsCloseDevice
}

int main(){
spsInitializeDevice
操作2:spsSetLedSenser
spsCloseDevice
}

注意

目のLEDにおけるidと色の対応関係

頭部(カメラ)

操作1は,システム起動後一回だけ実行.Speecysロボットをデフォルトで起動させた場合mmEyeなんとかが起動されているが,これのことか?
操作2はカメラのデータを取得する関数.timeoutを設定するかしないかの違いでどちらを使用してもよい.
操作3は画像データの変換であり,Speecysロボット上で実行しなくてもよい関数である.

カメラ初期化

int main(){
spsInitializeDevice
操作1:spsInitializeSaa7113
spsCloseDevice
}

カメラデータ取得

int main(){
spsInitializeDevice
操作2:spsGetCameraData, spsGetCameraData2
spsCloseDevice
}

画像データ変換

int main(){
操作3:spsYUV2RGB
}

主にRPU-100関係

操作1はRPU-100のA/Bボタンの状態取得である.
操作2はRPU-100のLedの操作・状態取得である.
操作3はバッテリーの残量の取得であり,相対量(%)ではなく絶対量である(V×10かな)

A/Bボタン

int main(){
spsInitializeDevice
操作1:spsIsPushSwitch
spsCloseDevice
}

Led関係

int main(){
spsInitializeDevice
操作2:spsSetLed, spsGetLed
spsCloseDevice
}

バッテリー量

int main(){
spsInitializeDevice
操作2:spsGetBatteryVoltage
spsCloseDevice
}

センサーボード関連

センサーボードに対する各種処理.
操作1はハードウェアの初期化であり,フレームが歪んだりサーボを交換したり等ハードウェア的に変更がなければ一回実行するだけでよい.
操作2はセンサー基盤の通信速度であり,これを変更した場合には操作1にて再度初期化をしなければいけない.
操作3はセンサーボードの各種情報(Gセンサー・ジャイロセンサーの情報)を取得する関数である.spsSendxxxは状態取得の指令を送るものであり,spsReadxxxは送った指令に対する返答を読み込むものである.両者は対になって用いられる.一方,spsGetxxxはspsSendxxxとspsReadxxxをまとめたものである.

初期化・設定

int main(){
spsInitializeDevice
操作1:spsInitSenser
操作2:spsSetBaudRateSenser
spsSendDataSenser, spsReadDataSenser
spsCloseDevice
}

使用

サーボのハードウェア設定

この操作はサーボのハードウェアをいじくるものであり,非常に危険である.最悪の場合Speecys社に送り返すかロボットをばらして設定しなければいけなくなる.完全に理解していない場合,以下の操作は使用してはいけない.

int main(){
spsInitializeDevice
spsOpenRS485
操作:spsSetIDServo, spsSetIDandBaudRateServo
spsCloseRS485x
spsCloseDevice
}

Last-modified: 2023-03-29 (水) 10:47:54