远程视频小车

受疫情影响不得不呆在家里,网上看到山东硬核小姐姐用遥控视频小车买馒头,逛大明湖,这真是躺在家里逛世界的赶脚。刚好手头有个机器人小车,就想着改造一下。

一、项目准备

1、树莓派3B+一块
2、arduino小车一个
3、USB摄像头一个
其中arduino小车网上有很多教程可自行搜索。因为小车只是载体,没有太多复杂的功能,只需要一块arduion控制板,一个电机驱动模块,两个电机即可。至于小车外形可更具自己的喜好进行搭建。
以下是我的小车,用的是类似于arduino的成品。
在这里插入图片描述

二、项目原理

整个项目是通过树莓派来实现网络连接控制,然后树莓派和arduino小车进行串口通信,来控制小车的运行。摄像头视频是搭载在树莓派系统上的。
最主要的是如何实现远程网络控制,这里使用的是一个现成的网络机器人平台:https://remo.tv,各种机器人都可以连接到平台上,进行远程操控,也可分享让所有在线用户操控体验,有些类似于机器人直播。
主要控制是基于树莓派实现的,但是也兼容其他各种品牌的机器人,有现成的可以直接使用事例代码,进行修改数据即可,没有匹配的机器人型号,就要根据官方文档自己开发了。
下面是平台机器人列表界面,所有在平台上的机器人,只要在激活状态,都可以操控体验。
在这里插入图片描述

三、树莓派环境配置

因为使用的是开源平台,可以直接使用平台开源代码,可以通过访问https://github.com/remotv/controller,有详细的操作说明。
至于树莓派环境的配置可以查看我前面几篇零基础使用树莓派的文章:
零基础玩转树莓派(二)-操作系统安装及环境配置
零基础玩转树莓派(三)—通过SSH远程连接树莓派
树莓派基本环境配置完成后,就可以把树莓派固定到小车上,通过SSh来远程连接操控。
在这里插入图片描述

四、网络环境配置

接下来会按照官方文档进行简单配置,没有涉及到的部分,可以自行查看文档。

在Raspberry Pi上安装remotv控制脚本

Raspberry Pi将需要安装以下内容,以便可以与您的小车通信并与Internet连接。执行以下步骤时,请确保控制台中没有任何错误。如果遇到问题,可以再次运行此行,通常可以解决该问题!

1、更新软件库

sudo apt update
sudo apt upgrade -y

更新时间较长,请耐心等待,出现下面界面说明更新成功
在这里插入图片描述
继续安装工具

sudo apt install ffmpeg python-serial python-dev libgnutls28-dev espeak python-smbus python-pip git

在这里插入图片描述
2、从github下载remotv控制脚本

git clone https://github.com/remotv/controller.git ~/remotv

在这里插入图片描述
3、安装python需求文档

sudo python -m pip install -r ~/remotv/requirements.txt

在这里插入图片描述
4、打开新remotv目录

cd remotv

在这里插入图片描述
5、复制controller.sample.conf到controller.conf

cp controller.sample.conf controller.conf

在这里插入图片描述

配置控制器

1、编辑在上一节中创建的controller.conf文件。

nano controller.conf

2、配置[robot]部分
配置服务器之前,首先要拿到你的用户名及机器人密钥。
点击进入你的服务器,没有先点击左侧add server添加服务器,进入服务器后点击左侧Add Robot,添加你自己的机器人,以我为例,目前有两个机器人hugRobot和car,点击car就可以看到中间弹出相应的API key就是需要的robot_key。
用户名owner就是右上角名称:runner(自己的)
在这里插入图片描述

  • owner 应该是您在remo.tv网站上注册机器人所使用的用户名。
  • robot_key 是您在网站上制作的机器人的API密钥。您的API密钥很长。它看起来应该像eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6InJib3QtNTVjZjJmMjUtNjBhNS00ZDJkLTk5YzMtOGZmOGRiYWU4ZDQ1IiwiaWF0IjoxNTczNTExMDA2LCJzdWIiOiIifQ.LGXSBSyQ4T4X5xU_w3QJD6R3lLjrrkw_QktOIDzRW5U。如果长度不够,则您尚未复制完整密钥。
  • turn_delay仅由motor_hat和使用mdd10。这会改变您的漫游器使用时间。我建议您在机器人移动之后将此值保留为默认值。
  • straight_delay仅由motor_hat和使用mdd10。这会改变您的漫游器使用时间。我建议您在机器人移动之后将此值保留为默认值。
  • type应该是您的机器人电机控制器的硬件类型。当前可用的类型。
    其中上面主要修改的是owner、robot_key、type
    在这里插入图片描述
    因为树莓派与arduino之间通过usb串口通信,所以type选择serial_board在这里插入图片描述
    serial_device改为/dev/ttyUSB0
    然后保存退出即可。

