智能物流系统 copy - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 智能物流系统 copy

简介:该比赛是2022年”电信杯“电子设计大赛的”智能物流系统“,由华南理工大学无线电爱好者协会举办,共六个广州高校参与的比赛。 此次开源项目为一等奖作品。

开源协议: CC-BY 3.0

(未经作者授权,禁止转载)

工程来源: 克隆自 智能物流系统

创建时间: 2022-06-13 20:18:37
更新时间: 2022-06-19 15:56:44
描述

题目要求

1. 基本要求

1)基本运输单元为小车。运输物体种类为4种,体积、重量不限。参赛队伍需自行划分好不同种类的物体需要运送的终点区域,可以但不限于通过按键输入等方式告知运输单元目前所运送的物体的种类。

2)运输单元在起点处等候运输物体的装载,绿灯以2hz频率闪烁。在物体装载前不允许启动。

3)物体装载后,计时开始。运输单元需沿着路上黑线的引导实现物品的配送。运输单元到达终点的停车线后停下,计时暂停,白灯以2hz频率闪烁,等待物体卸载。

4)待运送物体取下之后,计时继续。运输单元需要沿着路面上的引导线最终返回出发点,计时暂停,代表此次运送完成,并且等待下一个物体的运送。

5)重复要求1-4,完成运输单元对四种物体的运送过程。任务结束。

2. 提高要求

1)运输单元可以通过LCD/OLED屏幕显示出运输单元的状态,运输物体的种类,任务进行的时间。

2)通过摄像头模块使得运输单元实现对物体的区分。/通过语音模块告知运输单元待运送物体的种类。

3)在完成基本要求的基础上,进行多样性、实用性、创新性的开发

题目分析与设计

 控制系统选用 i.MX RT1064 最小系统板作为核心控制,使用 OpenArt mini
进行搬运物体种类的识别以及小车循迹和路口的识别,对应题目要求设置一路红
外传感器检测是否放置所搬运的物体;四路编码器速度、位置闭环,陀螺仪角度
闭环;电机驱动使用 H 桥 DRV8701,外置 NMOS,驱动能力强劲;题目中白色、绿
色信号灯使用 OpenArt mini 板载 RGB 灯实现;状态、搬运种类、运行时间采用
1.3’OLED 屏显示。
因此,本设计可以轻松应对题目中对于赛道的识别、对于搬运物体种类的识
别,小车惯性导航使得运行路径准确可靠,实时显示状态和搬运种类、每次搬运
后更新所用时间

本设计采用 NXP 跨界处理器 i.MX RT1064 作为主控,底盘为四驱麦轮底盘,
四个电机均有编码器闭环控制,采用六轴陀螺仪 ICM20602 进行角度闭环控制,
循迹摄像头及识别摄像头均采用 OpenArt mini,电机驱动使用 DRV8701,物体检
测使用红外对管。
由于采用闭环控制,可实现小误差定点启停,小误差角度转向。使用 OpenArt
mini 可通过运行神经网络模型,对所搬运物体进行识别分类,故无需按键输入
搬运种类。通过惯性导航,避免了红外循迹带来的不确定性

原理图设计说明

提示:说明作品中模块的设计原理图,需要配上原理图,最好是有实物图一起,每个模块都需要说明,如不需要设计的,请说明获取来源。

PCB设计说明

提示:这里写PCB的一些设计说明,如:PCB的布局、布线、线宽、间距等设计注意事项

软件说明

icm20602的互补滤波解算:

