14. 在线模式和离线模式

14.1. 什么是在线模式

  • 顾名思义,在线模式就是需要kittenblock或者kblock app需要保持和机器人之间的实时通讯。通信方式包括串口、wifi或者蓝牙。
  • 机器人上需要预先烧录在线模式的固件。
  • kittenblock通过发送指令给机器人,机器人执行对应指令。

14.2. 什么是离线模式

  • 离线模式不需要保持和kittenblock或者app之间的通信。
  • 离线模式只能执行固化烧录的程序,更换程序需要重新执行烧录。
  • 一般情况下将图形化代码专为C++或者python固化到目标主板上。

14.3. 目标硬件支持情况

Rosbot和MiniLFR:

支持在线模式和离线模式,通过Kittenblock将图形化代码翻译成Arduino C++代码并烧录到主板上。

Microbit:

支持在线模式和离线模式,在线模式需要烧录一个空固件到microbit上,具体参看python部分教程。

Arduino电子体系:

目前离线模式基本完善了,支持市面上大部分传感器模块。在线模式需要自定义生成通信固件,目前正在完善中。

14.4. 在线模式指令集

在线模式指令设计本身参考的是工业上应用相当广泛的CNC指令系统,也就是G代码或者M代码。每一条指令以G或者M打头,后面跟着指令序号,之后是空格分隔开的参数。指令最后以回车换行符结束。

每个指令参数具体含义请参考下面的说明。

Rosbot

  • M0:打印固件版本号
  • M1 PIN MODE:设置IO模式,相当于pinMode
  • M2 PIN LEVEL:设置数字电平,相当于digitalWrite
  • M3 PIN:读取数字电平,相当于digitalRead
  • M4 PIN PWM: 模拟输出PWM,相当于analogWrite
  • M5 PIN:读模拟信号,相当于analogRead
  • M6 PIN frequency duration:蜂鸣器发声,相当于Tone函数
  • M7 PIN degree:舵机角度设置(已经取消,请参考后面舵机阵列指令)
  • M8:读取外部电源电压
  • M9 PIN PIX Red Green Blue:RGB灯显示,参数为引脚、像素位置(0为选中全部像素)、红、绿、蓝
  • M10 PIN:按键模块读取,按下返回1
  • M11 Brightness:设置RGB灯亮度
  • M20 String:点阵屏滚动显示字符串
  • M21 Matrix:点阵屏显示阵列16制编码像素,每个位一个像素,共计128个像素(一共16个字节)
  • M30 Level1 Level2 Duration:双IO电平设置,主要给MP3模块使用
  • M31 Pin1 Pin2 Duration:双IO引脚设置,主要给MP3模块使用
  • M100 Index degree speed: 单个步进电机运动控制
  • M101 distance: 步进电机小车直线运动,距离单位厘米
  • M102 degree: 步进电机小车原地转向,单位度
  • M103 diameter degree: 步进电机小车弧线运动,参数为直径和角度
  • M104 PPm:设置步进电机小车PPM(pulse per meter,每米脉冲个数,默认15141)
  • M105 basewidth:设置步进电机小车轮距
  • M200 index speed:设置直流电机速度,index从0到3分别对应M1A到M2B
  • M203:停止所有直流电机
  • M204 m1 m2 duration:双直流电机速度设置,带延时。(主要用于直流电机小车模式)
  • M205 m1 m2 m3 m4:四个直流电机速度设置
  • M209 vspeed hspeed rspeed:万向轮小车速度设置,参数分别为:垂直速度、横向速度和转动速度(已经内置了速度映射计算)
  • M212 index degree speed:舵机阵列设置。index值0~10对应rosbot主板上4~A3扩展引脚序号
  • M220:初始化PS2手柄,手柄接线如下:
PS2_DAT A3
PS2_CMD A2
PS2_SEL A1
PS2_CLK A0
  • M221 axis:读取PS2手柄遥杆值
  • M222 button:读取PS2手柄按键值
  • M250 trig echo:超声波测距

MiniLFR

  • M0:打印固件版本号
  • M1:读取巡线传感器值(校准后的值输出)
  • M2:去取当前PID参数设置
  • M3 P10.0 I0.015 D1500:设置pid参数,可以只设置某一个具体值,参数前要带上大写参数符号。
  • M4 index:读取巡线传感器阈值
  • M5 index threshold:设置巡线传感器阈值(由自动校准设置)
  • M6 Left Right:设置车头灯亮灭(1位亮,0为灭)
  • M7:读取超声波距离,需要插上超声波传感器不然只会返回999
  • M8:读取电池电压
  • M9 index:读取当前按键状态(1为左键,2为右键)
  • M11:读取红外解码值
  • M12 code:红外发射编码 (红外解码和发送都是16进制,最长4个字节)
  • M13 index red green blue:底部RGB灯颜色设置,参数index(0为全部灯,1为左灯,2位右灯)
  • M14 brightness: RGB灯亮度设置
  • M15 LCDstring:LCD显示字符串
  • M16 index red green blue:猫耳朵超声波RGB灯控制,参数index(0为全部灯,1为左灯,2位右灯)
  • M17 notes:蜂鸣器音乐,具体音调定义参考microbit定义
  • M18 freq duration: 蜂鸣器产生频率,相当于Tone函数
  • M19 note: 蜂鸣器播放某一个音符,60位C4,音符序号参考wiki
  • M20 String:点阵屏滚动显示字符串
  • M21 Matrix:点阵屏显示阵列16制编码像素,每个位一个像素,共计128个像素(一共16个字节)
  • M22 index red green blue:RGB灯环控制,参数index(0为全部灯,其余为对应像素位置)
  • M30 Level1 Level2 Duration:双IO电平设置,主要给MP3模块使用
  • M200 speedleft speedright:左右车轮速度
  • M201 x y:遥杆模式下x,y坐标设置(内置映射为左右轮速度)
  • M202 speedleft speedright duration:左右车轮速度,带延时
  • M209 difference:设置左右轮差速(出厂已经校准过了)
  • M210:读取左右轮差速
  • M300:左右轮速度校准,需要在i2c口插上陀螺仪模块
  • M301:巡线传感器校准,需要放在已经贴好的巡线地图上。
  • M999:软复位

指令大体上就这些了,具体可以参考固件源代码,也可在kittenblock点击对应模块后在arduino面板查看具体发送的指令格式。