小黑仿生轮腿机器人(一)-本体说明及运动控制
一、本体说明
1. 机器人整体描述
小黑仿生轮腿机器人是一款全向仿生轮腿,具备麦克纳姆轮底盘的运动特性的同时,还具备了部分四足仿生机器人的运动特性。通过4个麦克纳姆轮和腿部动作的配合,可以在运动中改变机身的姿态,适应不同的作业环境。
小黑仿生轮腿机器人的肩部安装了8个超声波传感器,还安装了激光雷达、双目摄像头和屏幕,可以用于更复杂的智能控制。
2. 结构说明
轮腿本体结构为模块化结构设计,包含悬挂模块、腿模块、轮模块等。其中悬挂模块可以让机器人的轮子有更好的着地性,防止悬空。
肩膀位置的悬架上下板之间,安装了8个超声波传感器。
结构各部分说明:
零件包含机加工钣金零件、五金零件、3D打印零件,以及弹簧、同步皮带等。BOM及加工文件可在本文末尾下载。
3. 电子硬件
这款轮腿机器人主要的电子硬件包含一个控制机箱(机箱内含Arduino mega2560控制板、专用扩展板、电池等,机箱外部提供各种开关按钮和USB等接口)、树莓派4B、激光雷达、双目摄像头、显示屏、键盘、鼠标及相关的连接线。
我们把装有摄像头的那一端规定为轮腿的前端,下面是关于舵机的接线说明。
4个大标准舵机(模拟舵机)用于腿的摆动,4个总线舵机通过同步皮带带动麦克纳姆轮。
扩展板电路图如下:
大扩展板,直接堆叠在mega2560上
小扩展板1
堆叠在大扩展板上,含2个总线舵机接口、2个舵机接口、4个超声波传感器接口。
小扩展板2
含2个总线舵机接口、2个舵机接口、4个超声波传感器接口
小扩展板3(含6个传感器接口、2个串口、2个总线舵机接口、1个IIC接口、1个舵机接口)
扩展板PCB文件可以在文末下载。
轮腿机箱右侧常用接口:
其中各个接口的含义如下图所示:
4. BOM
名称 | 数量 | 规格 |
大臂输出头 | 4 | 6061铝氧化黑 |
电机壳1 | 4 | 6061铝氧化黑 |
电机壳2 | 4 | 6061铝氧化黑 |
舵机输出轴 | 4 | 6061铝氧化黑 |
机械臂 | 8 | 6061铝氧化黑 |
机械臂挡片 | 24 | 6061铝氧化黑 |
轮轴 | 4 | 304不锈钢 |
皮带轮1 | 8 | 6061铝氧化黑 |
皮带轮4 | 4 | 6061铝氧化黑 |
皮带轮5 | 4 | 6061铝氧化黑 |
皮带轮挡片 | 28 | 6061铝氧化黑 |
皮带轮挡片支架 | 8 | 6061铝氧化黑 |
皮带轮支架柱 | 4 | 6061铝氧化黑 |
25齿轮 | 4 | 铜 |
44齿轮 | 4 | 铜 |
车架 | 1 | 6061铝氧化黑 |
后支架板 | 1 | 6061铝氧化黑 |
前支架板 | 1 | 6061铝氧化黑 |
主控侧板 | 1 | 6061铝氧化黑 |
主控底板 | 1 | 6061铝氧化黑 |
主控顶板 | 1 | 6061铝氧化黑 |
主控后板 | 1 | 6061铝氧化黑 |
主控前板 | 1 | 6061铝氧化黑 |
乐视双目支架 | 1 | 亚克力黑色5mm |
雷达小板外壳1 | 1 | 进口高硬度尼龙_3D打印 |
雷达小板外壳2 | 1 | 进口高硬度尼龙_3D打印 |
超声波外壳1 | 4 | 进口高硬度尼龙_3D打印 |
超声波外壳2 | 4 | 进口高硬度尼龙_3D打印 |
电池仓 | 1 | 进口高硬度尼龙_3D打印 |
轮腿扩展版 | 1 | PCB |
轮腿连接板1 | 1 | PCB |
轮腿连接板2 | 1 | PCB |
轮腿连接板3 | 1 | PCB |
麦克纳姆轮 | 4 | 型号14144 |
皮带2 | 8 | 橡胶5M,310-5M |
六角铜柱15 | 4 | M3*15双通 |
总线舵机 | 4 | 串行总线舵机,送调试板 |
大扭力数字高压舵机 | 4 | |
轴承6701zz | 36 | 6701-zz(12*18*4) |
轴承MR85zz | 8 | MR85zz(5*8*2.5) |
舵机输出头 | 8 | |
M204黑色沉头螺丝 | 1 | M2*4 |
扭簧 | 8 | |
M210黑色沉头螺丝 | 1 | M2*10 |
树莓派4B | 1 | 内存4G |
32G内存卡 | 1 | |
树莓派显示屏 | 1 | 带支架 |
超声波模组 | 4 | 含PCB加工 |
Arduino Mega2560主控板 | 1 | |
2560主控板数据线 | 1 | |
11.1V动力电池 | 1 | |
杉川激光雷达 | 1 | 含数据线和转接板 |
乐视深度摄像头 | 1 | 含底座 |
弯头Type-c线(双弯头) | 1 | 0.25m |
直通HDMI航空头 | 1 | HDMI新款直通 |
D型ZUSB-3.0直通母座 | 1 | D型ZUSB-3.0直通母座 |
环形12V自锁开关 | 1 | 12V(自锁式)、22mm、环形+电源灯绿色带插座 |
电源适配器 | 1 | DC5.5mm接口,12V10A |
5V6A稳压模块 | 1 | 5V6A |
micro-HDMI线 | 1 | D2-A1 0.15m |
双公头USB | 1 | |
DC电源插座插孔 | 1 | |
双头JTAG排线30P | 1 | |
双头JTAG排线16P | 2 | |
动力电池电源线 | 1 | |
蓝牙键鼠套装 | 1 | |
USBhub3.0 | 1 | |
探索者4芯输入排线 | 8 | |
M3黑色沉头螺丝6mm | 100 | |
M3黑色沉头螺丝8mm | 100 | |
M3黑色沉头螺丝10mm | 100 | |
六角铜螺柱50 | 10 | M3*50(10粒) |
六角铜螺柱20 | 10 | M3*20(10粒) |
压簧50 | 4 | 1.0*8*50 |
5. 资料内容
① 轮腿驱动及控制-样机3D文件
② 轮腿-生产加工文件
资料内容详见:小黑仿生轮腿机器人(本体说明)
二、运动控制
1. 运动功能描述
小黑仿生轮腿机器人是一款全向仿生轮腿,具备麦克纳姆轮底盘的运动特性的同时,还具备了部分四足仿生机器人的运动特性。通过4个麦克纳姆轮和腿部动作的配合,可以在运动中改变机身的姿态,适应不同的作业环境。
2. 运动功能的实现
本示例将提供轮腿的基本运动,包括前进、后退、左平移、右平移、左转、右转及轮腿变形运动的参考程序。
编程环境:Arduino 1.8.19
2.1 轮腿基本运动
实现思路:轮腿可以前进、后退、左平移、右平移、左转、右转。
例程(Base_Experiment\wheelLegDrive\wheelLegDrive.ino)
/*------------------------------------------------------------------------------------
版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
Distributed under MIT license.See file LICENSE for detail or copy at
https://opensource.org/licenses/MIT
by 机器谱 2023-02-28 https://www.robotway.com/
------------------------------*/
/*
* 功能:轮腿驱动
*
* 车身位置及传感器\电机接线:
*
* Y
* |
* |
* |
* | 【车身左侧】
* | t:22 t:47
* | e:24 e:45
* | 舵机[servoPin:26] t:25 A - - - - - - - - - - - - - - - - - -Y: t:44 舵机[servoPin:43]
* | e:23 | | e:46
* |【车尾】 | | 【车头】
* | t:31 | | t:40
* | 舵机[servoPin:27] e:29 Z - - - - - - - - - - - - - - - - - -X: e:38 舵机[servoPin:42]
* | t:28 t:39
* | e:30 e:41
* | 【车身右侧】
* |
* 0----------------------------------------------------------------------------------------------------------X
* //
*/
//#include <SoftwareSerial.h>
#include<Servo.h>
//#include<ServoTimer2.h>
#define StepTest 20
#define BaudRate 115200
#define StepTestMultiple 1
#define BriefDelayTimes 10
#define ActionDelayTimes 1500
#define CarActionDelayTime 600
#define mySerial Serial1
#define set_pwm_now 2500
#define set_pwm_nows 1500
bool Ultrasonic_flags[8]={};
long GetUltrasonicDatas[8]={};
double ActualSteps = StepTest*StepTestMultiple;
enum{FORWARD=1,BACK,LEFTROAD,RIGHTROAD,AUTO_MOVE};
float wheel_Speed[4]={0,0,0,0};
float current_vx = 0,current_vy = 0,current_va = 0;
//SoftwareSerial mySerial(51, 9);
void setup() {
delay(1000);
mySerial.begin(115200);
Serial.begin(BaudRate);//set Baud rate
init_Servo();delay(300);
init_Ultrasonic();
XYSetVel(0.0,0.0, 0.0);delay(300);
moveTest();
}
void loop() {
//moveTest();
//Get_ultrasonic_sensor_data();
}
void control_single_motor(int speed_single,int pwm)
{
char cmd_return[200];
sprintf(cmd_return, "{#%03dP%04dT%04d!}",0,pwm,1);
mySerial.print(cmd_return);
}
void moveTest(){
XYSetVel(0.05, 0.0, 0.0);delay(2000); //forward 前进
XYSetVel(0.0,0.0, 0.0);delay(2000);//停止
XYSetVel(-0.05,0.0,0.0);delay(2000); //back 后退
XYSetVel(0.0,0.0, 0.0);delay(2000);
XYSetVel(0.0,0.0,-0.20);delay(2000); //left 左转
XYSetVel(0.0,0.0, 0.0);delay(2000);
XYSetVel(0.0 ,0.0,0.20 );delay(2000); //right 右转
XYSetVel(0.0,0.0, 0.0);delay(2000);
XYSetVel( 0.0, -0.05, 0.0);delay(2000);//Left translation 左平移
XYSetVel( 0.0, 0.05, 0.0);delay(2000);//right translation 右平移
XYSetVel(0.0,0.0, 0.0);delay(2000);
}
2.2 轮腿变形运动
实现思路:通过控制轮腿的舵机,来实现轮腿变形的效果。
例程(Base_Experiment\Wheel_leg_deformation\Wheel_leg_deformation.ino)
/*------------------------------------------------------------------------------------
版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
Distributed under MIT license.See file LICENSE for detail or copy at
https://opensource.org/licenses/MIT
by 机器谱 2023-02-28 https://www.robotway.com/
------------------------------*/
/*
* 功能:轮腿变形
*
*
* 车身位置及传感器\电机接线:
*
* Y
* |
* |
* |
* | 【车身左侧】
* | t:22 t:47
* | e:24 e:45
* | 舵机[servoPin:26] t:25 A - - - - - - - - - - - - - - - - - -Y: t:44 舵机[servoPin:43]
* | e:23 | | e:46
* |【车尾】 | | 【车头】
* | t:31 | | t:40
* | 舵机[servoPin:27] e:29 Z - - - - - - - - - - - - - - - - - -X: e:38 舵机[servoPin:42]
* | t:28 t:39
* | e:30 e:41
* | 【车身右侧】
* |
* 0----------------------------------------------------------------------------------------------------------X
* //
*/
#include<Servo.h>
#define StepTest 20
#define BaudRate 115200
#define StepTestMultiple 1
#define BriefDelayTimes 10
#define ActionDelayTimes 1500
#define CarActionDelayTime 600
#define mySerial Serial1
#define set_pwm_now 2500
#define set_pwm_nows 1500
bool Ultrasonic_flags[8]={};
long GetUltrasonicDatas[8]={};
double ActualSteps = StepTest*StepTestMultiple;
enum{FORWARD=1,BACK,LEFTROAD,RIGHTROAD,AUTO_MOVE};
float wheel_Speed[4]={0,0,0,0};
float current_vx = 0,current_vy = 0,current_va = 0;
void setup() {
delay(3000);
mySerial.begin(115200);
Serial.begin(BaudRate);//set Baud rate
init_Servo();delay(2300);
init_Ultrasonic();
XYSetVel(0.0,0.0, 0.0);delay(2300);
Dog_Dance();
}
void loop() {
}
3. 资料内容
轮腿驱动及控制-例程源代码
资料内容详见:小黑仿生轮腿机器人(运动控制)
三、超声避障
1. 功能描述
在轮腿上装8个 超声测距传感器 ,本文示例将实现轮腿避障的效果。
2. 电路连接
轮腿的每个边角上装有2个超声测距传感器,共8个,超声测距传感器的PCB是重新设计的,如下图所示:
超声测距传感器的安装位置如下图所示:
3. 功能实现
编程环境:Arduino 1.8.19
参考例程(Base_Experiment\Control_IicServo_and_Servo),实现轮腿避障效果。下面是主程序Control_IicServo_and_Servo.ino:
/*------------------------------------------------------------------------------------
版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
Distributed under MIT license.See file LICENSE for detail or copy at
https://opensource.org/licenses/MIT
by 机器谱 2023-02-28 https://www.robotway.com/
------------------------------*/
/*
* 轮腿避障
*
* 车身 位置及传感器\电机接线:
*
* Y
* |
* |
* |
* | 【车身左侧】
* | t:22 t:47
* | e:24 e:45
* | 舵机[servoPin:26] t:25 A - - - - - - - - - - - - - - - - - -Y: t:44 舵机[servoPin:43]
* | e:23 | | e:46
* |【车尾】 | | 【车头】
* | t:31 | | t:40
* | 舵机[servoPin:27] e:29 Z - - - - - - - - - - - - - - - - - -X: e:38 舵机[servoPin:42]
* | t:28 t:39
* | e:30 e:41
* | 【车身右侧】
* |
* 0-----------------------------------------------------------------------------------------
* //
*/
//#include <SoftwareSerial.h>
#include<Servo.h>
//#include<ServoTimer2.h>
#define StepTest 20
#define BaudRate 115200
#define StepTestMultiple 1
#define BriefDelayTimes 10
#define ActionDelayTimes 1500
#define CarActionDelayTime 600
#define mySerial Serial1
#define set_pwm_now 2500
#define set_pwm_nows 1500
bool Ultrasonic_flags[8]={};
long GetUltrasonicDatas[8]={};
double ActualSteps = StepTest*StepTestMultiple;
enum{FORWARD=1,BACK,LEFTROAD,RIGHTROAD,AUTO_MOVE};
float wheel_Speed[4]={0,0,0,0};
float current_vx = 0,current_vy = 0,current_va = 0;
//SoftwareSerial mySerial(51, 9);
void setup() {
delay(500);
mySerial.begin(115200);
Serial.begin(BaudRate);//set Baud rate
init_Servo();delay(300);
init_Ultrasonic();
XYSetVel(0.0,0.0, 0.0);delay(300);
moveTest();
Dog_Dance();
}
void loop() {
Get_ultrasonic_sensor_data();
}
void control_single_motor(int speed_single,int pwm)
{
char cmd_return[200];
sprintf(cmd_return, "{#%03dP%04dT%04d!}",0,pwm,1);
mySerial.print(cmd_return);
}
void moveTest(){
XYSetVel(0.05, 0.0, 0.0);delay(2000); //forward 前进
XYSetVel(0.0,0.0, 0.0);delay(2000);//停止
}
4. 资料内容
轮腿避障-例程源代码
资料内容详见:小黑仿生轮腿机器人(超声避障)