proteus如何添加stm32_RTThread+STM32实现智能车目标识别系统的教程

e7cdfec07bc26d51508f4ee29cc47e48.png

引言

这篇文档主要介绍 RT-Thread 如何使用串口或者无线和 ROS 连接,会包含这么些内容:

第一部分:ROS 环境搭建

第二部分:RT-Thread rosserial 软件包

第二部分:RT-Thread 添加 USART2 和 PWM

第三部分:RT-Thread 使用 ESP8266 AT 固件联网

这里先介绍一下什么是 ROS?为什么要和 ROS 连接?

机器人操作系统 ROS (Robots Operating System) 最早是斯坦福大学的一个软件框架,现在不管是工业机器人,还是娱乐用的机器人都运行着 ROS。

9d3a8431628b8fdac89e1fd41a0988b0.png

图片来源网络,如有侵权请联系删除

一个机器人通常有很多个部件、传感器,为了保证机器人不会因为某一个传感器故障,导致整个系统瘫痪,所以采用了分布式的节点,利用不同节点之间的通讯收集传感器数据和控制指令,这篇文档后面会使用到的通讯协议就是 rosserial。 和 ROS 连接的好处在于,一方面由 ROS 管理各个机器人节点更稳定,另一方面 ROS 现在已经有了非常多成熟的软件包,使用 ROS 就可以非常方便的为自己的机器人添加摄像头图像识别、激光雷达建图导航等高级功能。 不过这篇文档只会涉及 RT-Thread 和 ROS 建立基本的连接,实现小车的运动控制,之后可能会有后续文档介绍如何连接激光雷达建图,并进行全局路径规划。

这篇文章假定大家都已经会用 RT-Thread 的 env 工具下载软件包,生成项目上传固件到 stm32 上,并且熟悉 Ubuntu 的基本使用。

1 ROS 简介

这里的开发环境搭建其实是需要搭建 2 份,一份是小车上的 ARM 开发板 (树莓派,NanoPi 什么的),另一个则是自己的电脑,因为我们希望把电脑作为 ROS 从节点,连接到小车上的 ROS 主节点,不过开发板和电脑的 ROS 安装是一模一样的。

既然要和 ROS 连接,那么首先就得要有一个正常运行的 ROS。安装 ROS 其实非常简单,这里推荐使用 Ubuntu 18 (开发板推荐系统用 Armbian),因为官方对 Ubuntu 的支持优先级是最高的,安装教程也可以参照  官网: http://wiki.ros.org/melodic/Installation/Ubuntu 只需要输入下面的 4 行命令,就在 Ubuntu 上装好了 ROS。
1sudo sh -c 
上面我使用了清华大学的镜像源,这样从国内下载 ROS 会快很多,而且我只安装了 ROS 的基本软件包,没有安装图形化软件包 gviz,gazebo 什么的,因为后面也没有用到。

1.2 ROS 环境初始化

ROS 安装好之后还需要进行初始化,不过也是只有短短几行命令:
1sudo rosdep init
1.3 启动 ROS 启动 ROS 的话我们需要确保它是常驻后台运行的,所以我们可以使用 tmux:
1roscore

在 tmux 里启动了 ROS 主节点后,我们就可以 Ctrl + B D 退出了,而 ROS 主节点依旧在后台运行。

1.4 参考文献

  • Armbian:https://www.armbian.com/
  • ROS Melodic 安装:http://wiki.ros.org/melodic/Installation/Ubuntu

2 RT-Thread 串口连接 ROS

这一部分会介绍如何使用串口将运行着 RT-Thread 的 STM32 开发板和运行着 ROS 的 ARM 开发板连接,看起来差不多就是这样。

52edcc782751a2860f12e19405590cf8.png

这里说明一下不同开发板的分工,STM32 运行着 RT-Thread 负责控制电机,接收传感器信息;ARM 运行着 ROS 负责进行全局控制,例如给小车发出前进的指令。

2.1 RT-Thread 配置

首先我们需要打开 usart2,因为 usart1 被 msh 使用了,保留作为调试还是挺方便的。 edd0e407349cd29dc767859de6ba584b.png 在 CubeMX 里我打开了 USART2,另外还打开了 4 路 PWM,因为我后面使用了 2 个电机,每个电机需要 2 路 PWM 分别控制前进和后退。 接下来还需要在 menuconfig 里面打开对应的选项,考虑到有的开发板默认的 bsp 可能没有这些选项,可以修改 board/Kconfig 添加下面的内容。 串口的配置:
 1menuconfig BSP_USING_UART
PWM 的配置:
 1menuconfig BSP_USING_PWM

这样我们在 env 下就可以看到有对应的配置了,

6fddc8422d1c427cdc3c15cf20f358f4.png

0705e20776eb741d9769ca818330c00e.png

除此之外,我们还需要选择 rosserial 软件包:

fe94e58854a14bef0785ec16aff76014.png

可以看到上面默认的串口就是 USART2,这样我们就可以生成对应的工程了:

