rosserial_arduino学习笔记12《超声波传感器》

rosserial允许您轻松地将基于Arduino的硬件与ROS结合起来。本教程将解释如何将SRF08超声波传感器与Arduino配合使用。

你需要一个Arduino,一个SRF08超声波传感器,以及一种将超声波传感器连接到你的Arduino的方法,比如面包板或者一个protoboard。

SRF08 Arduino库可以从Sonar_srf08.zip下载。

1. 硬件设置

下面是为典型的Arduino连接SRF08传感器的图表。

唯一需要的额外电路是两个1.8kOhm上拉电阻,如下所示。

  • SRF08_CIRCUIT.png

 

2 程序

接下来,打开您的Arduino IDE并复制下面的代码。

/*
 * rosserial SRF08 Ultrasonic Ranger Example
 *
 * This example is calibrated for the SRF08 Ultrasonic Ranger.
 */
#include <Sonar_srf08.h> //SRF08 specific library专用的库
#include <WProgram.h>
#include <Wire.h>
#include <ros.h>
#include <std_msgs/Float32.h>


//Set up the ros node and publisher
//标准流程和程序
std_msgs::Float32 sonar_msg;
ros::Publisher pub_sonar("sonar", &sonar_msg);
ros::NodeHandle nh;


Sonar_srf08 MySonar; //create MySonar object

#define CommandRegister 0x00
int New_Address = 248; //0xF8
#define ResultRegister  0x02

float sensorReading =0;

char unit = 'i'; // 'i' for inches , 'c' for centimeters


//设置,要不就是读取传感器数据专用的设置
void setup()
{
  MySonar.connect();
  MySonar.changeAddress(CommandRegister, New_Address);
  New_Address += 4;
  nh.initNode();
  nh.advertise(pub_sonar);
}


long publisher_timer;

void loop()
{

  if (millis() > publisher_timer) {

   // step 1: request reading from sensor
   MySonar.setUnit(CommandRegister, New_Address, unit);

   //pause
  delay(70);

  // set register for reading
  MySonar.setRegister(New_Address, ResultRegister);

  // read data from result register
  //读取数据
  sensorReading = MySonar.readData(New_Address, 2);

  sonar_msg.data = sensorReading;
  pub_sonar.publish(&sonar_msg);
  //间隔4秒
  publisher_timer = millis() + 4000; //publish once a second

  }

  nh.spinOnce();
}

本例中的特殊代码是使用Arduino的Wire库

Wire是一个I2C库,可简化对I2C总线的读写操作。

也可以参考《基于ROS使用Arduino控制超声波传感器》:https://blog.csdn.net/qq_27806947/article/details/83279019

启动应用程序

roscore
rostopic echo sonar

猜你喜欢

转载自blog.csdn.net/qq_27806947/article/details/83591315
今日推荐