在Raspberry Pi上设置start_robot文件

1、将start_robot脚本复制到您的主目录。

cp ~/remotv/scripts/start_robot ~

2、将启动脚本添加到 crontab

crontab -e

注意:如果您不小心使用了错误的编辑器,请尝试

EDITOR=nano crontab -e

3、在底部插入以下文本

@reboot / bin / bash / home / pi / start_robot

插入后如下

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

@reboot /bin/bash /home/pi/start_robot

4、现在,只需插入相机和USB扬声器,然后重新启动

sudo reboot

5、打开remo.tv,进入你的机器人频道就可以看到机器人摄像头图像了
在这里插入图片描述
6、如果没有成功运行,进入树莓派remotv目录,运行controller.py文档

sudo python controller.py

在这里插入图片描述

五、通讯控制设置

通过上面的操作现在树莓派已经和平台通信成功,接下来就是树莓派与小车通信,然后通过平台发送指令控制小车。

1、平台控制指令编写

进入remo.tv个人机器人界面,我们可以看到视频界面下端有默认的前后左右按钮,我们可以点击edit buttons进行按钮编辑
在这里插入图片描述
编辑时主要记住热键以及通信字符,编辑完成点击上传即可
在这里插入图片描述

2、小车程序

给小车上传一下代码,其中接收的字符,就是前面平台设置对应的通信字符

#define MOTOR_A_PWM_PIN 6
#define MOTOR_A_DIR_PIN 2
#define MOTOR_B_PWM_PIN 5
#define MOTOR_B_DIR_PIN 4
void forward();
void back();
void turnLeft();
void turnRight();
void turnbackLeft();
void turnbackRight();
void turnLeftOrigin();
void turnRightOrigin();
void _stop();
void setup(){
  pinMode(MOTOR_A_DIR_PIN, OUTPUT);
  pinMode(MOTOR_B_DIR_PIN, OUTPUT);
Serial.begin(9600);
}
int i;
void loop()
{ if(Serial.available())
{ i= Serial.read();
  switch(i)
    { case'l':{turnLeft();delay(300);_stop();break;}
    case'f':{ forward();delay(300);_stop();break;}
    case'r':{turnRight();delay(300);_stop();break;}
    case'b':{back();delay(300);_stop();break;}
    }
  }
}
void forward()
{  
  digitalWrite(MOTOR_A_DIR_PIN, HIGH);
  digitalWrite(MOTOR_B_DIR_PIN, HIGH);
  analogWrite(MOTOR_A_PWM_PIN,100);
  analogWrite(MOTOR_B_PWM_PIN,100);
}
void back()
{ 
  digitalWrite(MOTOR_A_DIR_PIN, LOW);
  digitalWrite(MOTOR_B_DIR_PIN, LOW);
  analogWrite(MOTOR_A_PWM_PIN,100);
  analogWrite(MOTOR_B_PWM_PIN,100);
}
void turnLeft()
{   
  digitalWrite(MOTOR_A_DIR_PIN, LOW);
  digitalWrite(MOTOR_B_DIR_PIN, HIGH);
  analogWrite(MOTOR_A_PWM_PIN,100);
  analogWrite(MOTOR_B_PWM_PIN,100);
}
void turnRight()
{   
  digitalWrite(MOTOR_A_DIR_PIN, HIGH);
  digitalWrite(MOTOR_B_DIR_PIN, LOW);
  analogWrite(MOTOR_A_PWM_PIN,100);
  analogWrite(MOTOR_B_PWM_PIN,100);
}
void _stop()
{ 
  digitalWrite(MOTOR_A_DIR_PIN, HIGH);
  digitalWrite(MOTOR_B_DIR_PIN, HIGH);
  analogWrite(MOTOR_A_PWM_PIN,0);
  analogWrite(MOTOR_B_PWM_PIN,0);
}

上传成功后就可以用USB线将arduino与树莓派进行连接,就可以通过小车进行控制了。

六、项目总结

因为功能比较简单,只是实现最基本的视频控制,其他功能也可继续丰富,比如加上麦和喇叭,就可以实现实时互动交流了。
现在树莓派是连接家里的网络,也可以配个移动wifi或者连接手机热点,小车就可以远程出去观世界了,但是谨防粉丝直接把小车抱走。。。。。
更多功能还可自行研究,也可加入群进行交流
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值