1pkgs --update
如果我们打开 Keil 项目,首先需要把 main.c 修改为 main.cpp,因为 rosserial 很多数据格式的定义都是用 C++ 写的,所以如果要使用 rosserial 库,我们先得把后缀改为 cpp,这样 Keil 就会用 C++ 编译器编译。

faa7bc2118c83859e34e137ce13a5275.png

下面是 main.cpp 的内容,其实就是初始化了电机,然后发布了 2 个话题 (topic),一个是 /vel_x 告诉 ROS 当前小车的速度,一个是 /turn_bias 告诉 ROS 当前小车的旋转速度。同时又订阅了一个话题 /cmd_vel,用来接收从 ROS 发出的控制指令。 代码不是特别长,我也添加了一些注释,所以这里就不一行行分析了。
 1

另外还有对应的电机控制的代码,不过这个大家的小车不同,驱动应当也不一样,我这里由于小车电机上没有编码器,所以全部是开环控制的。

motors.h
 1
motors.c
  1
一共只需要这么一点代码就可以实现和 ROS 的连接了,所以其实 ROS 也不是那么神秘,它就是因为简单好用所以才这么受欢迎的。 既然 RT-Thread 已经配置好了,下一步就是 ROS 的配置了。

2.2 ROS 配置

我们把上面 RT-Thread 的固件传到板子上以后,可以用一个 USB-TTL 一边和 STM32 控制板的 USART2 连接,另一边插到 ARM 控制板的 USB 口,接下来就可以建立连接了,在 ARM 板上输入命令:
1$ rosrun rosserial_python serial_node.py /dev/ttyUSB0
如果看到下面的输出,那就成功建立连接了:
1tpl@nanopineoplus2:~$ rosrun rosserial_python serial_node.py /dev/ttyUSB0

2.3 ROS 控制小车

既然已经成功建立连接了,下一步就是写小车控制的代码了。 我们先初始化一个工作区间:
1$ mkdir catkin_workspace && cd catkin_workspace
接下来创建一个软件包:
1$ cd src
这样就会自动在 src 目录创建一个 ROS 软件包了。 我们在 catkin_workspace/src/my_first_pkg/src 目录下新建一个文件 ros_cmd_vel_pub.py:
 1#!/usr/bin/python
这就是我们的 python 控制程序了,可以使用键盘的 wasd 控制小车前进后退,顺时针、逆时针旋转。我们需要给它添加可执行权限:
1$ chmod u+x ./ros_cmd_vel_pub.py

这样就可以编译软件包了,在 catkin_worspace 目录下。

1$ catkin_make
我们终于就可以启动程序从电脑上控制小车运动了:
1rosrun my_first_pkg ros_cmd_vel_pub.py
可以看到用 ROS 实现小车控制其实代码量并不算多,只需要在自己小车原有的代码上发布一些话题,告诉 ROS 小车当前的状态,并且订阅一个话题接收 ROS 的控制指令就可以了。

2.4 参考文献

  • ros-pibot:https://github.com/wuhanstudio/ros-pibot

3 RT-Thread 无线连接 ROS

3.1 rosserial 配置

其实无线连接和有线连接几乎是一模一样的,只不过是先用 ESP8266 使自己的控制板能连上网,然后用 tcp 连接和 ROS 通信,关于 RT-Thread 使用 ESP8266 上网的教程可以参照  官网: https://www.rt-thread.org/document/site/application-note/components/at/an0014-at-client/ ,非常详细了,我这里就不重复了。 确保开发板有网络连接后,我们就可以在 rosserial 里面配置为使用 tcp 连接:

4633c73a4d5b9ffa1b1e33f236b0da8b.png

我们只需要在上一部分的 main.cpp 里添加一行代码:

1
开发板就能通过 tcp 连接和 ROS 通信了,非常方便。

3.2 ROS 配置

由于我们使用了 tcp 连接,所以 ROS 上自然也要开启一个服务器了,之前是使用的串口建立连接,现在就是使用 tcp 了:
1$ rosrun rosserial_python serial_node.py tcp

其他的代码完全不需要改变,这样我们就实现了一个 ROS 无线控制的小车了。

3.3 参考文献

  • RT-Thread 使用 ESP8266 上网:

    https://www.rt-thread.org/document/site/application-note/components/at/an0014-at-client/

4 总结

这里再总结一下,其实 RT-Thread 使用 rosserial 软件包和 ROS 建立连接非常简单,只需要在自己小车原有代码的基础上发布一些消息,告诉 ROS 小车当前的状态,以及订阅来自 ROS 的控制指令就可以了。 4000e95af3e716c514921fe6f1e4f2d3.png

1.2020年第5期《单片机与嵌入式系统应用》电子刊新鲜出炉!

2.为什么星链和5G是互补共荣,互相不能替代的两个大项目?

3.嵌入式系统:大数据和行业应用之间的桥梁

4.ARM的免费IP战略,能否撼动RISC-V的根基?

5.解读工信部25号文:蜂窝网包打物联网,LoRa真要凉凉了?

6.说说两个冷门却又不冷门的预处理指令#pragma和#error!3499a120ac732069efcee85776596ec3.gif

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值