本文参考https://blog.csdn.net/weifengdq/article/details/84374690

由于工程需要,需要Ubuntu16.04 + ROS与STM32通讯,主要有两种方案解决通讯,一种是在STM32上加载ROS库让STM32作为一个节点,发布自己的主题消息,在ROS上订阅STM32上发布的主题就可以接受消息,STM32订阅ROS上的主题即可接收消息。另一种方法是在ROS串口输出数据,STM32通过普通串口形式接收字符串。下面是我通过Ubuntu16.04 +  ROS通过串口助手测试ROS上收数据。

1、建立新的工作空间

mkdir -p ~/catkin_ws/src

2、打开catkin_ws/src

cd ~/catkin_ws/src

3、在src内创建一个C++工程

catkin_create_pkg serial_communication roscpp std_msgscd serial_communication/src
touch serial_communication.cpp
gedit serial_communication.cpp 

4、编辑serial_communication.cpp 内容如下:

#include <string>
#include <ros/ros.h> // 包含ROS的头文件
#include <boost/asio.hpp> //包含boost库函数
#include <boost/bind.hpp>
#include "std_msgs/String.h" //ros定义的String数据类型

using namespace std;
using namespace boost::asio; //定义一个命名空间,用于后面的读写操作unsigned char buf[12]; //定义字符串长度int main(int argc, char **argv)
{ros::init(argc, argv, "serial_communication"); //初始化节点ros::NodeHandle n;ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); //定义发布消息的名称及sulvros::Rate loop_rate(10);io_service iosev;serial_port sp(iosev, "/dev/ttyACM0"); //定义传输的串口sp.set_option(serial_port::baud_rate(115200));sp.set_option(serial_port::flow_control());sp.set_option(serial_port::parity());sp.set_option(serial_port::stop_bits());sp.set_option(serial_port::character_size(8));while (ros::ok()){//write(sp, buffer(buf1, 6));  //write the speed for cmd_val//write(sp, buffer("Hellq world", 12));read(sp, buffer(buf));string str(&buf[0], &buf[11]); //将数组转化为字符串//if (buf[10] == '\n'){std_msgs::String msg;std::stringstream ss;ss << str;msg.data = ss.str();ROS_INFO("%s", msg.data.c_str()); //打印接受到的字符串chatter_pub.publish(msg);         //发布消息ros::spinOnce();loop_rate.sleep();}}iosev.run();return 0;
}

5、保存后, 打开 ~/catkin_ws/src/serial_communication/CMakeLists.txt, 最后面加上:

add_executable(serial_communication src/serial_communication.cpp)
target_link_libraries(serial_communication ${catkin_LIBRARIES})

6、编译工作空间

cd ~/catkin_ws
catkin_make

7、开启一个新的终端 输入:

roscore

8、新开启另一个终端 输入:查看端口号

ls -l /dev |grep ttyUSB

9输入:   启动串口看是否有报错

rosrun serial_communication serial_communication

如出现下图,是因为端口号没有获取读写权限

10、输入:  获取权限

sudo chmod 777 /dev/ttyUSB0

11、最后结果:      使用串口发送的HELLO WORLD

转载于:https://www.cnblogs.com/qilai/p/11313308.html

