diff --git a/bot4cj/scripts/jump.py b/bot4cj/scripts/jump.py new file mode 100644 index 0000000..75c143f --- /dev/null +++ b/bot4cj/scripts/jump.py @@ -0,0 +1,50 @@ +# jump.py —— jump.mt 的 mtc DSL 源码(新格式) +# 跳跃:四腿 1 号关节(s2/s4/s6/s8)快速下蹲 10°→20°→30°(各 20ms)后 200ms 弹回站立。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/jump.py -o ../bot4cj/scripts/jump.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 3×20 + 200,T=460ms) ---- +stand() +Beep(10, 460) # spk.F=10 贯穿全程 +Delay(200) +for _ang in (10, 20, 30): + for _dev in ("s2", "s4", "s6", "s8"): + SetTo(_dev, _ang, 20) + Delay(20) +stand(200) # 弹回站立 +Delay(200) diff --git a/bot4cj/scripts/left-hand.py b/bot4cj/scripts/left-hand.py new file mode 100644 index 0000000..562e805 --- /dev/null +++ b/bot4cj/scripts/left-hand.py @@ -0,0 +1,54 @@ +# left-hand.py —— left-hand.mt 的 mtc DSL 源码(新格式) +# 左手:s1/s8 展开维持 1s 后收回;蜂鸣 10→400→1000→10 Hz 阶跃。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/left-hand.py -o ../bot4cj/scripts/left-hand.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 200 + 1000 + 20,T=1420ms) ---- +stand() +Beep(10, 200) # r1: F=10 +Delay(200) +Beep(400, 200) # r2: 仅变频率(原行无舵机变化) +Delay(200) +SetTo("s1", 0, 1000) # r3: s1 45→0,s8 0→150 +SetTo("s8", 150, 1000) +Beep(1000, 1000) # r3: F=1000 +Delay(1000) +SetTo("s1", 45, 20) # r4: 收回 +SetTo("s8", 0, 20) +Beep(10, 20) # r4: F=10 +Delay(20) diff --git a/bot4cj/scripts/left-turn.py b/bot4cj/scripts/left-turn.py new file mode 100644 index 0000000..25f0d56 --- /dev/null +++ b/bot4cj/scripts/left-turn.py @@ -0,0 +1,68 @@ +# left-turn.py —— left-turn.mt 的 mtc DSL 源码(新格式) +# 左转步态:对角腿轮换抬摆(s2/s6 ↔ s4/s8 为一组,s1/s5、s3/s7 配合)。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/left-turn.py -o ../bot4cj/scripts/left-turn.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +def legs(dev_a, dev_b, ang, dur): + SetTo(dev_a, ang, dur) + SetTo(dev_b, ang, dur) + +# ---- 动作序列(200+100+50+50+100+10+50+50+100+10+50,T=770ms) ---- +stand() +Beep(10, 770) # spk.F=10 贯穿全程 +Delay(200) +legs("s2", "s6", 45, 100) # r2 +Delay(100) +legs("s1", "s5", 90, 50) # r3 +Delay(50) +legs("s2", "s6", 0, 50) # r4 +Delay(50) +legs("s4", "s8", 45, 100) # r5 +Delay(100) +legs("s1", "s5", 45, 10) # r6 +Delay(10) +legs("s3", "s7", 0, 50) # r7 +Delay(50) +legs("s4", "s8", 0, 50) # r8 +Delay(50) +legs("s2", "s6", 45, 100) # r9 +Delay(100) +legs("s3", "s7", 45, 10) # r10 +Delay(10) +legs("s2", "s6", 0, 50) # r11 +Delay(50) diff --git a/bot4cj/scripts/lie-down.py b/bot4cj/scripts/lie-down.py new file mode 100644 index 0000000..2c7677b --- /dev/null +++ b/bot4cj/scripts/lie-down.py @@ -0,0 +1,48 @@ +# lie-down.py —— lie-down.mt 的 mtc DSL 源码(新格式) +# 趴下:四腿 1 号关节(s2/s4/s6/s8)10°→15°→20°→25°→30° 渐增(各 20ms)。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/lie-down.py -o ../bot4cj/scripts/lie-down.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 5×20,T=300ms) ---- +stand() +Beep(10, 300) +Delay(200) +for _ang in (10, 15, 20, 25, 30): + for _dev in ("s2", "s4", "s6", "s8"): + SetTo(_dev, _ang, 20) + Delay(20) diff --git a/bot4cj/scripts/record_stand.py b/bot4cj/scripts/record_stand.py new file mode 100644 index 0000000..de97150 --- /dev/null +++ b/bot4cj/scripts/record_stand.py @@ -0,0 +1,49 @@ +# record_stand.py —— record_stand.mt 的 mtc DSL 源码(新格式) +# 录制用:stand → s1/s3/s5/s7 依次到 60°/45°/30°/45° 姿态序列(各 200ms), +# 含 @Camera(合成帧)与激活的 @MPU6050_BIND(imu.npy 录制)。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/record_stand.py -o ../bot4cj/scripts/record_stand.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +MPU6050_BIND("mpu6050-0", "i2c-1", "0x68") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) # min_f 原为占位符(首行解析为 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +Camera("cam0", 640, 480, 30, 8) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(5×200,T=1000ms → 100 栅格行) ---- +# 注:原文件注释「首行不分解,共 81 步」已过时——99c1bc1 起首行也分解为 +# 20 个恒等微步,原版/编译版在现行 pybot 语义下均为 100 步且逐元素相等。 +stand() +Beep(10, 1000) # spk.F=10 贯穿全程(r2-r5 占位符继承首行) +Delay(200) +for _ang in (60, 45, 30, 45): + for _dev in ("s1", "s3", "s5", "s7"): + SetTo(_dev, _ang, 200) + Delay(200) diff --git a/bot4cj/scripts/rght-hand.py b/bot4cj/scripts/rght-hand.py new file mode 100644 index 0000000..f95026b --- /dev/null +++ b/bot4cj/scripts/rght-hand.py @@ -0,0 +1,57 @@ +# rght-hand.py —— rght-hand.mt 的 mtc DSL 源码(新格式) +# 右手(右前腿 s7/s8 为 rf,本脚本动 s3/s6 = 左后/左前?保持原脚本语义): +# s6 收回 → s3/s6 展开维持 1s → 收回;蜂鸣 10→400→1000→10 Hz 阶跃。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/rght-hand.py -o ../bot4cj/scripts/rght-hand.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 200 + 1000 + 20,T=1420ms) ---- +# spk.F 行级阶跃(pybot 微步对频率列不插值,直接取目标值),与 Beep 恒值段一致 +stand() +Beep(10, 200) # r1: F=10 +Delay(200) +SetTo("s6", 0, 200) # r2: s6 45→0 +Beep(400, 200) # r2: F=400 +Delay(200) +SetTo("s3", 0, 1000) # r3: s3 45→0,s6 0→150 +SetTo("s6", 150, 1000) +Beep(1000, 1000) # r3: F=1000 +Delay(1000) +SetTo("s3", 45, 20) # r4: 收回 +SetTo("s6", 0, 20) +Beep(10, 20) # r4: F=10 +Delay(20) diff --git a/bot4cj/scripts/std.py b/bot4cj/scripts/std.py new file mode 100644 index 0000000..81dda8f --- /dev/null +++ b/bot4cj/scripts/std.py @@ -0,0 +1,53 @@ +# std.py —— std.mt 的 mtc DSL 源码(新格式) +# Dashun 蜘蛛机器人站立姿态:10 舵机到位 + spk 10Hz 节拍 200ms。 +# +# 编译(产物覆盖同目录 std.mt): +# cd mtc && python -m mtc ../bot4cj/scripts/std.py -o ../bot4cj/scripts/std.mt +# +# 与原手写 std.mt 的执行等价性: +# 原 @Action 单行 delay=200,pybot 分解为 20 个恒等微步(首行不插值); +# 本脚本编译为 20 行 delay=10 的常量栅格(servo 段 10ms 到位后保持, +# spk.frequency 段覆盖全程),两者微步序列完全一致 +# (tests 验证:两版本 recorder 录制的 actions.npy 逐元素相等)。 + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用(对应原 std.mt 中的注释行): +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) # min_f 原为占位符 '-'(首行解析为 0) + +Servo("s1", 90, 0, 0, "pca9685-0", 0) # rb0 +Servo("s2", 180, 0, 0, "pca9685-0", 1) # rb1 +Servo("s3", -90, 0, 0, "pca9685-0", 2) # lb0 +Servo("s4", -180, 0, 0, "pca9685-0", 3) # lb1 +Servo("s5", 90, 0, 0, "pca9685-0", 4) # lf0 +Servo("s6", 180, 0, 0, "pca9685-0", 5) # lf1 +Servo("s7", -90, 0, 0, "pca9685-0", 6) # rf0 +Servo("s8", -180, 0, 0, "pca9685-0", 7) # rf1 +Servo("s9", 180, 0, 0, "pca9685-0", 8) # cam0 +Servo("s10", 180, 0, 0, "pca9685-0", 9) # cam1 + +# stand:10ms(一个栅格步)内到位并保持;首行即目标值,无爬升 +SetTo("s1", 45, 10) +SetTo("s2", 0, 10) +SetTo("s3", 45, 10) +SetTo("s4", 0, 10) +SetTo("s5", 45, 10) +SetTo("s6", 0, 10) +SetTo("s7", 45, 10) +SetTo("s8", 0, 10) +SetTo("s9", 90, 10) +SetTo("s10", 90, 10) + +# spk 10Hz 持续 200ms —— 对齐原行 spk.F=10 + delay=200;T=200(20 栅格行) +Beep(10, 200) diff --git a/bot4cj/scripts/stdd.py b/bot4cj/scripts/stdd.py new file mode 100644 index 0000000..d7f382e --- /dev/null +++ b/bot4cj/scripts/stdd.py @@ -0,0 +1,52 @@ +# stdd.py —— stdd.mt 的 mtc DSL 源码(新格式) +# 站立 → 四腿 1 号关节(s2/s4/s6/s8)10°→20°→30°→20°→10° 渐摆 → 收回站立。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/stdd.py -o ../bot4cj/scripts/stdd.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) # min_f 原为占位符(首行解析为 0) + +# 名 max ch rb=右后 lb=左后 lf=左前 rf=右前 cam=云台 +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + """全体回站立姿态(dur ms 线性到位);首行用默认 10ms = 瞬时跳变""" + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(对应原 @Action 7 行:200 + 5×50 + 200,T=650ms) ---- +stand() # 首行瞬时到位(原首行分解为恒等微步) +Beep(10, 650) # spk.F=10 贯穿全程(原各行占位符继承首行) +Delay(200) +for _ang in (10, 20, 30, 20, 10): + for _dev in ("s2", "s4", "s6", "s8"): + SetTo(_dev, _ang, 50) + Delay(50) +for _dev in ("s2", "s4", "s6", "s8"): + SetTo(_dev, 0, 200) # 收回站立 +Delay(200) diff --git a/bot4cj/scripts/t0.py b/bot4cj/scripts/t0.py new file mode 100644 index 0000000..8c8ada7 --- /dev/null +++ b/bot4cj/scripts/t0.py @@ -0,0 +1,60 @@ +# t0.py —— t0.mt 的 mtc DSL 源码(新格式) +# 对角步态(trot)单周期:左后/右前/左前/右后依次抬摆,spk.F 10→0→200→0 Hz。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/t0.py -o ../bot4cj/scripts/t0.mt + +Alias("A", "angle") +Alias("F", "frequency") + +# I2C("i2c-0", "/dev/i2c-0") # 原 t0.mt 中此行为注释 +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) # min_f 原为占位符(首行解析为 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200+20 + 500+20 + 500+20 + 500+20 + 500+20,T=2300ms) ---- +# 频率通道:Beep 段外 rest=0 = 静音(对齐原脚本 F=0 / 占位符继承 0 的行) +stand() +Beep(10, 220) # r1-r2: F=10(r2 占位符继承首行) +Delay(200) +SetTo("s1", 90, 20) # r2: left-behind +Delay(20) +SetTo("s1", 45, 500) # r3: stand(F=0 → 段间空隙回落静音) +Delay(500) +SetTo("s3", 90, 20) # r4: right-behind +SetTo("s7", 45, 20) +Delay(20) +SetTo("s3", 45, 500) # r5: stand + F=200 +SetTo("s10", 45, 500) +Beep(200, 500) +Delay(500) +SetTo("s5", 90, 20) # r6: right-front(F=0) +Delay(20) +SetTo("s5", 45, 500) # r7: stand +Delay(500) +SetTo("s7", 90, 20) # r8: left-front +Delay(20) +SetTo("s7", 45, 500) # r9: stand +Delay(500) +SetTo("s10", 90, 20) # r10: 云台回 90 +Delay(20) diff --git a/bot4cj/scripts/tilt-b.py b/bot4cj/scripts/tilt-b.py new file mode 100644 index 0000000..868775e --- /dev/null +++ b/bot4cj/scripts/tilt-b.py @@ -0,0 +1,51 @@ +# tilt-b.py —— tilt-b.mt 的 mtc DSL 源码(新格式) +# 后倾:s2/s4(后腿 1 号关节)10°→30° 渐摆后收回。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/tilt-b.py -o ../bot4cj/scripts/tilt-b.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 5×50 + 200,T=650ms) ---- +stand() +Beep(10, 650) +Delay(200) +for _ang in (10, 20, 30, 20, 10): + for _dev in ("s2", "s4"): + SetTo(_dev, _ang, 50) + Delay(50) +for _dev in ("s2", "s4"): + SetTo(_dev, 0, 200) +Delay(200) diff --git a/bot4cj/scripts/tilt-f.py b/bot4cj/scripts/tilt-f.py new file mode 100644 index 0000000..a35140a --- /dev/null +++ b/bot4cj/scripts/tilt-f.py @@ -0,0 +1,51 @@ +# tilt-f.py —— tilt-f.mt 的 mtc DSL 源码(新格式) +# 前倾:s6/s8(前腿 1 号关节)10°→30° 渐摆后收回。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/tilt-f.py -o ../bot4cj/scripts/tilt-f.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 5×50 + 200,T=650ms) ---- +stand() +Beep(10, 650) +Delay(200) +for _ang in (10, 20, 30, 20, 10): + for _dev in ("s6", "s8"): + SetTo(_dev, _ang, 50) + Delay(50) +for _dev in ("s6", "s8"): + SetTo(_dev, 0, 200) +Delay(200) diff --git a/bot4cj/scripts/tilt-l.py b/bot4cj/scripts/tilt-l.py new file mode 100644 index 0000000..00f3bab --- /dev/null +++ b/bot4cj/scripts/tilt-l.py @@ -0,0 +1,51 @@ +# tilt-l.py —— tilt-l.mt 的 mtc DSL 源码(新格式) +# 左倾:s2/s8(右侧腿 1 号关节)10°→30° 渐摆后收回。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/tilt-l.py -o ../bot4cj/scripts/tilt-l.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 5×50 + 200,T=650ms) ---- +stand() +Beep(10, 650) +Delay(200) +for _ang in (10, 20, 30, 20, 10): + for _dev in ("s2", "s8"): + SetTo(_dev, _ang, 50) + Delay(50) +for _dev in ("s2", "s8"): + SetTo(_dev, 0, 200) +Delay(200) diff --git a/bot4cj/scripts/tilt-r.py b/bot4cj/scripts/tilt-r.py new file mode 100644 index 0000000..4f92a57 --- /dev/null +++ b/bot4cj/scripts/tilt-r.py @@ -0,0 +1,51 @@ +# tilt-r.py —— tilt-r.mt 的 mtc DSL 源码(新格式) +# 右倾:s4/s6(左侧腿 1 号关节)10°→30° 渐摆后收回。 +# 编译:cd mtc && python -m mtc ../bot4cj/scripts/tilt-r.py -o ../bot4cj/scripts/tilt-r.mt + +Alias("A", "angle") +Alias("F", "frequency") + +I2C("i2c-0", "/dev/i2c-0") +I2C("i2c-1", "/dev/i2c-1") + +PCA9685("pca9685-0", "i2c-1", "0x40") + +# 姿态传感器按需启用: +# MPU6050_BIND("mpu6050-0", "i2c-1", "0x69") +# MPU6050_BIND("mpu6050-1", "i2c-1", "0x68") +# MPU6050_BIND("mpu6050-2", "i2c-0", "0x68") +# MPU6050_BIND("mpu6050-3", "i2c-0", "0x69") + +Speaker("spk", 2, 48000, 0.6, 5000, 0) + +# 名 max ch +_SERVOS = [("s1", 90, 0), # rb0 + ("s2", 180, 1), # rb1 + ("s3", -90, 2), # lb0 + ("s4", -180, 3), # lb1 + ("s5", 90, 4), # lf0 + ("s6", 180, 5), # lf1 + ("s7", -90, 6), # rf0 + ("s8", -180, 7), # rf1 + ("s9", 180, 8), # cam0 + ("s10", 180, 9)] # cam1 +for _name, _max, _ch in _SERVOS: + Servo(_name, _max, 0, 0, "pca9685-0", _ch) + +_STAND = [45, 0, 45, 0, 45, 0, 45, 0, 90, 90] + +def stand(dur=10): + for _i, _ang in enumerate(_STAND, 1): + SetTo(f"s{_i}", _ang, dur) + +# ---- 动作序列(200 + 5×50 + 200,T=650ms) ---- +stand() +Beep(10, 650) +Delay(200) +for _ang in (10, 20, 30, 20, 10): + for _dev in ("s4", "s6"): + SetTo(_dev, _ang, 50) + Delay(50) +for _dev in ("s4", "s6"): + SetTo(_dev, 0, 200) +Delay(200)