ROS下使用串口发送数据

#include <stdio.h>
#include <string.h>
#include <ros/ros.h>
#include <cv_bridge/cv_bridge.h>
#include <ros/package.h>
#include <geometry_msgs/PoseStamped.h>
#include <nav_msgs/Odometry.h>    //数据格式
#include <serial/serial.h>        //ros串口
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>
#include <fstream>
#include <iostream>
using namespace std;serial::Serial ser;         //定义一个串口对象
ros::Subscriber serial_sub;     //订阅位姿节点
ros::Publisher read_pub;typedef union{              //定义一个联合体,用于double数据与16进制的转换
unsigned char cvalue[4];
float fvalue;
}float_union;static uint8_t s_buffer[11];   //分配静态存储空间void serial_sub_callback(const geometry_msgs::Twist::ConstPtr& msg)
{ROS_INFO("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]", msg->linear.x, msg->angular.z);float_union linear_x,angular_z;memset(s_buffer,0,sizeof(s_buffer));     //内存空间初始化为0linear_x.fvalue = msg->linear.x;angular_z.fvalue = msg->angular.z;//数据打包s_buffer[0] = 0xff;     //数据的帧头s_buffer[1] = 0xfe;s_buffer[2] = linear_x.cvalue[0];s_buffer[3] = linear_x.cvalue[1];s_buffer[4] = linear_x.cvalue[2];s_buffer[5] = linear_x.cvalue[3];s_buffer[6] = angular_z.cvalue[0];s_buffer[7] = angular_z.cvalue[1];s_buffer[8] = angular_z.cvalue[2];s_buffer[9] = angular_z.cvalue[3];//CRC        校验和从有效数据开始取异或即可s_buffer[10] = s_buffer[2]^s_buffer[3]^s_buffer[4]^s_buffer[5]^s_buffer[6]^s_buffer[7]^s_buffer[8]^s_buffer[9];ser.write(s_buffer,11);ROS_INFO("data send successful");
}int main(int argc, char** argv)
{ros::init(argc, argv, "serial_node");        //ROS串口节点名称ros::NodeHandle my_node;serial_sub = my_node.subscribe("/write", 1000, serial_sub_callback); //这里订阅一个写数据的话题,用于接收数据并进行发送。read_pub =  my_node.advertise<std_msgs::String>("read", 1000);try{//设置串口属性,并打开串口ser.setPort("/dev/ttyUSB0");ser.setBaudrate(115200);     //波特率115200serial::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 opened");}else{return -1;}//指定循环的速率ros::Rate loop_rate(50);while (ros::ok()){ros::spinOnce();loop_rate.sleep();}ser.close();return 0;
}

参考链接

[1]https://blog.csdn.net/qq_21830903/article/details/91457392

ROS下使用串口发送数据相关推荐

  1. ROS下进行串口通讯

    文章目录 前言 一.安装串口功能包 二.串口接受程序 三 .查看串口号 前言 在使用工控机时,经常需要和其他主控进行信息交流,串口通讯作为使用最为广泛的形式,因此,了解如何在ros下进行串口的接发数据 ...

  2. python树莓派串口通信实例_树莓派通过串口发送数据

    可以通过串口登陆树莓派,也可以通过串口向其他主机发送数据.树莓派的串口接受数据科技爱好者博客已经写过,可以参考这篇文章:树莓派与arduino串口通信实践.这篇文章教大家如果通过树莓派的串口发送数据. ...

  3. 安捷伦万用表--Agilent34401A数字万用表串口发送数据只上位机使用说明

    Agilent34401A数字万用表串口发送数据使用说明 安捷伦34410A万用表可以通过背后的RS232接口与电脑连接,进行串口通信. 仪表的串口有两种工作方式,一种是交互模式–既能接收命令,又能发 ...

  4. MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据

    MJKDZ PS2手柄控制OskarBot小车(一):Arduino串口发送数据 [目录] - 1.无线通信模块设置 - 1.1 设置参数 - 1.2 调试步骤 - 2.按键与通信格式 - 2.1 P ...

  5. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  6. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...

  7. 新手入门上位机开发 C#语言:PC串口发送数据

    题目概述: VS2017开发环境 PC串口发送数据 编程: namespace _004_7_28 { public partial class Form1 : Form {public Form1( ...

  8. C#.NET的界面编程--实例4:使用串口发送数据

    目录 一.[程序实现] 步骤1.先设计窗口,把各种需要的控制布局在窗口内 步骤2.制定应用的功能方案 步骤3.制定后台逻辑 二.[运行效果] 本节主要介绍了c# 使用线程对串口serialPort进行 ...

  9. STM32串口发送数据

    串口通信经常作为开发调试的工具,所以先介绍下串口通信. 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程 ...

最新文章

  1. 【Jmeter自学】badboy使用(三)
  2. [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)
  3. 浅析拯救小矮人的 nlogn 算法及其证明
  4. 计算机系统基础:虚拟存储管理知识笔记
  5. 嵌入式Linux系统编程学习之二十九线程的互斥
  6. java 线程 listview_android使用Thread实现json数据的传递,并且使用ListView显示
  7. 当前仍在编辑文章 - Java Excel处理 - 实操案例与方法手册
  8. 研发效能提升的八项实践建议
  9. Java 简历 专业技能可以这样写
  10. Win10最美SSH工具
  11. 软件工程第二次作业——模仿实现主流网页
  12. 如何把拼音放在文字的右侧,干货到,在WORD中怎么把拼音和汉字同排
  13. 领峰:炒黄金白银的关键是掌握技巧
  14. php英语大全,学习php编程语言 php常用英语单词
  15. git中提交显示!rejected,如何解决?
  16. php抓取新浪数据,新浪新闻详情页的数据抓取实例
  17. 计算机主机电源键,按电脑主机机箱电源键后,却没有任何反应疑难问题
  18. win7系统如何映射服务器,教你win7系统映射网络驱动器的操作方法
  19. c语言 万年历 蔡勒公式,C++实现简易万年历
  20. UC浏览器怎样收藏视频?UC浏览器收藏视频的方法

热门文章

  1. php 微信图文推送,微信单图文、多图文推送、列表中排序
  2. 2021届廊坊十五中高考成绩查询,廊坊市十五中举行2021届高考倒计时揭牌仪式
  3. 【python】打卡学习第一天
  4. MySQL之sql性能优化
  5. ubuntu系统安装中文输入法
  6. H5通过浏览器录制视屏或音频
  7. 电脑系统重装要多久?
  8. 详解 AMBA APB 5.0 最新标准协议(1)引言
  9. # python # # 分形 # Sierpinski Carpet 谢尔宾斯基地毯 续
  10. [转]Richedit使用大全