ROS下进行串口通讯


前言

在使用工控机时,经常需要和其他主控进行信息交流,串口通讯作为使用最为广泛的形式,因此,了解如何在ros下进行串口的接发数据极为重要。

硬件条件:ubuntu18.04 安装ROS系统


一、安装串口功能包

sudo apt-get install ros-melodic-serial

二、串口接受程序

#include <iostream>
#include <ros/ros.h>
#include <serial/serial.h>
using namespace std;

//发送和接受数组
unsigned char senddata[5] = {0x01, 0x02, 0x03, 0x04,0x05};
unsigned char recdata[100] = {0};
int main(int argc,  char** argv) {
	//初始化ROS节点
    ros::init(argc,argv,"serial_port");
    ros::NodeHandle n;
	//定义串口对象
    serial::Serial sp;
    try{
            sp.setPort("/dev/ttyUSB0");
            sp.setBaudrate(115200);
            sp.setBytesize(serial::bytesize_t::eightbits);
            sp.setStopbits(serial::stopbits_t::stopbits_one);
            sp.setFlowcontrol(serial::flowcontrol_t::flowcontrol_none);
            
            serial::Timeout to=serial::Timeout::simpleTimeout(1000);

            sp.setTimeout(to);
            sp.open();
    }
    catch(serial::IOException& e){
            ROS_ERROR_STREAM("Unable to open port.");
            return -1;
    }

    if(sp.isOpen())
    {
        ROS_INFO_STREAM("Com is initialized");
    }
    else
    {
        return -1;
    }
    
    ros::Rate loop_rate(1);
    while(ros::ok()){
    	//发送数据
    	sp.write(senddata,5);
        //获取缓存区数据
        size_t n=sp.available();
        if(n != 0)
        {
            n = sp.read(recdata, n);
            for(int i = 0; i < n; i++)
            {
            //16进制显示接受到的数据
                cout << std::hex << (recdata[i] & 0xff) << " ";
            }
            cout << endl;
        }
		//	以1HZ的频率
        loop_rate.sleep();
    }
    return 0;
}

三 、查看串口号

1.查看当前终端串口号
ls /dev/tty*
2.插入临时使用的外设串口

3.再次查看终端串口号
ls /dev/tty*,看看此时多了那个串口号,就是接入的外设

4.假设该设备号为/dev/ttyUSB0,给设备赋予可读写权限
sudo chmod 777 /dev/ttyUSB0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值