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

2023-05-16

关于stm32下的ROS开发环境介绍说明,此开发环境是在Linux下使用stm32的标准库“STM32F10x_StdPeriph_Driver3.5”,进行stm32开发,整体开发框架已搭建完成,用户开发简单,只需要按自己的方式开发代码即可,它集成了ros_lib,让开发ros底层像arduino一样操作,让广大机友从写stm32解析器结点中解放出来,整体的代码风格如下:

源代码下载连接

这里写图片描述
这里写图片描述

一、开发环境的配置(ubuntu16.04系统)

  • 1、安装编译工具链

    $sudo apt-get install -y git build-essential gcc-arm-none-eabi

    如果提示找不到相关安装包,请执行下面操作

    $sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
    $sudo apt-get update
    $sudo apt-get install -y git build-essential gcc-arm-none-eabi libusb-1.0-0-dev

  • 2、安装st-link 烧写器驱动

    $git clone https://github.com/texane/stlink.git
    $cd stlink
    $ make
    $ cd build/Release
    $ sudo make install

二、怎样添加自己的代码

  • 1、往代码目录那面的Src、Bsp、Driver目录下面添加源码后,代码可支持C与C++,编写好代码后,请在Makefile文件中“OBJS += ./Driver/xxx.o
    ”的样式添加,其中“xxx”就是你代码的文件名。
  • 2、编译程序,进入工程主目录,执行
  • 3、如果是添加C代码时,进行混编译,请注意.c中请按下面格式编写代码,请注意只是.c代码需要添加,如果.c文件对应的有.h文件,则只需要在.h文件添加即可,.cpp代码不需要,此处作用,用户可以自己去了解,我就不赘述
#ifdef __cplusplus
extern "C" {
#endif

    /*添加自己编写代码区域*/

#ifdef __cplusplus
}
#endif

make

  • 3、确认st-link驱动是否安装好,插入st-link V2 烧写器,执行下面命令,如果有“STMicroelectronics ST-LINK/V2”,则说明st-link烧写器已被系统识别

    lsusb

  • 4、进入工程主目录,执行

    make flash

三、关于项目代码结构

  • 1、 Bsp目录,关于驱动的配置与串口的驱动文件都放在此目录
  • 2、 Driver目录,关于模块的驱动文件都放在此目录
  • 3、Src目录,main程序入口文件放在此目录
  • 4、Libs,里面放了ros_lib 与 stm32 标准库

四、关于开发板的测试使用

用户购买到开发板后,一般都是烧写好测试程序的,拿到手后可直接测试,测试流程如下
* 1、用micro usb(一定是能传输数据的usb)将开发板与PC端的ROS系统(indigo以上版本系统,如果是indigo版本系统请先删除系统默认的rosserial包,下载最新的rosserial,重新编译)相连接,连接好后检查是否识别到ttyUSB0,如果有,则说明连接正常,然后打开四个终端依次在每个终端运行

$roscore

运行下面命令,如果连接成功会出现如下图

$ rosrun rosserial_python serial_node.py /dev/ttyUSB0
这里写图片描述

运行下面命令,则会反馈系统的供电电压值,如下图

$ rostopic echo /battery
这里写图片描述

运行下面命令,板子上的LED会以0.1s的频率闪烁

$ rostopic pub -r 10 led std_msgs/Float64 – -0.001

五、关于使用中的问题

$sudo chmod 777 /dev/ttyUSB0

  • 1、永久解决串口权限问题, 其中riki是你系统的用户名,请替换,然后重启
     

    $sudo usermod -aG dialout riki

  • 2、“/dev/ttyUSB0: Input/output error” 此种问题是驱动问题,请安装我提供的驱动,将驱动源码放到ubuntu系统中

    $unzip CH341SER_LINUX.zip
    $ cd CH341SER_LINUX
    $ make

  • 上面编译后会生ch34x.ko文件,如果你已经能识别usb说明已装了老驱动,此时将它删除,加载新驱动

    $sudo rmmod ch341
    $sudo insmod ch34x.ko

  • 要开机启动时自己加载驱动怎么办?

    $sudo cp ch34x.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial
    $sudo depmod
    $sudo rm /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko

  • 3、重启系统后,执行下面命令,如果驱动有ch34x,则说明安装成功

    lsmod | grep ch

六、没有st-link的在linux下用ISP烧写程序

  • 1、安装烧写环境

    $sudo apt-get install stm32flash

  • 2、用usb串口烧写程序,烧写前请将Boot0设置为高,BOOT1设置为低,main.bin就是你要烧写的二进制文件,请替换,烧写时请按复位后,立即执行下面烧写命令,速度要快,不然会跳转失败,烧完请恢复默认设置。

    $sudo stm32flash -w main.bin -v -g 0x0 /dev/ttyUSB0 -b 115200

七、关于广告

ROS QQ交流群:130486387
RIKIROBOT店铺提供两驱动、四驱动、麦克纳姆轮、Omni全向三轮、Omni全向四轮、履带、阿克曼(舵机转向)、大型负载的各种ROS车,有配套指导、及完善售后,下面是店铺的二维码与Rikirobot的交流群,有兴趣的可以扫一扫。
店铺二维码QQ交流群

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • STM32上SPI+DMA实现大批量读取flash数据

    最近做项目需要使用SPI 43 DMA xff0c 为了做实验感受DMA传输数据块 xff0c 本人以SPI 43 DMA来读取flash中的数据 网上有很多例程是spi直接读取flash xff0c 无法提高性能 因为只是简单的实验SPI

随机推荐

  • stm32通用定时器1s延时实现LED闪烁

    stm32有很多定时器 xff0c 每种定时器的功能也不尽相同 xff0c 今天学习了如何用通用定时器实现1s延时 xff0c 使LED灯闪烁 xff0c 现总结如下 xff1a 步骤总结 xff1a 使能定时器时钟 gt 配置定时器结构体
  • JDK 中使用js调用java类、方法

    最近研究阅读这个APP 其主要功能就是通过一个个书源 从而实现移动端阅读的体验 比如说某些在线小说阅读网站 会加上相应的广告 从而影响用户阅读体验 于是阅读这个APP就是做了类似净化阅读体验 但是小说阅读网站千千万万 如果去适配每个小说阅读
  • Spring项目在tomcat启动时调用action

    1 实现ServletContextListener接口 添加 64 WebListener注解 2 按照示例写代码 xff1a 第一个是开启时 xff0c 第二个是销毁时
  • ubuntu16.04安装opencv3.4

    参考blog https blog csdn net u013066730 article details 79411767 直接进行 完全没问题 sudo apt get install build essential libgtk2 0
  • 使用switch-case语句输出成绩等级

    问题描述 xff1a 输入一个0 100范围内发分数 xff0c 在不同的等级范围内输出不同的值 xff0c 要求使用switch case控制 0 60 等级为E 60 70 等级为D 70 80 等级为C 80 90 等级为B 90 1
  • 输出图案(六)---输出空心矩形

    输入矩形的宽 xff0c 高 xff0c 输出该空心矩形 xff0c 用 来进行表示 参考代码1 xff1a span class hljs comment include lt stdio h gt span span class hlj
  • C语言中交换两个数的方法

    问题描述 xff1a 程序中有两个数a b 其中a 61 4 b 61 5 xff0c 现在希望交换两个数的值 xff0c 使得a 61 5 b 61 4 在这里我总结了一下目前我已经掌握的C语言中交换两个数的方法 xff0c 主要如下几种
  • 输出平行四边形图案(多种方案)

    问题描述 xff1a 使用 在控制台打印平行四边形 例如 xff1a 平行四边形中最长的一行输出的 是5个 xff0c 则平行四边为 xff1a span class hljs bullet span span class hljs emp
  • 自己实现strcat函数

    问题描述 xff1a 自己实现一个MyStrcat函数 xff0c 要和C语言库函数的strcat函数完成同样的功能 问题分析 xff1a 首先我们要了解一下strcat函数它到底做了什么事情 1 函数原型 char strcat char
  • 简易文件打包程序

    对指定目录下面的文件进行打包 简易解包程序参考博客另外一篇文章 xff1a http blog csdn net yi ming he article details 77689453 打包方式 xff1a 把目录下面的文件名 xff0c
  • 简易解包程序

    对压缩包进行解压 简易压缩程序请参考博客的另外一篇文章 xff1a http blog csdn net yi ming he article details 77689405 解包方式 xff1a 根据打包建立的索引表 xff0c 找到对
  • linux 挂载错误Transport endpoint is not connected

    mount了mfs后 xff0c 重新挂载之后 xff0c 出现如下错误 xff1a usr local mfs bin mfsmount H 192 168 103 101 mnt fuse bad mount point 96 mnt
  • 新字体的永久注册

    CString GetCurrentModuleDir TCHAR szPath MAX PATH 43 1 61 0 if 0 61 61 GetModuleFileName HMODULE amp ImageBase szPath MA
  • yolov5/v7/v8自动检测多个文件夹及截取锚框

    目前yolo仅支持检测图片或单个文件夹 xff0c 但在很多时候需要对成百上千个文件夹中图片进行检测 xff0c 再根据得到的位置信息txt文件来截取图片 xff0c 如何一步完成呢 xff0c 详情见下文 在detect py中将save
  • 带参数的宏定义、函数与内联函数

    文章目录 前言一 宏定义1 基本用法2 带参数的宏定义 二 函数1 定义与声明2 调用 三 内联函数 inline总结 前言 在实际项目开发 xff0c 尤其是嵌入式软件项目中 xff0c 经常可以看到大量宏定义的分布 xff0c 其中又多
  • C++语言为什么跨平台?

    xfeff xfeff 现在主流的手机平台很多 xff0c 比如 xff1a Windows开发的Windows Phone xff08 WP 34 X 34 xff09 Apple 苹果公司 开发的ios xff0c Google 谷歌
  • CMake 中的list操作

    Cmake 中定义了一系列的数组操作 xff0c 使用方法如下 list INSERT lt list gt lt element index gt lt element gt lt element gt list REMOVE ITEM
  • 解决error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file

    原文转自CSDN xff0c 本文有删减 一 问题 运行hydra时 xff0c 提示错误 xff1a hydra error span class hljs keyword while span loading span class hl
  • 栈(超简单讲解版

    没错又是我来了 xff08 上一篇DFS还没写好就先来写队列与栈了哈哈哈哈 是很简单的内容呢 xff08 比DFS简单到哪里去了 先来认识一下栈 什么是栈 xff1f 度娘是这样说的 xff1a 栈 xff08 stack xff09 又名
  • ROS下使用stm32 与rosserial进行通信的开发说明及源代码示例

    关于stm32下的ROS开发环境介绍说明 xff0c 此开发环境是在Linux下使用stm32的标准库 STM32F10x StdPeriph Driver3 5 xff0c 进行stm32开发 xff0c 整体开发框架已搭建完成 xff0