【实用教程】搭建基于HCR平台的Slamware自动导航系统-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 28950|回复: 47

【实用教程】搭建基于HCR平台的Slamware自动导航系统

[复制链接]
发表于 2016-9-7 10:20 | 显示全部楼层 |阅读模式
本帖最后由 SLAMTEC 于 2016-12-27 17:20 编辑

服务机器人的核心问题在于自主定位与导航,它主要包括几大问题:

无需用户干预,机器人自主构建环境地图?
实时、高精度的获取机器人所在位置?
有效规避环境障碍,抵达目标地点?
在未知环境中,有效规划两地之间最短路线?

有了相应解决方案后,对于服务机器人厂商,还需要考虑如何快速与现有系统整合,加快产品上市?在高性能与低成本间如何获得平衡?

六大问题,一个对策
SLAMWARE系统就够了。

                             

SLAMWARE

SLAMWARE


SLAMWARE系统由高性能激光雷达RPLIDAR与定位控制引擎核心SLAMWARE Core构成。

SLAMWARE直接与RPLIDAR连接,并通过ControlBus与底盘连接。其中,High Speed Bus是一个高速的100M以太网,负责与人机交互系统连接,并传输地图数据。

同时,SLAMWARE Core还支持超声波传感器、防跌落传感器、碰撞传感器和深度摄像头的数据,将它们和激光雷达的数据融合在一起,利用信息融合,使机器人实现更加智能、实用的自主运动。

这是DFrobot推出的HCR家用机器人开源项目平台~

HCR

HCR

这是一款双轮驱动的移动平台,其底盘前部配有一个牛眼万向轮,并配有碰撞传感器,可以作为在紧急刹车的触发装置。

作为面向教育、科研和爱好者们的开源平台,HCR拥有丰富的传感器接口,方便用户快速搭建原型,验证设计思路。

那么,问题来了~

想把HCR变成一个可自主移动的机器人小车需要几步呢?

这和把大象装进冰箱一样,需要三步。

第一步,安装RPLIDAR。
第二步,安装SLAMWARE。
第三步,打开手机APP,想怎么玩就怎么玩。

当然,肯定没这么简单,今天我们就来看看如何基于HCR平台搭载Slamware自动导航系统。



 楼主| 发表于 2016-9-7 10:43 | 显示全部楼层
1.  系统组成

  (1)  Slamwarebreakout V3
      

Slamware breakout V3

Slamware breakout V3

                              
(2)  RPLIDARA2

RPLIDAR A2

RPLIDAR A2

(3)  DFrobot机器人平台(包含碰撞传感器*3, 2-wheel直流减速电机)

HCR

HCR
        
(4)  超声波传感器*3

(5)   电机驱动板

(6)  大电流锂聚合电池

(7) 杜邦线若干,VCC, GND 扩展版(自制)一块
 楼主| 发表于 2016-9-7 10:44 | 显示全部楼层
2.  结构图

QQ图片20160906180639.png

 楼主| 发表于 2016-9-7 10:45 | 显示全部楼层
3.  硬件平台搭建
(1)  搭建好HCR平台(包含左右电机, 碰撞传感器, 超声波传感器),搭建HCR平台的最下面两层即可。
安装手册:
IMG_20160906_114423_副本.jpg
                              

(2)  固定Slamwarebreakout V3, 电机驱动板, RPLIDAR A2(连线方向为小车前进方向,注意不要装反),  锂电池(固定在底盘的最下面一层), 5V电源/GND扩展板(下图左侧)。如图示:
             IMG_20160906_120837_副本.jpg

(3)  连线:

a.  RPLIDAR: 按照上述结构图将RPLIDAR A2 插入板上A2插口。

b.  Sonar:至多支持8个超声波传感器(本实验中安装左中右三个),分别插在板上J3位置的Sonar插口的1、2、3位置。超声传感器共有GND、Trig、ECHO、VCC四个引脚,分别和板上的这四个引脚相连即可。

c.  Bumper: 至多支持8个碰撞传感器(本实验中同样安装左中右三个),碰撞传感器的三个引脚分别为VCC、DATA、GND,V3板上的J22区域目前只有左右两个Bumper的数据接口,可以将中间Bumper的数据引脚接到GPIO上面。
具体的引脚连接如下表所示:
  
  
Data
GND
VCC
Left Bumper
J22/L
扩展板GND
扩展板VCC
Mid Bumper
J21/PB8
扩展板GND
扩展板VCC
Right Bumper
J22/R
扩展板GND
扩展板VCC

d.  电机驱动板/左右电机:

电机引脚连接如下表:
  
  
黑moto-
红moto+
黄VCC
绿GND
蓝A
橙 B
电机驱动板M2 -
电机驱动板 M2 +
扩展板VCC
扩展板GNC
不连
Slamware V3/J1/L/ENCD
电机驱动板M1 -
电机驱动板 M1 +
扩展板
  
VCC
扩展板
  
GND
不连
Slamware V3/J1/R/ENCD
              
电机驱动板引脚连接:
  
电机驱动板pin3
  
Slamware V3/J1/R/PWM
电机驱动板pin11
Slamware V3/J1/L/PWM
电机驱动板 pin4
Slamware V3/J1/R/B_EN
电机驱动板 pin12
Slamware V3/J1/L/B_EN
PWR
锂电池电源

发表于 2016-9-20 11:51 | 显示全部楼层
终于等到了楼主的教程,可惜现在还没有Slamwarebreakout V3。
用的还是那个Slamware breakpoit扩展板,要自己搭建底层。
顺便问一句,为什么电机编码器只连接了一个霍尔传感器,不是要里程信息需要测量正反转吗?
还有就是Slamwarebreakout V3是不是集成了单片机控制板用来收集传感器信息和电机驱动全套东西。
没有看到你使用Arduino主控板。
 楼主| 发表于 2016-9-21 10:26 | 显示全部楼层
本帖最后由 SLAMTEC 于 2016-9-21 10:28 编辑

4. STM32固件配置

底盘的固件代码需要修改为适应当前底盘的具体参数,可以用slamware_config_tool.exe工具来自动生成配置文件:


配置工具链接:http://pan.baidu.com/s/1qXHWDzQ 密码:3hs6


打开slamware_config_tool.exe, 添加以下参数:


(1)底盘直径:将Robot Diameter参数设置为实际的底盘(外接圆)直径,单位是米。
1.png


(2)超声和碰撞传感器位置设置:设置3个超声传感器和3个碰撞传感器的(x, y, z)位置坐标和角度(逆时针),坐标如下图所示 (原点为平台中心位置):
2.jpg
3.png
(3)激光雷达设置: 下面表格中,(X, Y)坐标为上述坐标系下雷达中心的安装位置。角度为以雷达引线的正对面朝前进方向为0度, 雷达引线朝前为180度。此实验为引线朝前,所以为180度,参数设置需转换成弧度制。
4.png
5.png
(4)Motion Plan和Feature配置

Motion Plan 采用默认配置
6.png

Feature页面去掉Has IRTower选项
7.png





                           






 楼主| 发表于 2016-9-21 10:34 | 显示全部楼层
所有参数配置完成之后,点击右上角的Export按钮,保存配置文档为binary_config.c, 并放入工程的源代码中。
代码修改:

1.      在工程Source里面替换binary_config.c文件。

2.    调节电机PID参数和每米脉冲数

    (1). PID控制算法参数调试方法
      逐渐从0增大P值和I值,至小车能够快速响应且未开始抖动。此实验平台的参考值为P=1, I =0.2, D=0. 亦可自行设置motor.c中的PID参数达到理想效果。

8.png


    (2).每米脉冲数计算

      此电机可以输出每转663个脉冲反馈信号,轮子的直径为13CM,计算可以得知每米相当于2.45转,所以每米脉冲数为663 * 2.45 = 1624(motor.h中设置)
9.png

 楼主| 发表于 2016-9-21 10:40 | 显示全部楼层
五.  固件烧入


可以短接BOOT0,连接breakout上面下图所示的串口,用flyMcu工具将改好的固件烧入MCU。联线如下图所示,烧录完毕之后,恢复引脚连接。
10.jpg 11.jpg


flyMcu工具下载链接:
链接:http://pan.baidu.com/s/1o8MuF0I 密码:717j
12.png
 楼主| 发表于 2016-9-21 10:43 | 显示全部楼层
sunnywin 发表于 2016-9-20 11:51
终于等到了楼主的教程,可惜现在还没有Slamwarebreakout V3。
用的还是那个Slamware breakpoit扩展板,要自 ...

恩恩,你好~~关于你提的问题,是酱紫的哦~

1. 只连一个hall传感器就够了  
2. Slamware breakout V3 集成了STM32的MCU来实现底盘控制

希望可以解答你的疑问哦,谢谢~~
发表于 2016-9-21 11:41 | 显示全部楼层
SLAMTEC 发表于 2016-9-21 10:43
恩恩,你好~~关于你提的问题,是酱紫的哦~

1. 只连一个hall传感器就够了  

只用一个hall传感器,我猜测是因为HCR底盘是圆形的,slamware对底盘控制都是采用向前运动差动转向,没有任何一个轮子做过后退动作,所以不要测量其反向运动距离。
不知这么理解对不对?

另外,slamware core获取外部轮组运动数据的返回数据中,通讯协议上说共返回四个:轮组运动数据,x轴向位移,y轴向位移和角度位移。其中第一个轮组运动数据说应该为轮子的累计运行距离,是指系统开机后的真个累计运行距离?
其它几个都比较明确,是外部系统整体相对于上一次应答次请求的轴向距离或者逆时针角度位移。
请支持,多谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-27 23:43 , Processed in 0.107675 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表