本文参考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_msgs
cd 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); //定义发布消息的名称及sulv ros::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

Ubuntu16.04 + ROS下串口通讯的更多相关文章

  1. ubuntu16.04 ROS环境下配置和运行SVO

    ubuntu16.04 ROS环境下配置和运行SVO https://blog.csdn.net/nnUyi/article/details/78005552

  2. Ubuntu16.04 LTS下apt安装WireShark

    Ubuntu16.04 LTS下apt安装WireShark 安装与配置 首先通过apt安装WireShark: $ sudo apt install wireshark 会同时安装许多的依赖包,其中 ...

  3. 保姆级教程——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版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  4. Ubuntu16.04环境下的硬盘挂载

    需求:在Ubuntu16.04系统下,挂载一个新的硬盘 第一步:查看目前已经存在的分区的状态 命令:df -l 如上图所示,并未看到要挂载的硬盘(sda)的状态. 第二步:查看计算机硬盘的状态(包括格 ...

  5. Ubuntu16.04系统下 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)、无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?”的方法

    在Ubuntu16.04下安装软件,例如:sudo apt-get install lrzsz时提示: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) 无法 ...

  6. Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)

    (注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一  搭建环境: 1 Ubuntu16.04版本(系 ...

  7. java web下串口通讯

       最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示   ...

  8. faster-rcnn在ubuntu16.04环境下的超级详细的配置(转)

    首先,下载好必须要的安装包.为了方便,我已经全部上传在了百度云. - ubuntu16.04系统 链接:http://pan.baidu.com/s/1geU8piz 密码:25mk - cuda8. ...

  9. ubuntu16.04环境下在docker上部署javaweb项目简单案例

    因为一些原因,接触到了docker,经过一番研究,总算是有了一些自己的看法,有什么不对的地方,希望多多指教. 废话不多说,首先我这里使用的虚拟机安装的是ubuntu16.04版本,其他版本应该也可以. ...

随机推荐

  1. Day 31:CSS选择器、常用CSS样式、盒子模型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 《ES6标准入门》(阮一峰)--4.字符串的扩展

    1.字符的 Unicode 表示法 ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点. "\u0061" ...

  3. HihoCoder第十一周:树中的最长路

    #1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中, ...

  4. Java容器--Queue

    ConcurrentLinkedQueue 参考 https://www.cnblogs.com/leesf456/p/5539142.html ConcurerntLinkedQueue一个基于链接 ...

  5. MySql索引原理分析

    面试 问:数据库中最常见的慢查询优化方式是什么? 同学A:加索引. 问:为什么加索引能优化慢查询?同学A:...不知道同学B:因为索引其实就是一种优化查询的数据结构,比如Mysql中的索引是用B+树实 ...

  6. POJ 2104 求序列里第K大 主席树裸题

    给定一个n的序列,有m个询问 每次询问求l-r 里面第k大的数字是什么 只有询问,没有修改 可以用归并树和划分树(我都没学过..囧) 我是专门冲着弄主席树来的 对主席树的建树方式有点了解了,不过这题为 ...

  7. 复选框全选、反选及根据值JS控制复选框默认选中事件

    HTML代码 <div class="col-sm-7"> <input type="checkbox" id="allAndNot ...

  8. 吴裕雄--天生自然C++语言学习笔记:C++ 判断

    判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). 下面是大多数编程语言中典型的判断结构的一般形式: 判断语句 if 语句 一 ...

  9. P 1034 有理数四则运算

    转跳点:

  10. redis性能测试方法

    redis本身设计为单线程服务器,性能本身并不随着多核而提高,但是会随着cpu本身而改变,AMD的可能只有Intel一半的性能,Intel是最好的选择. 性能会随着连接数的增多而下降,30000大概只 ...