機構制御@ROS
- 角度調整
- シリンダー × 1 -> シリンダ(展)
- 台座把持
- シリンダー × 3(ソレノイドバルブ × 2)
- シリンダ(右)
- シリンダ(左)
- 自作シリンダ(小)
- シリンダー × 3(ソレノイドバルブ × 2)
- 台座読み取り
- リミットスイッチ × 2
- 角度調整
- モータ × 1
- リミットスイッチ × 1 (水平を0°として、180°の位置に取り付け -> 格納時に押される)
- ポテンショメータ
- 上下展開
- モータ × 1
- リミットスイッチ × 2
- 壁読み取り
- リミットスイッチ × 2
- モータ × 3
- ロリコン × 6
凡例:
- シリンダが伸びている: 1
- シリンダが縮んでいる: 0
- リミットスイッチが押されている: 1
- リミットスイッチが押されていない: 0
- 初期状態
- シリンダ: 縮んでる
- リミットスイッチ(台座): 押されていない
- 展開
- シリンダ(展), (右), (左), (小)を展開
- 回収
- if (指令が来た) かつ (リミットスイッチ(台座)が押されいる)
- シリンダ(小)を縮める: 小台座を倒す
- シリンダ(右), (左)を縮める: 台座を挟む
- シリンダ(展)を縮める: 持ち上げ
- 設置
- シリンダ(展)を展開: 下げる
- シリンダ(右), (左), (小)を展開
- 初期状態
- ポテンショメータ: 180°
- リミットスイッチ(180°): 押されてる
- リミットスイッチ(上): 押されてる
- リミットスイッチ(下): 押されてない
- リミットスイッチ(壁)1, 2: 押されてない
- 準備
- モータ2: ポテンショメータが90°になるまで展開
- モータ1: リミットスイッチ(下)が押されるまで縮める
- 展開
- モータ2: ポテンショメータが-10° (調整できるようにする)になるまで動かす
- 回収
- if (リミットスイッチ(壁)1, 2が両方押されたら)
- モータ2: テンショメータ1,2が90°になるまで縮める
- モータ1: リミットスイッチ(上)が押されるまで展開
- 設置
- if (リミットスイッチ(上)が押されいる)
- モータ2: ポテンショメータが-10° (調整できるようにする)になるまで動かす
- 数秒待つ(要調整) or すべて排出できたか検出する -> (要検討)
- モータ2: テンショメータが90°になるまで縮める
- ぼんぼり点灯をする
- nucleo_agentとtopicで相互通信し続ける形で指令を送る
- サーボ以外全部1, 0で送る
- 機構ごとにトピックを作成
- 台座機構指令: /daiza_clampトピック(mecha_control/msg/ActuatorCommands.msg)
- 台座機構状態: /daiza_stateトピック(mecha_control/msg/SensorStates.msg)
# mecha_control/msg/ActuatorCommands.msg
float64[] motor_positions # モータの位置や角度を制御するための値
bool[] motor_expand # モータとリミットスイッチによる0/1制御のオン指令
bool[] cylinder_states # エアシリンダのオン/オフ状態
# mecha_control/msg/SensorStates.msg
float64[] potentiometer_angles # ポテンショメータで測定される角度
bool[] limit_switch_states # リミットスイッチのオン/オフ状態
bool[] cylinder_states # シリンダの状態
- これもトピックで実装
- /mecha_stateトピック(mecha_control/msg/MechaState型)
# mecha_control/msg/MechaState.msg
# 0: 準備
# 1: 展開
# 2: 回収
# 3: 設置
# false: ぼんぼりオフ
# true: ぼんぼり点灯
byte daiza_state
byte hina_state
bool bonbori_state
cylinder_states
(シリンダの状態)0
: シリンダ(右)1
: シリンダ(左)2
: シリンダ(小)3
: シリンダ(展)
limit_switch_states
(リミットスイッチの状態)0
: リミットスイッチ(台座)
cylinder_states
(シリンダの状態)0
: シリンダ11
: シリンダ22
: シリンダ33
: シリンダ4
motor_positions
(モータの位置)0
: モータ2 -> 傾き
motor_expand
0
: モータ1 -> 上下
limit_switch_states
(リミットスイッチの状態)0
: リミットスイッチ(上)1
: リミットスイッチ(下)2
: リミットスイッチ(壁)13
: リミットスイッチ(壁)24
: リミットスイッチ(180)
potentiometer_angles
(ポテンショメータの角度)0
: ポテンショメータ
- /mecha_stateトピック(mecha_control/msg/MechaState型)
- 各アクチュエータを動かせるかテストする
- 各アクチュエータを動かすボタンを配置
- 角度指定系は角度を入力 -> "apply"
- GUIは凝らない
- 状態を表示できるようにする
- 言語:Python
- 入出力:
- 入力1:指令値
- GUIから
- 形式:boolとfloat64
- 入力2:
- 機構の状態
- /daiza_stateトピック(mecha_control/msg/SensorStates型)
- /hina_stateトピック(mecha_control/msg/SensorStates型)
- 出力:
- 機構の指令
- /daiza_clampトピック(mecha_control/msg/ActuatorCommands型)
- /hina_dastpanトピック(mecha_control/msg/ActuatorCommands型)
- 入力1:指令値
- 以下の3つの動作を指定できる
- 台座機構:展開、回収、接地
- 人形機構:展開、回収、接地
- ぼんぼり点灯:点灯開始
- 「機構」の状態を受け取って、指令をシーケンス的に指令するノード
- 言語:C++
- 入出力:
- 入力1:機構状態
- /mecha_stateトピック(mecha_control/msg/MechaState型)
- 入力2:
- 機構の状態
- /daiza_stateトピック(mecha_control/msg/SensorStates型)
- /hina_stateトピック(mecha_control/msg/SensorStates型)
- 出力:
- 機構の指令
- /daiza_clampトピック(mecha_control/msg/ActuatorCommands型)
- /hina_dastpanトピック(mecha_control/msg/ActuatorCommands型)
- 入力1:機構状態
- 機構指令のトピックを受け取り、機構の状態を返す
- 言語:Python
- 入出力:
- 入力1:
- 機構の指令
- /daiza_clampトピック(mecha_control/msg/ActuatorCommands型)
- /hina_dastpanトピック(mecha_control/msg/ActuatorCommands型)
- 入力2:
- GUIから手動でタイミングきめて入力してリミットスイッチなどの状態の更新
- (〜が押されるまで)の部分を更新
- 出力:
- 機構の状態
- /daiza_stateトピック(mecha_control/msg/SensorStates型)
- /hina_stateトピック(mecha_control/msg/SensorStates型)
- 入力1: