UGV01

来自Waveshare Wiki
跳转至: 导航搜索
UGV01
{{{name2}}}
{{{name3}}}
功能简介
特性 UGV01履带机器人
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 TTL总线舵机控制接口 IIC UART

产品介绍

UGV01系列产品是一款具备超强的越野通过能力和抗震性能、开源全部代码可二次开发的移动机器人履带底盘。支持扩展多种上位机(树莓派、Jetson Nano、地平线旭日X3等),上位机通过串口与ESP32下位机进行通信,电机带有编码器可以获得速度反馈来进行速度闭环控制。

内置3S 18650锂电池UPS供电模块(3节18650锂电池串联),为机器人提供持续能量来源的同时支持边充电边放电。内置多功能机器人驱动板,可扩展总线舵机、PWM舵机、SD卡等功能,驱动板基于ESP32,板载WIFI和蓝牙。

它采用了多独立悬挂系统,极大减少了复杂地形冲击,并配有两条1020欧标型材扩展导轨,使其轻松满足重载、避震、越野等要求,为二次开发提供了更多的可行性。


产品特性

  • 采用多独立悬挂系统,每侧配有四个独立悬挂,大幅度减少复杂地形冲击。
  • 重负载爬坡时,悬挂收缩,后轮会提供格外支撑,拥有优秀的爬坡能力。
  • 电机带有编码器,可以获得速度反馈来进行速度闭环控制。
  • 搭载交互设备0.96inch OLED屏幕。
  • 带有充电接口和自动下载电路,你可以边充电边使用。
  • UPS供电模块板载INA219采集芯片,方便实时监控电池电压,充电电流。
  • UPS供电模块三节串联18650电池,7800mAh大容量,输出电流更大,电机动力更强。
  • UPS供电模块还提供输出5V和3.3V用于扩展其它设备。
  • UPS供电模块板载锂电池保护电路,具有防过充、防过放、防过流和短路保护功能。
  • 例程代码使用Arduino IDE开发,不需要手动配置编译环境,ESP32开机自动建立WIFI热点,可使用手机(Android/iOS)或电脑(Linux/Windows/Mac)连接并登录到控制页面,只需安装基于Chromium的浏览器即可,不需要下载app。
  • 下位机ESP32可用于驱动直流电机、总线舵机,板载OLED屏幕接口、TF卡槽、九轴IMU模块、WiFi和蓝牙,即使不安装上位机也可以单独使用。
  • 可扩展多种上位机
  • 全部代码开源并提供丰富的开发文档和教程。



UGV01 产品入门教程

注意:购买海外版的客户需要自行购买安装3个18650锂电池才可以正常使用。首次接上电池需注意LED灯是否亮,如果LED灯亮则表示电池的正负极接反,请检查并确保电池未接反。电池接反的情况下禁止充电,否则有几率引起爆炸。

UGV01的基本使用

UGV01的驱动板基于ESP32模组开发而来,在开机后,ESP32会优先连接已知的WIFI热点(后续教程会介绍如何设置已知WIFI),如果开机后20秒内WIFI没有连接成功,ESP32会自动建立一个热点。
热点名称:UGV01_BASE
热点密码:12345678

用手机连接这个热点后,手机会提示你这个热点没有网络,允不允许切换热点,要选择不允许,保持与UGV01_BASE热点的连接。

打开手机浏览器,推荐Google Chrome浏览器,访问网址 192.168.4.1,就可以打开UGV01_BASE的控制页面,你可以在这个页面上发送JSON格式的指令来控制和设置板载的总线舵机设备,获取总线舵机的反馈,获取IMU信息,控制PWM舵机角度,设置OLED显示屏的内容等,方便用户进行上位机开发。
Webser2.jpg Webser1.jpg
Web端界面会实时显示机器人的电压、信号强度(STA模式)、航向角、IP和MAC地址等信息。

通过方向按键可以控制机器人运动,方向按键下面的SLOW、MIDDLE、FAST按键用来选择机器人的移动速度。
速度采用闭环控制方式,且网页端包含了“心跳检测”,打开网页端控制界面后,Web端应用会与机器人进行连续通信,如果在机器人的运动过程中断开连接,机器人在短时间内会自动停止运动,避免危险。

当使用平板电脑或PC打开Web端控制界面时,你可以使用键盘上的WASD这几个按键来控制机器人,为了避免误操作,登陆后的前几下快捷键是无反应的,循环按一次或几次WASD这几个按键,就可以开始控制机器人了。

此Web端应用是完全开源的,你可以通过更改WebPage.h来更改Web端应用的界面和功能,你可以根据我们提供的二次开发教程,来学习如何对产品功能进行二次开发和扩展。

UGV01的JSON指令交互教程

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换。同时也易于机器解析和生成。

为什么使用JSON指令与UGV01进行交互?

由于UGV01的板载资源比较多、例程功能丰富、同时兼顾方便扩展上位机,让上位机对于UGV01的控制功能更加丰富和方便,所以我们使用JSON指令通信来与UGV01进行交互,同样的,你也可以基于现有的框架对这些功能进行二次开发,让UGV01的功能更适合你的使用需求。

JSON指令的交互方式

我们在例程中提供了两种与UGV01进行JSON指令交互的方式:
1.通过Web端应用(或者通过程序发送请求,可用于与上位机进行无线JSON交互)。
2.通过串口通信,UGV01的驱动板上面的40PIN扩展接口中有对应的RX、TX接口,采用3.3V逻辑电平(适用于树莓派、Jetson nano等上位机,不适用于串口逻辑电平为5V的Arduino Uno),你也可以通过Type-C接口和USB接口与上位机进行交互,UGV01驱动板上有两个Type-C接口,位于中间的Type-C接口用于与ESP32进行通信和上传程序,无论你使用那种方式与上位机连接,通信波特率都为1000000。

JSON指令的使用方式

打开Web端控制界面后,你可以看到界面下方的FEEDBACK INFOMATION板块,板块上方有个输入栏和一个SEND按键,你可以将JSON数据填写到这里然后点击SEND按键,如果这个指令是有反馈的,那么反馈信息会显示在这个输入栏的上方,在输入栏的下方,是JSON指令的例子,每个例子的后面有个INPUT按键,点击它,这个指令会被填写到输入栏中,你可以在输入栏中编辑这个指令,然后按下SEND键与机器人进行交互。

当然,你也可以通过上位机来生成这种JSON指令通过串口发送给机器人,波特率1000000,串口RX/TX引脚逻辑电平3.3V,也可以使用Type-C接口的USB线进行通信。

后续会对每一条JSON指令进行解释,首先,我们以控制移动的JSON指令为例,控制移动的JSON指令为 SPEED_INPUT 后面的 {"T":1,"L":0.5,"R":0.5},点击这条指令后面的 INPUT,这条指令会被填写到上方的输入栏中,每一条JSON指令最前面的参数都是"T",它代表这条指令的类型,例如,"T":1 代表着这条指令是一条控制机器人移动的指令,移动命令,除了T参数,还有L和R两个参数,分别控制左侧履带的速度和右侧履带的速度,单位是m/s,可以取-1到+1之间的数值,但是由于直流减速电机的低速特性,速度取值的绝对值需要大于等于0.2,当速度取值的绝对值低于0.2但不为零时,履带会以0.2m/s的速度运行,速度为正值时,履带向前运行;速度为0时,履带停止转动;速度为负值时,履带向后转动。

例如,如果你希望机器人全速向后倒退,就可以将这条指令编辑为 {"T":1,"L":-1,"R":-1},点击SEND按键后,机器人会全速向后移动一段时间后停止,由于心跳检测的原因,当机器人在一段时间内没有收到新的指令,会自动停止运行,避免危险。

