Files
blackbird/bot4cj
qing d8b601ab9a feat(bot4cj/scripts): 12 个 mtc DSL 源声明 Camera——录制免注入
动作脚本统一加入 Camera("cam0",640,480,30,8)(record_stand.py 已有),
编译产物自带 @Camera 块,pybot --record 直接可录,取代 v2 的
"注入式录制"变体方案。手写 .mt 保持不动(bot4cj 共享、美化格式)。
2026-08-15 19:48:16 +08:00
..
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00
2026-07-28 12:44:07 +08:00

bot4cj

bot4cj是基于仓颉和 Linux I2C 接口的机器人硬件脚本解析器。

依赖库

libc、libpthread、liblua-5.4

You may need this

sudo ln -s /usr/lib/aarch64-linux-gnu/liblua5.4.so /usr/lib/aarch64-linux-gnu/liblua.so
sudo ln -s /usr/lib/x86_64-linux-gnu/liblua5.4.so /usr/lib/x86_64-linux-gnu/liblua.so

项目介绍

想要得到一个机器人软件通常比一个普通的软件更为困难,这是因为这个世界上的机器人五花八门,所以它们的软件往往都是独特的,所以我想写一种用于描述机器人硬件的通用的脚本。

bot4cj 基于仓颉编程语言和 Linux I2C 接口,提供了便捷的硬件控制能力,支持pca9685、mpu6050,我通常使用树莓派作为宿主机。

解析器

树莓派通过I2C接口连接pca9685后使用如下方法使用:

cat ss/test.mt | cjpm run	# 蜘蛛机器人脚本

动作脚本

项目中包含的动作脚本在ss文件夹下面,这些动作脚本的适配机器人型号如下

# PCA9685
1号舵机(s1)		=>	左下水平关节
2号舵机(s2)		=>	左下垂直关节
3号舵机(s3)	 	=>	右下水平关节
4号舵机(s4)		=>	右下垂直关节
5号舵机(s5)		=>	右上水平关节
6号舵机(s6)		=>	右上垂直关节
7号舵机(s7)		=>	左上水平关节
8号舵机(s8)		=>	左上垂直关节
9号舵机(s9)		=>	云台1
10号舵机(s10) 	=>	云台2
扬声器(spk)		=>  仅负责延时

适用的机器人建模文件仓库链接

机器人脚本语法(.mt)

.bot文件是旧版动作脚本

机器人脚本是行列式表格,每列之间以一个或多个空格、制表符分隔,每行以分号(;)结尾。

每个矩阵对象以@name 行开头,@ 行结束。

示例:


# 在 @Action 矩阵中,硬件变量的参数可以使用别名
@Alias
name      alias;
   A      angle;
   F  frequency;
@


# 定义I2C硬件
@I2C
 name        path;
i2c-0  /dev/i2c-0;
i2c-1  /dev/i2c-1;
@


# 定义pca9685硬件
@PCA9685
     name    I2C   path;
pca9685-0  i2c-1   0x40;
@


# 定义mpu6050硬件
@MPU6050
     name    I2C   path;
mpu6050-0  i2c-1   0x69;
mpu6050-1  i2c-1   0x68;
#mpu6050-2  i2c-0   0x68;
#mpu6050-3  i2c-0   0x69;
@

# 定义扬声器硬件
@Speaker
name  channels  sample_rate  volumn  max_f  min_f;
 spk         2        48000     0.6   5000      -;
@

# 定义舵机硬件
@Servo
 name   max  min  offset  controller  channel;
  s1    90     -       -   pca9685-0        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
@

# 行动矩阵为硬件变量输入参数
@Action
s1.A  s2.A  s3.A  s4.A  s5.A  s6.A  s7.A  s8.A  s9.A  s10.A  spk.F  spk.delay;	# column name
  45     -    45     -    45     -    45     -    90     90     10        200;	# stand
  90     -     -     -     -     -     -     -     -      -      -         20;	# left-behind

  45     -     -     -     -     -     -     -     -      -      0        500;	# stand
   -     -    90     -     -     -    45     -     -      -      -         20;	# right-behind

   -     -    45     -     -     -     -     -     -      -    200        500;	# stand
   -     -     -     -    90     -     -     -     -      -      0         20;	# right-front

   -     -     -     -    45     -     -     -     -      -      -        500;	# stand
   -     -     -     -     -     -    90     -     -      -      -         20;	# left-front

   -     -     -     -     -     -    45     -     -      -      -        500;	# stand
   -     -     -     -     -     -     -     -     -      -      -         20;	# stand
@