UGV02 教程

产品介绍

UGV02系列产品是一款具备超强的越野通过能力和抗震性能、开源全部代码可二次开发的六轮四驱移动机器人底盘。支持扩展多种上位机(树莓派、Jetson Nano、地平线旭日X3等),上位机通过串口与ESP32下位机进行通信。

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

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


产品特性

  • 配有203mm间距的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和蓝牙,即使不安装上位机也可以单独使用。
  • 可扩展多种上位机,使用串口来传输JSON格式的数据来kong'z
  • 全部代码开源并提供丰富的开发文档和教程。
  • 开源扩展平面图纸和底盘结构图纸,包括3D模型,方便进行二次开发。



UGV02 产品入门教程

注意:购买海外版的客户需要自行购买安装3个18650锂电池才可以正常使用,推荐使用高放电倍率的电池

UGV02的基本使用

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

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

打开手机浏览器,推荐Google Chrome浏览器,访问网址 192.168.4.1,就可以打开UGV02_BASE的控制页面,你可以在这个页面上发送JSON格式的指令来控制和设置板载的总线舵机设备,获取总线舵机的反馈,获取IMU信息,控制PWM舵机角度,设置OLED显示屏的内容等,方便用户进行上位机开发。

Web端界面会实时显示机器人的电压、信号强度(STA模式)、航向角、IP和MAC地址等信息。

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

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

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

UGV02的JSON指令交互教程

什么是JSON?

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

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

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

JSON指令的交互方式

我们在例程中提供了两种与UGV02进行JSON指令交互的方式:
1.通过Web端应用(或者通过程序发送请求,可用于与上位机进行无线JSON交互)。
2.通过串口通信,UGV02的驱动板上面的40PIN扩展接口中有对应的RX、TX接口,采用3.3V逻辑电平(适用于树莓派、Jetson nano等上位机,不适用于串口逻辑电平为5V的Arduino Uno),你也可以通过Type-C接口和USB接口与上位机进行交互,UGV02驱动板上有两个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两个参数,分别控制左侧电机的功率和右侧电机的功率,可以取-1到+1之间的数值(这个值越大,电机功率越高,速度越快,正值表示向前,复制表示向后),但是由于直流减速电机的低速特性,功率取值的绝对值需要大于等于0.2,当速度取值的绝对值低于0.2但不为零时,电机会以20%的功率运行,速度为正值时,车轮向前运行;速度为0时,车轮停止转动;速度为负值时,车轮向后转动。

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

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

EMERGENCY_STOP: {"T":0}

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

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

移动控制指令,参数分别代表左侧电机功率和右侧电机功率,速度值可正可负,为±1时为满负荷运转,为0时停止,动作时的绝对值需要大于0.2小于1。

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

电机闭环控制的PID控制,注意,该功能不适用于UGV02这种没有速度反馈的底盘

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热点。
热点名称:UGV02_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}

用于获取电机编码器信息。(不适用于UGV02,因为UGV02的电机没有编码器)

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各模块使用


电机参数

  • 型号:JGB37-520 直流减速电机
  • 额定电压:12V
  • 额定电流:0.3A
  • 堵转电流:1.4A
  • 额定转矩:2.4kg.cm
  • 堵转转矩:10.4kg.cm
  • 额定输出功率:1.3W
  • 空载转速:66±10%RPM
  • 额定转速:51±10%RPM
  • 电机尺寸:37*52mm
  • 输出轴尺寸:6*15mm
  • 单个电机重量:145g


资料

开源例程

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

机器人模型