以下内容用来介绍每条JSON指令的含义:

EMERGENCY_STOP: {"T":0}

急停指令,如果指令类型T没有与其对应的函数,也会触发急停。

SPEED_INPUT: {"T":1,"L":0.5,"R":0.5}

移动控制指令,参数分别代表左侧履带速度和右侧履带速度,速度值可正可负,为0时停止,动作时的绝对值需要大于0.2小于1。

PID_SET: {"T":2,"P":170,"I":90}

电机闭环控制的PID控制,由于产品的电机控制没有使用到D参数所以这里只需输入P和I参数,P:170与I:90是该产品的默认参数。

OLED_SET: {"T":3,"lineNum":0,"Text":"putYourTextHere"}

OLED屏幕显示内容设置,lineNum参数为行设置,可以为:0、1、2、3,共可以显示4行内容。每次设置一行内容,新的内容不会影响到其它行显示的内容,但是会替换掉这一行之前原有的内容。
Text参数为内容设置,你可以在这里输入文字,文字会显示在对应行上。
当使用这条命令后,OLED屏幕将不会再显示机器人的信息,而是会显示指令让他显示的内容

OLED_DEFAULT: {"T":-3}

指令类型为-3时,会将OLED屏幕重置为初始状态,显示机器人的信息。

PWM_SERVO_CTRL: {"T":40,"pos":90,"spd":30}

PWM舵机角度控制指令,PWM信号由驱动板的IO4引脚生成,大部分PWM信号的舵机转动范围为0-180°,pos参数为要转动到的角度,90°为舵机的中间位置,spd参数为预留的速度接口,例程中为避免堵塞线程,所以spd参数并没有用到。

PWM_SERVO_MID: {"T":-4}

PWM舵机转动到中间位置,也就是90°的位置。

BUS_SERVO_CTRL: {"T":50,"id":1,"pos":2047,"spd":500,"acc":30}

总线舵机控制指令,这里需要注意,连接的总线舵机工作电压与驱动板的供电电压是否符合,你可以直接使用我们的ST3215总线舵机。
id: 总线舵机的ID,与驱动板连接的总线舵机ID不可以有重复的。
pos: 要舵机转动到的目标位置,对于ST3215舵机,在角度控制模式下,这一数值可以为0-4095,对应0-360°的顺时针方向转动范围;在连续转动的模式下,数值可以为±32766。
spd: 总线舵机的转动速度,单位时间(每秒)内运动的步数,50步/秒=0.732RPM(圈/分钟),数值越大速度越快(但是舵机的速度是有极限的),参数为0时,以最大速度运行,
acc: 总线舵机转动的加速度,数值越小启停越平滑,数值可以为0-254,如设置为10,则按照1000步每秒的平方加速度变速,当参数为0时,则按照最大的加速度运行。

BUS_SERVO_MID: {"T":-5,"id":1}

将某个ID的总线舵机转动到舵机中位(前提是这个舵机的运行模式为0:位置伺服模式)。
id: 目标舵机的ID。

BUS_SERVO_SCAN: {"T":52,"num":20}

用于扫描总线上连接了哪些ID的舵机,不可以有重复ID。结果会反馈回来显示在输入栏上方。
num: 舵机的最大ID,数值越大扫描时间越长。

BUS_SERVO_INFO: {"T":53,"id":1}

用于获取某一个舵机的信息反馈,反馈内容包含舵机的位置、速度、电压、扭矩等信息。

BUS_SERVO_ID_SET: {"T":54,"old":1,"new":2}

用于更改一个舵机的ID,每个新舵机的ID默认都是1,如果你不知道手头的舵机ID,可以使用上面的 BUS_SERVO_SCAN 命令来获得,但是前提是当查看这个舵机ID时驱动板只连接了这一个舵机,否则你不知道哪个ID对应哪个舵机。
old: 要更改ID的舵机的ID
new: 要设置的新ID

