读取拉线位移传感器(RS485协议)的ROS驱动包

目录

一、Windows环境调试

1.1下载、安装UT-890A驱动

1.2接线

1.3官方上位机调试

二、ubuntu系统测试通讯

三、ROS程序包解析数据

3.1创建ROS工作空间和驱动包

3.2 C++解析数据

3.3完整代码


软件环境:Windows 10 + VMware 16 + Ubuntu 20.04+ Noetic

硬件包括:布瑞特拉线位移传感器,RS485协议,1024分辨率(10bit),UT-890A串口线


一、Windows环境调试

1.1下载、安装UT-890A驱动

下载地址:UT-885、890、2003A、880、8801等驱动 

安装方法很简单,双击就行。

1.2接线

传感器接线说明:

 UT-890A串口线用接线端子引出,便于接线,RS485A(白)接T/R+,RS485B(绿)接T/R-

1.3官方上位机调试

使用流程:串口检测——>打开串口——>连接编码器

上位机右侧区域是对传感器进行设置,包括波特率,模式,置零等。

二、ubuntu系统测试通讯

将串口线的连接转到ubuntu系统下,使用串口调试助手查看数据是否能够正常接收。可以先把传感器设置成自动回传模式,也可以手动发布数据进行查询模式接收。

三、ROS程序包解析数据

刚开始想的是解析RS485协议,找了好多资料都不能用,包括一个ROS的modbus包,版本太老了不能用。后来意识到解析RS485协议是多此一举的,直接对串口数据进行解析就可以!

3.1创建ROS工作空间和驱动包

VSCODE配置ROS编译环境_ros 编译环境_可见一班的博客-CSDN博客

3.2 C++解析数据

 以这种通讯方式读取编码器值,也就是第4、5、6、7组合成编码器值,可以换算到拉绳拉出距离。

 

    try
    {
        ser.setPort("/dev/ttyUSB0");
        ser.setBaudrate(9600);
        serial::Timeout to = serial::Timeout::simpleTimeout(1000);
        ser.setTimeout(to);
        ser.open();
    }
    catch (serial::IOException& e)
    {
        ROS_ERROR_STREAM("Unable to open port ");
        return -1;
    }

    if(ser.isOpen()){
        ROS_INFO_STREAM("Serial Port initialized");
    }else{
        return -1;
    }

    ros::Rate loop_rate(20);
    while(ros::ok()){
        ser.write(Query_command,8);
        ros::spinOnce();
        if(ser.available()){
        ser.read(r_buffer,rBUFFERSIZE);
        ROS_INFO_STREAM("Reading from serial port");

        // 终端打印输出、转 int
        // for (int i = 0; i < rBUFFERSIZE; i++)
        // {
        //         // 16进制的方式打印到屏幕
        //         std::cout << std::hex << (unsigned int)(r_buffer[i]) << "  ";
        //         // int temp_number = std::stoi(std::to_string(r_buffer[i]),NULL,16);
        //         // std::cout << "temp_number: " << temp_number << std::endl;          
        // }
        // std::cout << std::endl;

        int output = 0;
        output = // std::stoi(std::to_string(r_buffer[3]), NULL, 16) * pow(16, 6) +
            std::stoi(std::to_string(r_buffer[4]), NULL, 10) * pow(16, 4) +
            std::stoi(std::to_string(r_buffer[5]), NULL, 10) * pow(16, 2) +
            std::stoi(std::to_string(r_buffer[6]), NULL, 10) * pow(16, 0);

        int distance = 0;
        distance = output * 100 / 1024;
        // std::cout << "output: " << output << std::endl;
        std::cout << "distance: " << distance << std::endl;

3.3完整代码

基于ROS的seria接收节点,上位机读取解析RS485协议的拉线位移传感器数据资源-CSDN文库

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可见一班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值