ROS小车地盘

一、材料

树莓派3

L298N电机驱动板模块

12V充电电池块

电池分压模块

Arduino MEGA2560 R3

带编码器测速JGA25-371减速电机一对

ubuntu+ROS  kinetic

二、搭建步骤

连接部件,这里不做介绍,比较简单。

电机说明:JGA25-371减速电机

6-24VDC

126rpm转速的电机

测速的编码器是双通道霍尔效应编码器

减速比为1:34,也就是说,编码器侧转34圈

电机接线:

M+(红线) 电机电源+

M-(黑线) 电机电源-

Hgnd(绿线) 编码器地线

Hvcc(蓝线) 编码器电源(接5V电压)

HoutA(黄线) 信号A输出

HoutB(白线) 信号B输出


#define BAUDRATE     115200//通信波特率115200
#define LEFT            0
#define RIGHT           1
#define FORWARDS true
#define BACKWARDS false

volatile long encoderLeft = 0L;
volatile long encoderRight = 0L;

void initEncoders(){
  pinMode(2, INPUT);
  pinMode(3, INPUT);

  attachInterrupt(0, encoderLeftISR, CHANGE);  
  attachInterrupt(1, encoderRightISR, CHANGE);
}//初始化编码器

void encoderLeft(){
    encoderLeft++;
}

void encoderRightISR(){
    encoderRight++;
}

long readEncoder(int i) {
  long encVal = 0L;
  if (i == LEFT)  {
     noInterrupts();//关闭中断服务
    //detachInterrupt(0);
    encVal = encoderLeft;
    interrupts();//开启中断服务
    //attachInterrupt(0, Code_left, FALLING);
  }
  else {
    noInterrupts();//关闭中断服务
    //detachInterrupt(1);
    encVal = encoderRight;//把右编码器的值给encVal
    interrupts();//开启中断服务
    //attachInterrupt(1, Code_right, FALLING);
  }
  return encVal;//返回编码器的数据
}

/* 编码器复位函数 ,说白了就是编码器数据清零的函数*/
void resetEncoder(int i) {
  if (i == LEFT){
    noInterrupts();//关闭中断服务
    encoderLeft = 0L;//左编码器数值清零
    interrupts();//开启中断服务
  }
  else {
    noInterrupts();//关闭中断服务
    encoderRight = 0L;//右编码器清零
     interrupts();//启动中断服务
  }
}
/* 封装左右编码器复位函数*/
void resetEncoders() {
  resetEncoder(LEFT);
  resetEncoder(RIGHT);
}

 void setup() {
  Serial.begin(BAUDRATE);
  initEncoders();
  resetEncoders();
}//主函数初始化

void loop() {
   long lval=readEncoder(0);//读取左编码器的数值
   long rval=readEncoder(1);//读取右编码器数值
   Serial.print("left: ");//打印 left:
   Serial.print(lval);//打印左编码器数值
   Serial.print("; right: ");//打印字符串 ; right:
   Serial.println(rval);//打印右编码器数值
  delay(30);//延时缓冲,这个值不是固定的,这个值越小在电脑上显示数据的速度越快。
}



你可能感兴趣的:(arduino,&ROS)