• ROS入门(三) Ubuntu接入usb 读取超声测距


    我们选用超声模块接入Arduino,

    接线 Trig口接入2口,Echo接入3口。

    const int TrigPin = 2;
    const int EchoPin = 3; 
    int cm;
    unsigned long time_ms = 0;
    void setup() {
      Serial.begin(9600);
      pinMode(TrigPin, OUTPUT);
      pinMode(EchoPin, INPUT);
    }
    
    void loop() {
    
    digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin 
    delayMicroseconds(1); 
    digitalWrite(TrigPin, HIGH); 
    delayMicroseconds(1); 
    digitalWrite(TrigPin, LOW); 
    
    cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm 
    cm = (int(cm * 100.0)) / 100.0; //保留两位小数 
    time_ms = millis();
    //Serial.print(time_ms); 
    //Serial.println(" "); 
    Serial.print(cm); 
    Serial.println("");
    delay(33); 
    }
    View Code

    USB打印出来以int显示。

    #include <ros/ros.h>
    #include "geometry_msgs/Twist.h"
    
    #include <boost/asio.hpp>         // 包含boost库函数
    #include <boost/bind.hpp>
    #include <sstream>
    #include <string>
    
    using namespace std;
    using namespace boost::asio;
    unsigned char buf[24];
    
    int main(int argc, char** argv){
      ros::init(argc, argv, "echo");
      ros::NodeHandle n;
    
      ros::Publisher echo_msg = n.advertise<geometry_msgs::Twist>("echo/stop", 1000);
    
      io_service io;
      serial_port sp(io, "/dev/ttyACM0");         // 定义传输的串口
      sp.set_option(  serial_port::baud_rate(9600));                                  // 波特率
      sp.set_option(  serial_port::flow_control( serial_port::flow_control::none ) ); // 流量控制
      sp.set_option(  serial_port::parity( serial_port::parity::none ) );             // 奇偶校验
      sp.set_option(  serial_port::stop_bits(  serial_port::stop_bits::one ) );        // 停止位
      sp.set_option(  serial_port::character_size( 8 ) );                             // 数据位
    
    
    
      ros::Rate loop_rate(300);
      int num;
      int read_num = 0 ;
      int flag = 0;
      while(ros::ok())
      {
        int num = 0;
        char buf[1];
        boost::system::error_code err;
        read(sp, buffer(buf));
        if (err)
        {
            ROS_INFO("Serial port read_some Error!");
            return -1;
        }
        if(buf[0] == '
    ')
        {
          printf("%d 
    ", read_num/10);
          read_num = 0;
        }else {
          std::stringstream ss;
          ss << buf[0];
          ss >> num;
          read_num = read_num * 10 + num;
        }
    
        geometry_msgs::Twist velo;
        if(read_num/10 <= 30){
          //publish a msg
        }else{
    
        }
    
        loop_rate.sleep();
      }
      sp.close();
      return 0;
    }

    最后结合之前发过的ubuntu读取USB,读取距离并将数据传入。

    USB接入完成。

  • 相关阅读:
    【软件构造】Lab1基本流程指导及重难点分析
    【软件构造】关于java中List和Set数据结构不同实现方式和不同遍历方式时间效率的探讨与分析
    程序人生-Hello’s P2P
    WinterCamp2017吃饭睡觉记
    bzoj 3144 [Hnoi2013]切糕
    bzoj 1565 [NOI2009]植物大战僵尸
    bzoj 1061 [Noi2008]志愿者招募
    序列
    Philosopher
    时机成熟之时
  • 原文地址:https://www.cnblogs.com/TIANHUAHUA/p/8241334.html
Copyright © 2020-2023  润新知