商务服务
ROS的树莓派与stm32的地面移动机器人构建问题
2024-12-02 10:59
ROS的树莓派与stm32的地面移动机器人构建问题 移动机器人

ROS的树莓派与stm32的地面移动机器人构建问题

层级系统硬件功能边缘层linux系统 ROS 16.04 kinetic树莓派3B+接收传感器数据2D激光雷达,传输控制命令到执行层执行层keil5编译环境stm32F103RCT8负责接收控制命令,驱动级的控制车轮

软件上主要是介绍雷达在树莓派3B+上的使用 键盘输入发布速度控制信息到串口树莓派与stm32之间的串口连接stm32的串口接收速度控制信息本地ROS与树莓派ROS之间的通信cartographer的使用等内容。

首先,这部分内容要实现的是用树莓派驱动激光雷达的旋转,获取雷达的数据,是在 2D激光雷达 的基础上实现的,其接口是USB线。

  1. 在树莓派上创建一个catkin工作空间:slam2D_ws(可修改工作空间名
 

  1. 通过下面的地址获取激光雷达的官方驱动,放置在src文件夹下,将程序包的名字改为rplidar_ros(因为github下载下来的程序包都带master后缀,删掉即可,然后catkin_make编译一下整个工作空间。

https://github.com/robopeak/rplidar_ros

 

然后,在basherc文件中添加路径

 

最后一行,添加({机器名}自行修改,不要忘记了

 

最后,source一下。或者关闭终端重新打开终端。

 

  1. 驱动中总共有两个可执行程序,即rplidarNoderplidarNodeClient
  • rplidarNode:负责驱动激光雷达的旋转和雷达数据获取,获取的数据发布在/scan上
  • rplidarNodeClient:官方给的一个从/scan节点接收雷达数据并显示在终端中的程序
  1. 运行程序前, 需要检查rplidar的串行端口的权限
 

将显示一行…ttyUSB0(一般是)的结果,为串口添加写权限

 

  1. 有两种方法来运行rplidar_ros包
  • 在rviz运行rplidar节点和rviz雷达的视图,运用 roslaunch 命令。此处要注意树莓派需要修改rviz的一个配置,修改雷达的数据类型为points,才可正常显示雷达的数据。
 

但是树莓派运行rviz可能会占用很多内存,故还有下一种运行方式(常用

  • 首先运行rplidar.launch,该运行方式和上述方式的唯一区别是,没有运行rviz,方便使用/scan数据的打开rviz查看(例如SLAM建图算法直接显示地图,不显示雷达数据)。
 

可以利用简单的显示功能rplidarNodeClient接收/scan节点的数据,并显示出来,运行命令如下。

 

 

 

  1. 树莓派的串口配置,弃用蓝牙,将蓝牙的串口映射给GPIO使用。 树莓派上有两个串口,一个是高性能串口,树莓派3B+默认将该串口分配给蓝牙使用,另一个是miniuart,即树莓派的两排引脚的GPIO13/14,网上均说该串口性能不好,会随着主频的跳动而跳动,会影响该串口的波特率,传输数据不稳定。故该教程是将蓝牙的高性能串口映射给GPIO使用。 网上方法很多,但是树莓派安装的系统各有不同,就有不同的设置方法。下面是一个比较全的教程。

http://ukonline2000.com/?p=880

但是本教程使用的是Ubuntu mate 16.04系统,需要安装下面的方法

使用命令看一下树莓派3b+支持的GPIO串口

 

 

  • 启用串口ttyS0
 

 

  • 关闭Console
 

然后配置cmdline.txt,本教程使用的是gedit,也可以使用其他编辑器。

 

打开以后会看的如下内容

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes root wait

删掉里面的console=serial0,115200,注意,其他的不要删掉,不管后面是什么,都只删掉中间的这一句话。保存,然后重启树莓派后继续编辑cmdline.txt。

 

在里面输入console=serial0(or ttyAMA0),115200,后面的不要动,在中间插入就行,没错,括号里的也要写上去不要乱改。

dwc_otg.lpm_enable=0 console=tty1 console=serial0(or ttyAMA0),115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

KERNEL==“ttyS0*”, OWNER=“root”, GROUP=“tty”, MODE=“0666”

然后,重启。以后就不用了每次都给权限,直接用就可以了。

  1. 在python3.5 IDE环境下,进行读写串口操作(python) 由于直接用python读写串口,其中pack的方式传输浮点型、整形,转换成字节传输到stm32后即可,下面是测试程序。
 

  1. (附)树莓派的蓝牙配置使用 树莓派与HC06的蓝牙模块的连接
  • 首先,点开树莓派的蓝牙,配对HC06的蓝牙,一般密码是1234或者0000。
  • 然后,要知道HC06的设备号
  1. pygame的安装 pygame只适用于python3以上, 首先安装依赖
 

依赖安装完毕就可以安装pygame了

 

以下命令是一个小例程,没试过。

 

  1. 完整的程序(pygame检测键盘输入和数据打包) 运行程序以后发现一个小黑框(可修改大小,python命令行里在打印发送到数据。键盘检测是在小黑框里的,分别设置里前后左右以及空格,分别对应前进的速度增加,前进的速度减小,横向速度增加,横向速度减小,以及置零。 此处是用来初始化pygame的窗口的,否则后面再多的代码都没用。
 

数据的打包方式(和stm32的解包相对应

#BB BB 0b 03 ff 07 xx xx xx xx xx xx xx xx check

其中0xBB 0xBB是数据开始,0x0b是数据长度,0x03是地面移动机器人的ID,07是消息类型(速度信息/位置信息,后面四位是vx,再后面四位是vy,check是数据校验位。

完整代码(python3.5

 

本地采用STM32F103RCT8系列芯片,用串口1进行通信(与树莓派连接)。

贴一下数据类型定义

 

贴一下串口配置

 

贴一下接收中断

 

贴一下解包程序

 

本部分内容是在同一个局域网同时运行上位机的本地ROS(一台较高算力的电脑)和树莓派ROS,在本地ROS运行roscore。树莓派ROS搭载传感器获取数据(从机,而本地ROS(即主机)处理传感器数据,进行SLAM建图。

实现主机-从机在同一个局域网下的连接

设置主机为PC,运行roscore,从机为树莓派。 PC和树莓派在同一局域网下;也就是都连同一个WIFI(路由器生成的那种,或者手机热点,校园网不行,或者PC连了WIFI、用根网线把树莓派和PC连起来也可以。用ifconfig可以查看IP,用hostname可以查看主机名】假设Master在PC端运行。

  1. 修改hosts文件
 

在其中添加两行,一行主机(nuvo-7000)的IP和名字,一行从机(car2-dek)的IP和名字。

192.168.31.112 nuvo-7000 192.168.31.227 car2-dek

PC和树莓派都需要修改。

  1. 主机和从机相互识别,ping命令
  • 在树莓派上运行
 

  • 在PC上运行
 

 

  1. 设置ROS-MASTER-URI
 

在PC端和树莓派的.bashrc都文件中都加1行

export ROS_MASTER_URI=‘http://192.168.31.113:11311’

IP地址是主机的,即PC的 然后,保存退出

 

  1. PC运行roscore即可,双方运行的节点就都在一个节点图里了。
A 在本地ROS下载安装百度开源SLAM算法cartographer

首先是cartographer的官方安装教程,但是无法google上网,就不能下载。

https://google-cartographer-ros.readthedocs.io/en/latest/

以下是github安装方式

  1. 先装好wstool、rosdep、ninja
 

  1. 建立工作空间
 

3.从github上下载: github的源码网址

https://github.com/ceres-solver/ceres-solver https://github.com/googlecartographer/cartographer https://github.com/googlecartographer/cartographer_ros

以下是安装过程

 

  1. 安装proto3
 

  1. 安装依赖库
 

  1. 编译(较久
 

  1. 添加环境变量
 

最后一行添加,注意是install_isolated

source ~/catkin_ws/install_isolated/setup.bash

  1. 测试官方demo
  • 2D测试
 

运行命令

 

  • 3D测试 运行命令
 

跑出来的需要较长时间,需要花大概十几分钟。

B 对cartographer和rplidar的适配
  1. 位于/catkin_ws/src/cartographer_ros/cartographer_ros/configuration_files文件夹下,定义一个名为revo_lds_rplidar.lua的文件,在revo_lds_.lua基础上修改
 

注意这两行

 

  1. 位于~/catkin_ws/src/cartographer_ros/cartographer_ros/launch文件夹下,编辑一个launch文件demo_revo_lds_rplidar.launch,在demo_revo_lds.launch基础上修改,注意23和25行。
 

注意这两行

 

最后一行的bag包需要删掉,因为是测试数据集demo用的。

  1. 编译一下;
 

  1. 用两个终端,分别运行两个节点
 

可以看到从rplidar获取数据传输给/scan类型,给cartographer的算法,进行slam建图。另外打开一个终端,查看节点图

    以上就是本篇文章【ROS的树莓派与stm32的地面移动机器人构建问题】的全部内容了,欢迎阅览 ! 文章地址:http://keair.bhha.com.cn/news/3790.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 康宝晨移动站 http://keair.bhha.com.cn/mobile/ , 查看更多   
最新文章
入境游订单同比增长123%!福州旅游市场迎“五一”预订高峰
“五一”假期临近,福州旅游市场迎来预订高峰。据携程数据显示,截至4月16日,“五一”假期福州酒店订单量同比去年增长12%,机
给近三年最好的10部刑侦剧排个名:《乌云之上》第8,《狂飙》第3
今年开年以来,国产剧算是和刑侦类型“杠”上了。刑侦剧一部接一部,几乎没有空窗期。要么是还原了曾经的真实悬案,要么是剧情高
北京11个上市基础设施公募REITs项目募集235亿元
  中新网北京4月1日电 (记者 吕少威)记者今天从北京市发改委获悉,北京市积极推进基础设施公募REITs工作,目前累计共有11个基
ipad怎么看运行内存苹果手机怎么看内存「ipad怎么看运行内存」
iPad查看运行内存教程在iPad上查看运行内存可以帮助你了解当前设备的使用情况,以及是否需要关闭一些应用程序以释放内存。以下是
兰州华为荣耀手机维修_华为手机维修西站店手机维修店「兰州华为荣耀手机维修_华为手机维修西站店」
搭载天玑1000+旗舰芯片,采用10亿色视网膜级超感屏,配备旗舰级5000万高清主摄等,诚意满满。今天我们小九主要来跟大家说说荣耀V40
十堰空调维修|十堰空调加氟|十堰空调维修电话0719-7017199
十堰空调维修中心【电话0719-7017199】主营:十堰空调维修,十堰空调加氟,服务好价格低,各区均有分点,专业十堰空调维修加氟人员随叫随到,欢迎咨询报修。
这群青年真提气!专注自己的事 就能干成事
  这群青年真提气!  4月15日,全球首个地月空间大尺度三星星座建成的消息公布。让人心头一热的,不只是117万公里星间链路打
斗破苍穹中丹塔未来三巨头会是谁?曹颖有望占据一席,宋清可捡漏
在斗破苍穹中,与魂殿齐名的丹塔,在斗气大陆上拥有非常高的地位,被所有炼药师视为圣地,有着无与伦比的号召力。丹塔外部的三位
手机的RAM和ROM分别指什么手机rom「手机的RAM和ROM分别指什么」
关于眼光和格局的诗句有:1、莫愁前路无知己,天下谁人不识君——唐代高适《别董大二首·其一》译文:不要担心前路茫茫没有知己
太阳能电磁阀嗡嗡响,太阳能上水时电磁阀一声巨响冒烟是怎么回事手机一直震动不停怎么回事「太阳能电磁阀嗡嗡响,太阳能上水时电磁阀一声巨响冒烟是怎么回事」
冒烟就很有可能是哪部分的短路烧坏了。可能是绝缘线也有可能是电磁阀的漆包线你说呢...为什么不要呢,太阳能真是太方便了。找到
相关文章