Ubuntu16.04 + ROS下串口通讯相关推荐

  1. 在Ubuntu16.04 + ROS kinetic环境下安装TurtleBot3

    简介 ROS社区中丰富的功能包和机器人案例为我们的学习和研究提供了绝好的平台.TurtleBot系列是ROS社区中最流行的高性价比机器人平台,前后一共发布了三代. TurtleBot是ROS中最为重要 ...

  2. Ubuntu16.04 + ROS kinetic + 激光slam-cartographer ROS + 数据仿真 + Turtlebot3仿真

    一.Ubuntu16.04 +ROS kinetic的安装及问题解决 https://blog.csdn.net/GGY1102/article/details/107877937 二.Cartogr ...

  3. 【环境配置】使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 的镜像

    文章目录 使用 docker 制作一个ubuntu16.04 + ROS + pytorch-gpu 镜像的过程 1. 我的笔记本环境: 2. 环境配置过程 2.1. 在 ubuntu 16.04 中 ...

  4. 工作站Ubuntu16.04环境下安装nvidia显卡驱动

    近期实验室的工作站,由于teamviewer的原因又崩了.这次只能重装系统才得以解决.nvidia驱动安装步骤记录如下: 备注:工作站品牌为北京联众集群.配备有2块NVIDIA Titan xp 12 ...

  5. ubuntu16.04系统下谷歌浏览器不能拖入下载好的扩展程序离线包

    全地球人都知道,国内无法打开Chrome插件商店. 不过,国内有很多下载站,用户可以自行搜索,下载插件,然后离线安装. 但是,事情出现了变化. 最新版本的Chrome浏览器,主版本号为67,发布日期大 ...

  6. Ubuntu16.04系统下汉字显示为方框解决办法

    Ubuntu16.04系统下汉字显示为方框解决办法 问题详情 打开Ubuntu系统,发现中文变方框了 问题分析 之前中文显示好好的,突然就中文变方框了.原先以为是语言的问题,后面换成了别的中文样式,发 ...

  7. linux(ubuntu16.04)系统下Matlab2015b软件下载与安装

    Linux版Matlab2015b软件下载安装与运行 一.Matlab软件(Linux版)百度网盘下载 二.软件安装教程 三.软件破解步骤 四.打开软件和添加环境变量 五.创建linux桌面快捷方式 ...

  8. Faster R-CNN python版在Ubuntu16.04环境下配置编译

    Faster R-CNN python版在Ubuntu16.04环境下配置编译 1 电脑配置 2 安装显卡驱动 3 安装CUDA 3.1 安装CUDA 3.2 安装CUDNN 3.3 Samples测 ...

  9. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)...

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  10. Ubuntu16.04+ROS Kinetic环境下svo编译运行

    准备工作: 安装Sophus(这个库是维护的比较好的一个李群和李代数的库) 注: 其实你在运行其他版本的slam系统的时候大概率已经安装过,不过这里面执行一下,无伤大雅,也不会搞乱你的系统. #cat ...

最新文章

  1. [kuangbin带你飞]专题七线段树 更新ing
  2. 一个算法对于某个输入的循环次数是可以事先估计出来的_结合各路博客的EM算法理解...
  3. 手把手教你从零构建属于自己的小linux
  4. 为什么网络安全领域需要更多的女性?
  5. [转]wchar_t char std::string std::wstring CString 转换
  6. 京东公布3.8“她的节”消费数据:奢品服饰成交额同比增长170%
  7. 《规范敏捷交付:企业级敏捷软件交付的方法与实践》——3.11 观点总结
  8. JavaScript 的call 与 apply
  9. 【小聪明】图片消失在另一张图片里
  10. bci测试如何整改_电源动态响应测试,什么样的波形算合格?
  11. 如何使用简单的接入点扩展您的Wi-Fi网络
  12. 关于连接PostgreSQL时提示 FATAL: password authentication failed for user 连接用户名 的解决方法...
  13. 用matlab画相频曲线_matlab 幅频特性 相频特性代码,图片
  14. web漏洞扫描器-awvs
  15. ucGUI3.9版本快速移植构建
  16. 计算机组装与维护思考问题,计算机组装与维护心得体会
  17. Python基础知识从hello world 开始(第三天)
  18. 最新1000道高频Java面试题,包含25个技术栈等面试攻略(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构
  19. CANopen协议学习
  20. 对diff算法的理解

热门文章

  1. 程序员保持健康的7个秘诀
  2. rhel7 ifconfig command not found
  3. php中使用fsockopen实现异步请求
  4. 你需要简单了解JVM中的内存长什么样子
  5. Windows server 2012体验之活动目录回收站
  6. C#中获取本机IP地址,子网掩码,网关地址
  7. Office groove系统的术语
  8. Windows移动开发(五)——初始XAML
  9. Java中Math对象的属性与方法
  10. visual studio code .net 开发