ROS项目开发实战(一)——STM32与ROS串口通信

标签: ROS底层通信 stm32串口通信 ROS与STM32通信
156人阅读 评论(1) 收藏 举报
分类:

    本文主要发布一些作者从零开始开发ROS的项目实战经验,包括一些经验与本文遇到坑时的解决方案,ROS因为版本不同与开发环境不同在实际开发中会遇到各类问题,下面就细细道来。


一、环境搭建

    本人开发环境 ——上位机:MAC主机+PD虚拟机+Ubuntu12.04(64位)+Hydro,底层:STM32F407    

先说下为什么是PD虚拟机,现在主流的电脑安装Ubuntu容易出现没有无线网卡驱动的问题(如果你的电脑有请忽略),虚拟机不用担心网卡问题,并且虚拟机安装Ubuntu更方便(如果你的电脑是UEFI,安装Ubuntu将会遇到一些麻烦),相比之下虚拟机其实用起来更方便一些(本人直观感受)。

现在很多人用Ubuntu14.04+indigo,本人也建议用14.04,本文通信代码在两个版本下都可以顺利运行。


二、STM32与ROS串口通信

    本人STM32串口通信模块(当然用山外助手也是一样可行的):

  

图 1

  在ROS下主要运用asio,本人找了许多方法,这种比较简洁实用,接下来就是在ROS下设置与底层相匹配的通信协议格式了,按照图1相应的设置程序如下:

#include <boost/asio.hpp>                  
#include <boost/bind.hpp>
//asio头文件

#include <ros/ros.h>
#include<stdio.h>
#include <std_msgs/String.h>  
//ros头文件 
using namespace std;
using namespace boost::asio;  
using namespace ros;  
    
io_service iosev;
serial_port sp(iosev,"/dev/ttyUSB0");
//全局定义主要是为了在ros回调函数中使用,/dev/ttyUSB0根据自己实际情况修改
之后是ros主程序:
int main(int argc, char** argv) {
    ros::init(argc, argv, "boost");       //
    ros::NodeHandle n;                      //
    
    sp.set_option(serial_port::baud_rate(115200));
    sp.set_option(serial_port::flow_control(serial_port::flow_control::none));
    sp.set_option(serial_port::parity(serial_port::parity::none));
    sp.set_option(serial_port::stop_bits(serial_port::stop_bits::one));
    sp.set_option(serial_port::character_size(8));//按照图1进行通信设置
    
    ros::spin();
    unsigned char date[6]={0x55,0x7a,0x01,0x07,0x00,0xd7};
//通信命令,按照自己的实际情况修改,底层一般是16进制按位校验,位的声明可为unsigned char
    
     write(sp, buffer(date, 6));//命令写入
     read(sp, buffer(buf,100));//接收底层反馈信息,buf若显示未定的可自行定义
     iosev.run();
    return 0;
}
以上命令只是发送一次,在ROS下最好创建cmd_pub与cmd_sub命令接收与发布者,并在/STM32_cmd话题上进行信息交互,即可完成命令的实时发布与获取,以下部分可自己编写。(提示:在main中创建pub与sub,将date与write放在sub回调函数中。)


查看评论

基于STM32的rosserial_client的节点开发

写在最最最开头:先自我吐槽一下题目,写的跟毕设论文题目一样,希望大家不要在意,主要看内容~_~ 本文的主要目的就是介绍一下如何在stm32上开发ros了,或者说是移植arduino东西到ros上(顺...
  • wubaobao1993
  • wubaobao1993
  • 2017-04-26 17:10:43
  • 3390

ROS下使用stm32 与rosserial进行通信的开发说明及源代码示例

关于stm32下的ROS开发环境介绍说明,此开发环境是在Linux下使用stm32的标准库“STM32F10x_StdPeriph_Driver3.5”,进行stm32开发,整体开发框架已搭建完成,用...
  • ykevin0510
  • ykevin0510
  • 2017-05-26 00:04:42
  • 1591

ROS下使用STM32

本文待补充,先码在这儿 参考知乎大神对话:http://www.zhihu.com/question/32120691 1.直接用rosserial:    http://wiki.ros.org...
  • lmg2015
  • lmg2015
  • 2016-08-31 16:16:30
  • 4030

Linux ROS与嵌入式的串口通信

1.根据ros wiki的官方教程 学习即可,并且有许多例子可供学习       http://wiki.ros.org/rosserial_arduino/Tutorials 2.用ASIO读写...
  • u013019296
  • u013019296
  • 2017-04-11 13:51:51
  • 1170

ROS里程计之STM32底层编码器(一)

什么是编码器?一、编码器编码器是一种广泛使用的位置式传感器,它能够检测细微的运动,其输出为数字信号。编码器中应用最为广泛的就是光电编码器,可以用来进行角度的测量。可以用来测量位置,测量速度。盗一下某位...
  • zhu751191958
  • zhu751191958
  • 2018-02-13 16:43:37
  • 149

ROS的学习(十八)使用rosserial创建一个publisher

在arduino开发人群中,经常把源代码称为“sketch”,之后,我们就会使用这个惯例。打开一个终端,启动arduino: arduino      将arduino开发板连接到电脑的usb...
  • xiaocainiaoshangxiao
  • xiaocainiaoshangxiao
  • 2013-11-01 12:04:31
  • 8090

ros与下位机通信常用的c++ boost串口通信

(运行串之前请先安装串口驱动minicom) 一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我下载的是boost_1_63_0版本, 解压. 2. ...
  • u010925447
  • u010925447
  • 2017-02-27 11:41:10
  • 663

rosserial通信协议简介

rosserial通信协议介绍
  • x_r_su
  • x_r_su
  • 2016-10-04 17:37:30
  • 3210

ros_arduino_bridge使用总结

关于ROS和Arduino通信方式,刚开始大多使用的是rosserial_arduino这个库,随后又诞生了一个新的库名为ros_arduino_bridge,两者对比如下: rosserial...
  • u011118482
  • u011118482
  • 2017-11-25 17:04:46
  • 282

ros中使用串口

前言上一篇文章中介绍了如何在ubuntu中访问串口,本文将探讨如何将该程序移植到ros中,作为一个节点,方便后续将从其他节点(如导航与定位)接收到的信息通过串口发送给单片机。 过程参照编写ros程序的...
  • u011853479
  • u011853479
  • 2016-04-27 19:00:07
  • 6072
    个人资料
    等级:
    访问量: 278
    积分: 24
    排名: 207万+
    文章分类
    文章存档
    最新评论