ins_update();
static float angle_last[3]={0};
float increase[3] = {0,0,0};
#ifdef pitch_roll
increase[0] = gyro_vector.x*dt;
if(fabs(increase[0])<0.02) increase[0]=0;
angle[0] = R*(angle_last[0]+increase[0])
+ (1-R)*RadtoDeg*atan(acc_vector.x/acc_vector.z);
angle_last[0] = angle[0]; //处理pitch
increase[1] = gyro_vector.y*dt;
if(fabs(increase[1])<0.0) increase[1]=0;
angle[1] = R*(angle_last[1]+increase[1])
+ (1-R)*RadtoDeg*atan(acc_vector.y/acc_vector.z);
angle_last[1] = angle[1]; //处理roll
#endif
increase[2] = -gyro_vector.z*dt;
// increase[2] = -icm_gyro_z*dt*Gyro_Gain;
if(fabs(increase[2])<0.02) increase[2]=0;
angle[2] = angle_last[2]+increase[2];
angle_last[2] = angle[2]; //处理yaw
//控制转弯角度范围在0-360°以内
if(angle_last[2]>360)
angle_last[2]-=360;
else if(angle_last[2]<0)
angle_last[2]+=360;

小车行为逻辑(只列举了一条路线):

if(Ready&&!Task_finish&&SmallClass!=0&&SmallClass!=15)
{
switch(SmallClass)
{
case 1: {sprintf(str1,"orange",SmallClass);}
case 2: {sprintf(str1,"apple",SmallClass);}
case 3: {sprintf(str1,"banana",SmallClass);}
case 4: {sprintf(str1,"grape",SmallClass);}
}
while(gpio_get(C29));
Top_camera_sendData(2);systick_delay_ms(50);
Top_camera_sendData(2);systick_delay_ms(50);
switch(SmallClass)
{
case 1:{
time_Stop = false;
oled_p8x16str(1,2,str1);
oled_p8x16str(1,0,"transit");
int distance = Centimeter_to_encoder(75);
motol_Settarget_point_move(0,distance,100);
while(!go_End);
turn_angle(90);
while(turn);
distance = Centimeter_to_encoder(55);
motol_Settarget_point_move(0,distance,100);
while(!go_End);
oled_fill(0);
oled_p8x16str(1,2,str1);
oled_p8x16str(1,0,"wait uninstall");
sprintf(str2,"time = %5d",time1);
oled_p8x16str(1,4,str2);
Top_camera_sendData(1);systick_delay_ms(50);
Top_camera_sendData(1);systick_delay_ms(50);
time_Stop = true;
while(!gpio_get(C29))
systick_delay_ms(50);
turn_angle(-90);
time_Stop = false;
Top_camera_sendData(2);systick_delay_ms(50);
Top_camera_sendData(2);systick_delay_ms(50);
oled_fill(0);
oled_p8x16str(1,4,str2);
oled_p8x16str(1,2,str1);
oled_p8x16str(1,0,"transit");
while(turn);
distance = Centimeter_to_encoder(55);
motol_Settarget_point_move(0,distance,100);
while(!go_End);
turn_angle(182);
while(turn);
distance = Centimeter_to_encoder(75);
motol_Settarget_point_move(0,distance,100);
while(!go_End);
turn_angle(0);
while(turn);
sprintf(str2,"time = %5d",time1);
oled_fill(0);
oled_p8x16str(1,2,str1);
oled_p8x16str(1,4,str2);
oled_p8x16str(1,0,"finish");
time_Stop = true;
Task_finish = true;
gpio_set(D4,0);
break;
 

pid定位算法:
average = (getEncoder(&left_front_pid,left_front_encoder,0)+getEncoder(&left_rear_pid,left_rear_encoder,0)+getEncoder(&right_front_pid,right_front_encoder,0)+getEncoder(&right_rear_pid,right_rear_encoder,0))/4;
position_point.x_point += average*sinf(angle_PI);
position_point.y_point += average*cosf(angle_PI);
encoder_vector[num].L_S = target_left_front_position-left_front_pid.encoder; //取出编码器值并且进行低通滤波+均值滤波
encoder_vector[num].L_X = target_left_rear_position-left_rear_pid.encoder;
encoder_vector[num].R_S = target_right_front_position-right_front_pid.encoder;
encoder_vector[num].R_X = target_right_rear_position-right_rear_pid.encoder;
L_SE = (int)LowPassFilter_apply(&low_filter_L_S,(encoder_vector[0].L_S+encoder_vector[1].L_S+encoder_vector[2].L_S)/3);
L_XE = (int)LowPassFilter_apply(&low_filter_L_X,(encoder_vector[0].L_X+encoder_vector[1].L_X+encoder_vector[2].L_X)/3);
R_SE = (int)LowPassFilter_apply(&low_filter_R_S,(encoder_vector[0].R_S+encoder_vector[1].R_S+encoder_vector[2].R_S)/3);
R_XE = (int)LowPassFilter_apply(&low_filter_R_X,(encoder_vector[0].R_X+encoder_vector[1].R_X+encoder_vector[2].R_X)/3);
//计算pid
L_S=Position_PID_bias(&left_front_pid,L_SE);
L_X=Position_PID_bias(&left_rear_pid,L_XE);
R_S=Position_PID_bias(&right_front_pid,R_SE);
R_X=Position_PID_bias(&right_rear_pid,R_XE);
//车身偏差修正
error = (angle[2]-Target_angle)*100;
if(error> 18000)
error = (angle[2]-360-Target_angle)*100;
else if(error<-18000)
error = (angle[2]+360-Target_angle)*100;
int left_front = Motolxianfu(L_S,11000);
int right_front = Motolxianfu(R_S,11000);
int left_rear = Motolxianfu(L_X,11000);
int right_rear = Motolxianfu(R_X,11000);
if(left_front<abs(error)||right_front<abs(error)||left_rear<abs(error)||right_rear<abs(error))
error = 0;
#ifdef DIR_MOTOL
if(left_front>0) {gpio_set(D0,1);}
else {gpio_set(D0,0);}
if(left_rear>0) {gpio_set(D2,1);}
else {gpio_set(D2,0);}
if(right_front<0) {gpio_set(D12,1);}
else {gpio_set(D12,0);}
if(right_rear<0) {gpio_set(D14,1);}
else {gpio_set(D14,0);}
pwm_duty(PWM1_MODULE3_CHB_D1,abs(left_front-error));
pwm_duty(PWM2_MODULE3_CHB_D3,abs(left_rear-error));
pwm_duty(PWM1_MODULE0_CHB_D13,abs(right_front+error));
pwm_duty(PWM1_MODULE1_CHB_D15,abs(right_rear+error));


实物展示说明

 

演示视频

bilibili视频在这

其它附件上传

 源程序下载链接

设计图
PCB
1 /
未生成预览图,请在编辑器重新保存一次
ID Name Designator Footprint Quantity
1 220uF C1,C2,DRC1,DRC2,DRC3,DRC4,DRC5,DRC6,DRC7,DRC8 CAP-TH_BD6.3-P2.50-D1.0-FD 10
2 SS54 D1,D2,D3 SMA_L4.3-W2.6-LS5.2-RD 3
3 HDR-M-2.54_1x4 J1,J2 HDR-M-2.54_1X4 2
4 33uH L2 IND-SMD_L11.5-W10.0_FXL1040 1
5 LM2596S-5.0 U1 LM2596S-5.0 1
6 220uF C3 CAP-SMD_L7.3-W4.3-R-RD 1
7 47uF C4 CAP-SMD_L7.3-W4.3-R-RD 1
8 10nF C5,C6,C7 C0805 3
9 VOUT J3 HDR-M-2.54_1X6 1
10 VIN J4 HDR-M-2.54_1X6 1
11 15uH L1 IND-SMD_L11.5-W10.0_FXL1040 1
12 10kΩ R1 R0603 1
13 3.16kΩ R2 R0603 1
14 TPS5450DDAR U2 SOIC-8_L4.9-W3.9-P1.27-LS6.0-BL-EP 1
15 10uF C8,C9,C10,C11,C13,C15,C21 C0603 7
16 100nF C12,C14,C19,C20 C0603 4
17 1uF C16,C17,C18 C0603 3
18 HDR-M-2.54_1x8 J5,J6 HDR-M-2.54_1X8 2
19 SED4060GM Q1,Q2,Q3,Q4 DFN-8_L3.0-W3.0-P0.65-BL 4
20 30mR R3 R1206 1
21 10K R4 R0603 1
22 68K R5 R0603 1
23 DRV8701ERGET U3 VQFN-24_L4.0-W4.0-P0.50-LS4.0-BL-EP 1
24 SY_12to5_LM2596 BUCK1 FP_12TO5_BUCK_V1 1
25 SY_TPS5450 BUCK2,BUCK3,BUCK4 FP_TPS5450 3
26 1000uF C22,C23 CAP-TH_BD8.0-P3.50-D0.6-FD 2
27 104 C24,C27 C0805 2
28 100uF C25,C26 CAP-SMD_L7.3-W4.3-R-RD 2
29 104 C28 C0603 1
30 SMFJ6.0A D4,D5 SOD-123_L2.8-W1.8-LS3.7-RD 2
31 SS12 D6 SMA_L4.3-W2.6-LS5.2-RD 1
32 SY_DRV8701 DRV1,DRV2,DRV3,DRV4 FP_DRV8701 4
33 PC817 E1,E2,E3,E4 OPTO-SMD-4_L4.6-W6.5-P2.54-LS10.3-BL 4
34 左前电机 H1 CONN-TH_XT30UPB-F 1
35 右前电机 H2 CONN-TH_XT30UPB-F 1
36 左后电机 H3 CONN-TH_XT30UPB-F 1
37 右后电机 H4 CONN-TH_XT30UPB-F 1
38 ICM20602 ICM1 ICM20602 1
39 LeftFrontCoder J7 IDC-TH_6P-P2.54_C11214 1
40 LeftRearCoder J8 IDC-TH_6P-P2.54_C11214 1
41 RightRearCoder J9 IDC-TH_6P-P2.54_C11214 1
42 RightFrontCoder J10 IDC-TH_6P-P2.54_C11214 1
43 继电器导通指示 LED1 LED-0805 1
44 驱动上电指示 LED2 LED-0805 1
45 电磁铁 M1,M2,M3 CONN-TH_XH2.54-3P 3
46 OLED OLED1 HDR-TH_7P-P2.54-H-W8.6_A2541HWR-7P 1
47 S8050 Q5 SOT-23-3_L2.9-W1.3-P1.90-LS2.4-TR 1
48 500R R6,R7,R9,R15 R0805 4
49 10K R8,R10,R11,R13,R16 R0805 5
50 5.1K R12 R0805 1
51 1K R14 R0805 1
52 RELAY RELAY1 RELAY-SL-SRD 1
53 CoreSwitch S1 MTS102 1
54 MotorSwitch S2 MTS102 1
55 Servo1 ST1 HDR-M-2.54_1X3 1
56 Servo2 ST2 HDR-M-2.54_1X3 1
57 Servo3 ST3 HDR-M-2.54_1X3 1
58 AM-1015B-M T1 CONN-TH_AM-1015B-M 1
59 SN74HC244APWR U4 TSSOP-20_L6.5-W4.4-P0.65-LS6.4-BL 1
60 RT1064 U5 AUFE_RT1064 1
61 AMS1117-3.3 U7 PG-SOT223-4_L6.5-W3.5-P2.30-LS7.0-BR 1
62 HDR-F-2.54_1x4 UART1 HDR-F-2.54_1X4 1
63 XH-4A_C722867 UART4,UART5 CONN-TH_XH-4A 2
64 XH1 XH1 CONN-TH_11P-P2.54_2501S-11P 1
65 XH2 XH2 CONN-TH_11P-P2.54_2501S-11P 1
66 XH3 XH3 CONN-TH_XH2.54-6P 1

展开

工程视频/附件
序号 文件名称 下载次数
1

智能物流系统.docx

28
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP