Ubuntu16.04 + ROS下串口通讯
本文参考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); //定义发布消息的名称及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下串口通讯的更多相关文章
- ubuntu16.04 ROS环境下配置和运行SVO
ubuntu16.04 ROS环境下配置和运行SVO https://blog.csdn.net/nnUyi/article/details/78005552
- Ubuntu16.04 LTS下apt安装WireShark
Ubuntu16.04 LTS下apt安装WireShark 安装与配置 首先通过apt安装WireShark: $ sudo apt install wireshark 会同时安装许多的依赖包,其中 ...
- 保姆级教程——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版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- Ubuntu16.04环境下的硬盘挂载
需求:在Ubuntu16.04系统下,挂载一个新的硬盘 第一步:查看目前已经存在的分区的状态 命令:df -l 如上图所示,并未看到要挂载的硬盘(sda)的状态. 第二步:查看计算机硬盘的状态(包括格 ...
- Ubuntu16.04系统下 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)、无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?”的方法
在Ubuntu16.04下安装软件,例如:sudo apt-get install lrzsz时提示: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) 无法 ...
- Ubuntu16.04环境下搭建基于三台主机的mysql galera cluster集群(实测有效)
(注意: (1)文中红色字体部分不一定需要操作 (2)由于word文档编辑的原因,实际操作时部分命令需要手动输入!!直接复制粘贴会提示错误!! ) 一 搭建环境: 1 Ubuntu16.04版本(系 ...
- java web下串口通讯
最近在做java串口通讯,主要是用个人电脑通过串口从RS485读取数据,并通过crc循环冗余校验,把接收正确的数据解析,插入数据库mysql,并用SSH技术把数据库数据以表格以及图表形式显示 ...
- faster-rcnn在ubuntu16.04环境下的超级详细的配置(转)
首先,下载好必须要的安装包.为了方便,我已经全部上传在了百度云. - ubuntu16.04系统 链接:http://pan.baidu.com/s/1geU8piz 密码:25mk - cuda8. ...
- ubuntu16.04环境下在docker上部署javaweb项目简单案例
因为一些原因,接触到了docker,经过一番研究,总算是有了一些自己的看法,有什么不对的地方,希望多多指教. 废话不多说,首先我这里使用的虚拟机安装的是ubuntu16.04版本,其他版本应该也可以. ...
随机推荐
- 在excel表格里,为所有数字添上绿色小三角
在excel表格里,为所有数字添上绿色小三角的方法有4种: 1. 为一个单元格添加:直接在单元格里添加一个英文的逗号 2. 为一列数据添加:选中要添加绿色小三角的列,选择 数据-->分列--&g ...
- springcloud微服务架构搭建入门笔记
注册管理服务器 应用入口配置 @SpringBootApplication @EnableEurekaServer public class GatewayApplication { public s ...
- HTML的文档结构与语法(二)
3.7 超链接标记 语法:<a 属性=“值”>对当前链接的描述</a> 作用:网页进行跳转 常用的属性: Href:链接的网址或ip或地址 值:就是具体的地址 T ...
- HDU - 1114 Piggy-Bank(完全背包讲解)
题意:背包重量为F-E,有N种硬币,价值为Pi,重量为Wi,硬币个数enough(无穷多个),问若要将背包完全塞满,最少需要多少钱,若塞不满输出“This is impossible.”. 分析:完全 ...
- UVA - 1001 Say Cheese(奶酪里的老鼠)(flod)
题意:无限大的奶酪里有n(0<=n<=100)个球形的洞.你的任务是帮助小老鼠A用最短的时间到达小老鼠O所在位置.奶酪里的移动速度为10秒一个单位,但是在洞里可以瞬间移动.洞和洞可以相交. ...
- MacOS Safari无响应卡死解决方法
之前也是用的好好的,突然一次进入一个网页就卡死了,强制退出,后面再重新进入Safari都会处于卡死状态,一直找不到解决方法,Safari也不能卸载重装,想着得等到更新系统或者重装系统,今天看到贴吧一个 ...
- Java算法练习——字符串转换整数 (atoi)
题目链接 题目描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负 ...
- sql拆分列 时间拆分 日、月、年
我想 查看今日访问人数 需要分组查询 就得 时间拆分 这两天百度 方法有很多 substring ... 但是 我这一列 是时间类型: 可以直接用 DATEPART() 函数用于返回日期/时间的单独部 ...
- Toolbar融入状态栏实现沉浸式遇到的问题
这里写一个纠结我一下午的问题,目的是写一个toolbar和状态栏相融合的沉浸式的样子,遇到各种各样的问题,还好最后慢慢解决了. 一.首先在活动中将状态栏设为透明 @Override protected ...
- hiho1482出勤记录II(string类字符串中查找字符串,库函数的应用)
string类中有很多好用的函数,这里介绍在string类字符串中查找字符串的函数. string类字符串中查找字符串一般可以用: 1.s.find(s1)函数,从前往后查找与目标字符串匹配的第一个位 ...