第一台机器小车是由左右两个电机驱动的机器人原型。本文简要描述了单个电机的控制、传感器的使用,机器小车的5种基本运动模块,以及通过传感器反馈控制机器小车的方法。

1. 电机、传感器等的基本定义

电机(当位于端口0时)正向转动:

fd(0);

电机反向转动:

bk(0);

电机停止转动:

off(0);

电机转速控制,第一个参数为端口值,第二个为电平值。电平值从-100到+100变化,其中-100代表电机全速反转,0代表电机停转,+100代表全速正转。如正向半速转动:

motor(0,50);

传感器(当位于端口15时),开关量,闭合返回“真/1”,断开返回“假/0”:

sensor(15);

系统等待/延时(2秒):

sleep(2.0);

2. 机器小车的5种基本运动模块

机器小车的复杂动作均可由一些基本的运动模块组合实现,例如前进模块、后退模块、转弯模块等。事先创建好这些模块,方便后面直接调用。

  • 前进,即两个电机同时正向转动
  • 后退,即两个电机同时反向转动
  • 左转,右侧电机正向转动,左侧电机反向转动
  • 右转,左侧电机正向转动,右侧电机反向转动
  • 停止,即两个电机同时停止转动

编写定义下面5种基本运动函数,其中LEFT_MOTOR和RIGHT_MOTOR为左右车轮电机对应的端口:

int LEFT_MOTOR=0;
int RIGHT_MOTOR=3;

void forward() {
  fd(LEFT_MOTOR);
  fd(RIGHT_MOTOR);
}
void backward() {
  bk(LEFT_MOTOR);
  bk(RIGHT_MOTOR);
}
void right() {
  fd(LEFT_MOTOR);
  bk(RIGHT_MOTOR);
}
void left() {
  bk(LEFT_MOTOR);
  fd(RIGHT_MOTOR);
}
void stop() {
  off(LEFT_MOTOR);
  off(RIGHT_MOTOR);
}

3. 通过传感器反馈控制机器小车

下图为双电机与双传感器小车,其传感器与电机信号采用正比控制关系,即传感器离光源越近,与其连接的电机转速越快。

通过传感器反馈控制机器小车

负反馈通常能将系统引导到目标状态。第一辆小车的传感器交叉连接电机,如图示,由于左侧传感器距离光源更近,它将接受比右侧传感器更强的刺激,从而驱动右侧电机以更快速度转动,使小车向左侧转动,朝光源方向移动。通过连续的矫正行为,最终找到光源。

正反馈通常能使系统远离稳定状态。第二辆小车改变传感器与电机的连接方式,如图示,同理,小车向右侧转动,远离光源,奔向黑暗。

参考:Fred G.Martin. 机器人探索:工程实践指南. 电子工业出版社. 2004