自动跟随机器人教程(一)(树莓派、Arduino教程)

机器人购买链接:

https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.59a21debCqLXYP&id=532012951368

 

接下来打算发布一款自动跟随机器人的制作教程,它使用了声源定位、图像识别、超声波等多种方式来实现完全自主控制,不需要人工干预即可对特定目标进行跟踪。

前几年,市场上出现了不少利用开源路由器软件实现的视频小车,这类小车可以实现远程控制,并且能够回传视频。然而这类小车使用的硬件可塑性不强,往往使用openwrt的固件(在路由器上运行,如更改代码需要交叉编译)+51单片机实现,这些硬件对新手来说要上手是比较难的,可能只是会用会实现,但是很难按自己的需求更改具体的程序。

与此同时,市场上还出现了另一类开源神器,它们分别是树莓派和Arduino系列的产品。树莓派一般运行Linux操作系统,与其它Linux开发板相比,它的优点是不需要交叉编译或者内核编译,你可以直接把它当作一台普通电脑来进行开发。Arduino相当于单片机,与其它单片机相比,它的优点是IDE跨平台性好,除了支持Windows外还支持Linux和Mac,另外,它对一些底层的功能进行了封装,你可以用比较接近上层语言的方式来做单片机开发(当然如果要在Arduino的IDE里直接写操作寄存器的代码也是完全没问题的)。这两类设备还得到了开源社区的大力支持,资料丰富。树莓派适合计算量大的场合,比如本项目中的图像处理和声源定位,Arduino适合对实时性要求高的场合以及IO口数量多的场合(另外它的5v IO口可以直接接很多传感器也很方便),因此决定把它们结合起来使用。把这两类设备的协作方式搞熟悉后,也有利于将来把这些设备装到四轴飞行器上(本人有另一套教程使用Arduino Uno实现四轴飞控)。

先上一些照片和视频

(粗略跟踪)http://v.youku.com/v_show/id_XMzM5OTAyNjAxNg==.html

(精确跟踪)http://v.youku.com/v_show/id_XMzQwNjg1NTk0MA==.html

(完整实现)http://v.youku.com/v_show/id_XMzQwNzYzMjYyMA==.html

下图从上到下(从左到右)依次为:

1. 带USB供电、电源开关的双L298N模块

2. 插入4通道麦克风阵列的树莓派3

3. Arduino Uno

4. 超声波模块

 

另外,隆重推荐一款超便携的微型示波器 Aeroscope,非常适合机器人、无人机DIY,可以绑在设备上边运行边看波形。

UWB是一种无线通信技术,DWM1000是一种UWB模块,可以用于测距、定位等应用。在跟随小车应用中,通常使用两个DWM1000模块,一个放在小车上,一个放在地面上。下面是UWB DWM1000跟随小车的原理和代码解析。 1. 原理 UWB DWM1000跟随小车的原理如下: 1)通过UWB模块测量小车与地面的距离,得到距离数据。 2)将距离数据传输给控制器,控制器计算小车与地面的相对位置和方向。 3)根据相对位置和方向,控制器调整小车的速度和方向,使小车跟随地面。 2. 代码解析 UWB DWM1000跟随小车的代码如下: ```c++ #include <DWM1000.h> // 定义UWB模块对象 DWM1000 uwb; // 定义小车位置、速度、方向变量 float car_x, car_y, car_v, car_h; void setup() { // 初始化UWB模块 uwb.setup(); // 初始化小车位置、速度、方向 car_x = 0; car_y = 0; car_v = 0; car_h = 0; } void loop() { // 获取UWB距离数据 float dist = uwb.getDistance(); // 计算小车相对位置和方向 float car_dx = dist * sin(car_h); float car_dy = dist * cos(car_h); float car_dh = atan2(car_dy, car_dx); // 更新小车位置、速度、方向 car_x += car_dx; car_y += car_dy; car_v = dist / uwb.getInterval(); car_h += car_dh; // 控制小车运动 controlCar(car_v, car_h); } void controlCar(float v, float h) { // 控制小车运动,使其跟随地面 } ``` 代码中,我们先定义了一个UWB模块对象uwb,然后在setup函数中初始化UWB模块和小车位置、速度、方向。在loop函数中,获取UWB距离数据,计算小车相对位置和方向,更新小车位置、速度、方向,最后调用controlCar函数,控制小车运动。其中,controlCar函数需要根据小车速度和方向来控制小车运动,使其跟随地面。 以上就是UWB DWM1000跟随小车的原理和代码解析。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值