ROS进阶——串口通讯

环境:Ubuntu16.04+ROS Kinetic

ROS与底层串口通讯有两种方式:

  1. 底层作为ROS节点:https://blog.csdn.net/Kalenee/article/details/80644896
  2. 采用传统的串口通讯方式进行通讯:https://blog.csdn.net/Kalenee/article/details/82422196

 

一、简介

编写串口节点,通过ROS标准通讯格式完成ROS平台上的消息处理与接发,再通过串口下发数据。

 

二、配置

1、安装串口功能包

sudo apt-get install ros-kinetic-serial

api文档:http://wjwwood.io/serial/doc/1.1.0/classserial_1_1_serial.html

2、安装串口助手

sudo apt-get install cutecom 

 

三、编写串口节点

#include <ros/ros.h>
#include <serial/serial.h>

//串口类
serial::Serial ser;

#define sBUFFERSIZE 1000 // send buffer size串口发送缓存长度
#define rBUFFERSIZE 1000 // receive buffer size 串口接收缓存长度
unsigned char s_buffer[sBUFFERSIZE]; //发送缓存
unsigned char r_buffer[rBUFFERSIZE]; //接收缓存

//下发数据函数
void data_redownload() 
{
  ser.write(s_buffer, sBUFFERSIZE);
}

int main(int argc, char **argv) {
  ros::init(argc, argv, "serial_node");
  ros::NodeHandle nh;

  //打开串口
  try {
    ser.setPort("/dev/ttyUSB0");
    ser.setBaudrate(115200);
    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;
  }

  // 10hz频率执行
  ros::Rate loop_rate(10);
  while (ros::ok()) {
    ros::spinOnce();
    if (ser.available()) {
      size_t bytes_read;
      bytes_read = ser.read(r_buffer, ser.available());
    //接收到数据后处理
    }
    loop_rate.sleep();
  }
}

 

四、测试

1、连接设备并检查串口连接状态

dmesg | grep ttyS*

2、通过cutrcom串口助手检查串口设备是否能进行通讯,若因权限问题无法连接,运行以下命令给与用户权限,user_name为系统用户名字。

sudo usermod -a -G dialout user_name

3、运行节点进行通讯

 

参考

http://stevenshi.me/2017/10/11/stm32-serial-port-ros/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值