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:
1 parent
a80aaabffe
commit
0be9e5d0d2
13 files changed
+695
No files matched your search
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
Reference in new issue
Block a user