135 lines
4.0 KiB
Markdown
135 lines
4.0 KiB
Markdown
# bot4cj
|
||
|
||
bot4cj是基于仓颉和 Linux I2C 接口的机器人硬件脚本解析器。
|
||
|
||
## 依赖库
|
||
libc、libpthread、liblua-5.4
|
||
|
||
You may need this
|
||
|
||
``` bash
|
||
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后使用如下方法使用:
|
||
|
||
```bash
|
||
cat ss/test.mt | cjpm run # 蜘蛛机器人脚本
|
||
```
|
||
|
||
## 动作脚本
|
||
|
||
项目中包含的动作脚本在ss文件夹下面,这些动作脚本的适配机器人型号如下
|
||
|
||
```textplain
|
||
# PCA9685
|
||
1号舵机(s1) => 左下水平关节
|
||
2号舵机(s2) => 左下垂直关节
|
||
3号舵机(s3) => 右下水平关节
|
||
4号舵机(s4) => 右下垂直关节
|
||
5号舵机(s5) => 右上水平关节
|
||
6号舵机(s6) => 右上垂直关节
|
||
7号舵机(s7) => 左上水平关节
|
||
8号舵机(s8) => 左上垂直关节
|
||
9号舵机(s9) => 云台1
|
||
10号舵机(s10) => 云台2
|
||
扬声器(spk) => 仅负责延时
|
||
```
|
||
|
||
适用的机器人建模文件[仓库链接](https://github.com/gopsc/Dashun)
|
||
|
||
### 机器人脚本语法(.mt)
|
||
|
||
**.bot文件是旧版动作脚本**
|
||
|
||
机器人脚本是行列式表格,每列之间以一个或多个空格、制表符分隔,每行以分号(;)结尾。
|
||
|
||
每个矩阵对象以@name 行开头,@ 行结束。
|
||
|
||
|
||
示例:
|
||
|
||
```mt
|
||
|
||
# 在 @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
|
||
@
|
||
|
||
```
|