BUS_SERVO_TORQUE_LOCK: {"T":55,"id":1,"status":1}

舵机扭矩锁开关。
id: 要控制扭矩锁的舵机ID。
status: 扭矩锁开关参数,1为开启扭矩锁,舵机会保持自己所在的位置;0为关闭扭矩锁,舵机会在外力的作用下转动。

BUS_SERVO_TORQUE_LIMIT: {"T":56,"id":1,"limit":500}

舵机扭矩限制命令。
id: 目标舵机的ID。
limit: 扭矩限制比例,500为 50%*堵转扭力,1000为 100%*堵转扭力,限制扭矩后,当舵机受到外力作用时,当外力的扭力大于限制扭矩后,舵机会随外力转动,但仍然会提供这一扭力,该功能可以用于制作机械臂的夹头。

BUS_SERVO_MODE: {"T":57,"id":1,"mode":0}

舵机运行模式。
id: 目标舵机ID。
mode: 运行模式值,0:位置伺服模式,用于控制舵机的绝对角度,可以使用 BUS_SERVO_CTRL 命令对舵机的角度进行控制;3: 步进伺服模式,也使用 BUS_SERVO_CTRL 命令对其进行控制,区别是步进伺服模式下,BUS_SERVO_CTRL 的 pos 参数是可以为负数的,范围为 ±32766,给4096,会正转一圈,给-4096,反转一圈。

WIFI_SCAN: {"T":60}

WIFI扫描指令,该指令会断开现有的WIFI连接扫描周围的WIFI热点。

WIFI_TRY_STA: {"T":61}

WIFI连接指令,STA模式,用于连接已知WIFI。

WIFI_AP_DEFAULT: {"T":62}

WIFI热点开启指令,AP模式,机器人会自己建立一个WIFI热点。
热点名称:UGV01_BASE
热点密码:12345678

WIFI_INFO: {"T":65}

用于获取WIFI信息

WIFI_OFF: {"T":66}

关闭WIFI。

INA219_INFO: {"T":70}

获取INA219的信息,包括电源的电压电流功率等信息。

IMU_INFO: {"T":71}

用于获取IMU信息,包括航向角、地磁场、加速度、姿态、温度等信息。

ENCODER_INFO: {"T":73}

用于获取电机编码器信息。

DEVICE_INFO: {"T":74}

用于获取设备信息,设备信息是需要用户自定义的,用于介绍这个设备的用途或其它信息。

IO_IR_CUT: {"T":80,"status":1}

用于控制驱动板上面的IO5引脚的高低电平,可用于控制红外摄像头的夜视功能开关,也可以用于控制继电器。

SET_SPD_RATE: {"T":901,"L":1.0,"R":1.0}

用于调整每侧履带的转速,当给机器人左右履带相同的速度时,如果机器人的移动不是直线,可以使用这个命令来对履带速度进行微调,这个数值会作为系数乘以履带的输出功率,来改变履带的速度。
L: 左侧履带的速度系数。
R: 右侧履带的速度系数。

GET_SPD_RATE: {"T":902}

获取左右两侧履带的速度系数。

SPD_RATE_SAVE: {"T":903}

保存履带的速度系数,会被保存在ESP32的nvs区,掉电后也不会丢失,开机后由nvs区读取并加载这个速度系数。

GET_NVS_SPACE: {"T":904}

获取ESP32的nvs区剩余空间。

NVS_CLEAR: {"T":905}

清理nvs区,该命令会删除nvs区的全部内容,速度系数会变回默认值1.0。

驱动板General Driver for Robots各模块使用

资料

开源例程

机器人尺寸图纸和扩展平台图纸

机器人模型




技术支持


联系人:刘工
EMAIL:3005296252@qq.com
QQ:3005296252
微信:扫下方二维码添加
QRCode WeiLiu.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证