受疫情影响不得不呆在家里,网上看到山东硬核小姐姐用遥控视频小车买馒头,逛大明湖,这真是躺在家里逛世界的赶脚。刚好手头有个机器人小车,就想着改造一下。
1、树莓派3B+一块
2、arduino小车一个
3、USB摄像头一个
其中arduino小车网上有很多教程可自行搜索。因为小车只是载体,没有太多复杂的功能,只需要一块arduion控制板,一个电机驱动模块,两个电机即可。至于小车外形可更具自己的喜好进行搭建。
以下是我的小车,用的是类似于arduino的成品。
整个项目是通过树莓派来实现网络连接控制,然后树莓派和arduino小车进行串口通信,来控制小车的运行。摄像头视频是搭载在树莓派系统上的。
最主要的是如何实现远程网络控制,这里使用的是一个现成的网络机器人平台:https://remo.tv,各种机器人都可以连接到平台上,进行远程操控,也可分享让所有在线用户操控体验,有些类似于机器人直播。
主要控制是基于树莓派实现的,但是也兼容其他各种品牌的机器人,有现成的可以直接使用事例代码,进行修改数据即可,没有匹配的机器人型号,就要根据官方文档自己开发了。
下面是平台机器人列表界面,所有在平台上的机器人,只要在激活状态,都可以操控体验。
因为使用的是开源平台,可以直接使用平台开源代码,可以通过访问https://github.com/remotv/controller,有详细的操作说明。
至于树莓派环境的配置可以查看我前面几篇零基础使用树莓派的文章:
零基础玩转树莓派(二)-操作系统安装及环境配置
零基础玩转树莓派(三)—通过SSH远程连接树莓派
树莓派基本环境配置完成后,就可以把树莓派固定到小车上,通过SSh来远程连接操控。
接下来会按照官方文档进行简单配置,没有涉及到的部分,可以自行查看文档。
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
git clone https://github.com/remotv/controller.git ~/remotv
sudo python -m pip install -r ~/remotv/requirements.txt
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(自己的)
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
通过上面的操作现在树莓派已经和平台通信成功,接下来就是树莓派与小车通信,然后通过平台发送指令控制小车。
进入remo.tv个人机器人界面,我们可以看到视频界面下端有默认的前后左右按钮,我们可以点击edit buttons进行按钮编辑
编辑时主要记住热键以及通信字符,编辑完成点击上传即可
给小车上传一下代码,其中接收的字符,就是前面平台设置对应的通信字符
#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或者连接手机热点,小车就可以远程出去观世界了,但是谨防粉丝直接把小车抱走。。。。。
更多功能还可自行研究,也可加入群进行交流