feat(bot4cj/scripts): 13 个 .mt 脚本的 mtc DSL 源码(新格式)

std/stdd/tilt-r/l/f/b/lie-down/jump/rght-hand/left-hand/left-turn/t0/record_stand 全部转为 Python DSL(mtc 编译器输入),与原 .mt 执行级等价:经 RobotStruct dry-run + EpisodeRecorder 验证,actions.npy 形状一致且逐元素相等,record_stand 的 imu.npy (100,8) 形状一致,编译零告警。

关键语义依据:pybot 微步对舵机列线性插值、对 spk.F 列不插值(行级阶跃),分别对应 SetTo 斜坡段与 Beep 恒值段;首行 delay=200 恒等分解对应 stand() 的 10ms 瞬时到位段。原 .mt 保留未动,可用各文件头注释中的编译命令重新生成。
This commit is contained in:
qing committed 2026-08-15 14:25:59 +08:00
1 parent a80aaabffe
commit 0be9e5d0d2
13 files changed
+695

No files matched your search

+50
View File
@@ -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)
+54
View File
@@ -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)
+68
View File
@@ -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)
+48
View File
@@ -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)
+49
View File
@@ -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)
+57
View File
@@ -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)
+53
View File
@@ -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)
+52
View File
@@ -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)
+60
View File
@@ -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)
+51
View File
@@ -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)
+51
View File
@@ -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)
+51
View File
@@ -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)
+51
View File
@@ -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)