zoukankan      html  css  js  c++  java
  • 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接入完成。

  • 相关阅读:
    111
    关于Node.js中安装完express后不能使用express命令
    vscode tab转空格
    【终端使用】rm命令,删除文件获目录
    WebStorage是什么?
    Vue路由传参
    --save 和 --save-dev的区别
    第五篇,理解JS模块化编程思想
    第四篇,JavaScript面试题汇总
    第三篇,ajax 和 axios、fetch的区别
  • 原文地址:https://www.cnblogs.com/TIANHUAHUA/p/8241334.html
Copyright © 2011-2022 走看看