Search
moon
sun

Planar Crank-Rocker Designer

Category
Engineering Works
Kewords
MATLAB
Kinematics
Flapping-Wing
Mechanism
Design
Files
PCR_Designer_HHYang.zip
2 more properties
Table of Contents
Password of the Zip File: hhyang95

1. Overview

1.1 Objective

•
날갯짓 메커니즘의 초기 설계를 위해 Planar Crank-Rocker (PCR)의 링크 파라미터 최적화를 Genetic Algorithm (GA)을 이용하여 수행하고 기구학적 해석(kinematic analysis)을 통해 거동을 분석하기 위함.
•
사용자가 원하는 날갯짓 진폭(flapping amplitude)과 평균 상반각(dihedral angle)을 만족 시키면서,
1.
평균 transmission angle을 최소화.
2.
Rocker output angle과 transmission angle 사이 phase 차이를 최소화.
◦
이때, 실제 하드웨어 구현을 위해 추가적인 기하학적 제약 조건을 고려해야함.

1.2 Design Parameters

•
4개의 최적화 설계 파라미터:
◦
ϕ0\phi_0: Angle between Z-axis and the fixed link (black)
◦
L1L_1: Length of the crank (blue)
◦
L2L_2: Length of the coupler (yellow)
◦
L3L_3: Length of the rocker (orange)
•
주어진 설계 파라미터:
◦
L0L_0: Length of the fixed link (black)
◦
LWingL_{Wing}: Length of the wing (green)
•
제약 조건:
◦
5개의 비선형 부등식 제약 조건
◦
2개의 비선형 등식 제약 조건
◦
5개의 선형 부등식 제약 조건

1.3 Program Structure

•
Main_PCR_Designer.m: 메인 m-file
•
MATLAB_Function: 함수 m-file 모음 폴더
◦
PCR: PCR 관련 함수 모음 폴더
▪
PCR_LoopAnalysis.m: PCR에 대한 위치 해석을 수행하고 각 링크 및 조인트의 위치를 변수에 저장
▪
PCR_NLC.m: 최적화를 위한 비선형 제약 조건 함수
▪
PCR_OptimizationUsingGA.m: GA를 이용하여 최적화가 수행되는 목적 함수
▪
PCR_VariableBoundary.m: 최적화 초기 population 생성을 위한 최적화 변수의 lower 및 upper 범위 출력
◦
Post-Process: 후처리 관련 함수 모음 폴더
▪
PCR_Simple_KinematicsAnimation.m: PCR 기반 날갯짓 메커니즘의 기구학 애니메이션 생성
◦
Utils: 기타 함수 모음 폴더
▪
PlaneVecEqn.m: 링크 메커니즘 위치 해석을 위한 기본 함수로, 닫힌 평면 루프의 벡터 방정식을 해석적으로 풀기 위한 함수
▪
PlotSetting.m: 사용자가 정의한 설정에 맞춰 MATLAB Figure와 Axes를 생성하기 위한 함수 [MATLAB: Function] PlotSetting

2. Main_PCR_Designer.m

2.1 Program Initialization

%% Program Initialization close all; clear; clc; rng('default'); format short; addpath(genpath('MATLAB_Function\'));
MATLAB
복사
•
rng('default')를 통해 항상 같은 최적화 결과가 나오도록 초기화.
•
addpath(genpath('MATLAB_Function\'))를 통해 MATLAB_Function 폴더 내의 모든 함수 m-file을 현재 실행된 MATLAB 경로에 추가.

2.2 Simulation Setting

%% Simulation Setting % Basic Parameters fileName = 'PCR_minPhase'; wingLength = 600; % [mm] f = 6.0; % [Hz] Reference flapping frequency optSwitch = 1; % Optimization Switch (0 = Off, 1 = On) % Gear-Train Parameters GT.gearModule = 0.7; % Gear module GT.gearTeethNum = 70; % # of gear teeth GT.gearPCD = GT.gearModule*GT.gearTeethNum; % [mm] Gear pitch circle diameter GT.gearRadius = 0.5*GT.gearModule*(GT.gearTeethNum + 2); % [mm] Gear outer radius GT.gearPosX = 0.5*GT.gearPCD; % [mm] X-position of gear center GT.gearPosY = 0.5*GT.gearPCD; % [mm] Y-position of gear center % Target Flapping Kinematics targetKin.flapAmp = 45; % [deg] Flapping amplitude targetKin.dihedralAng = 12.5; % [deg] Dihedral angle % Basic PCR Parameters fixedLinkLength = 64; % [mm] Fixed link length % Geometric Constraints GC.mu_min = 90 - 55; % [deg] Minimum transmission angle GC.mu_max = 90 + 55; % [deg] Maximum transmisison angle GC.jointDiameter = 11; % [mm] Diameter of link joints % Kinematic Parameters FC_num = 2.0; % # of flapping cycles flapPeriod = 1/f; % [sec] Flapping period DAT_num = 2160; % Time Parameters t_num = DAT_num*FC_num + 1; % # of time step t = linspace(0, FC_num*flapPeriod, t_num); % [sec] Simulation time % Crank Parameter crank.t = t; % [sec] crank.ang = 2*pi*f.*t; % [rad] crank.DAT_num = DAT_num;
MATLAB
복사
•
Struct 변수 GT는 Gear-Train에 관련된 파라미터가 저장되며, GT.gearRadius가 crank 길이의 upper 범위 결정에 사용됨.
•
Struct 변수 GC는 제약 조건에 관련된 파라미터가 저장되며, transmission angle의 최소/최대값(GC.mu_min, GC.mu_max)을 최적화 제약 조건 함수에서 사용함.
◦
GC.jointDiameter는 실제 하드웨어 상세 설계 시 링크 조인트의 간섭을 고려하기 위한 변수.
•
Struct 변수 crank는 crank의 시간에 따른 각도 데이터가 저장되며, PCR의 위치 해석에 활용됨.
◦
DAT_num은 날갯짓 한 주기(crank 한 바퀴)에 몇 개의 데이터 포인트를 생성할 지를 결정하는 변수.

2.3 Planar Crank-Rocker: Optimization Setting

%% Planar Crank-Rocker: Optimization Setting % Optimization Function PCR_optFunction = @(x) PCR_OptimizationUsingGA(x, wingLength, fixedLinkLength, GT, GC, crank); % Varialbe Information var_num = 4; [var_lb, var_ub] = PCR_VariableBoundary(fixedLinkLength, GT, GC); % Linear Inequality Constraints A = [0, 1, -1, 0; % L1 < L2 0, 1, 0, -1; % L1 < L3 0, 0, 1, 0; % L2 < L0 0, 0, 0, 1; % L3 < L0 0, 1, -1, -1]; % Grashof Criterion: L0 + L1 < L2 + L3 b = [0; % [mm] 0; % [mm] fixedLinkLength - 0.1; % [mm] fixedLinkLength - 0.1; % [mm] -fixedLinkLength + eps]; % [mm] % Non-Linear Constraints PCR_NLCFunction = @(x) PCR_NLC(x, wingLength, targetKin, fixedLinkLength, GT, GC, crank); % GA Options GA_populationSize = round(50*var_num); GA_optimizationOption = optimoptions('ga', ... 'CreationFcn', {'gacreationlinearfeasible'}, ... 'CrossoverFcn', {'crossoverintermediate'}, ... 'MutationFcn', {'mutationadaptfeasible'}, ... 'SelectionFcn', 'selectionstochunif', ... 'PopulationSize', GA_populationSize, ... 'InitialPopulationMatrix', [], ... 'EliteCount', ceil(0.01*GA_populationSize), ... 'CrossoverFraction', 0.65, ... 'MaxGenerations', 100, ... 'MaxStallGenerations', 25, ... 'FunctionTolerance', 1e-6, ... 'ConstraintTolerance', 1e-6, ... 'InitialPenalty', 0.1, ... 'PenaltyFactor', 2.0, ... 'Display', 'iter', ... 'PlotFcn', {@gaplotbestf, @gaplotbestindiv}, ... 'UseParallel', true);
MATLAB
복사
•
PCR_optFunction는 PCR_OptimizationUsingGA를 이용하여 주어진 PCR 최적화 변수 x에 대해 목적 함수의 출력을 반환하는 함수 변수.
•
PCR_VariableBoundary 함수를 이용하여 최적화 변수의 lower 및 upper 범위(var_lb, var_ub)를 결정.
•
A와 b는 5개의 선형 부등식을 위한 변수로 다음 기구학적 조건을 만족하기 위함.
◦
PCR을 구성하는 4개의 링크 길이 L0L_0, L1L_1, L2L_2, L3L_3 중, fixed link 길이인 L0L_0 이 가장 길고, crank 길이인 L1L_1 이 가장 짧다.
◦
앞선 길이 조건을 만족할 때, crank가 한 바퀴 회전하기 위한 Grashof 조건.
•
PCR_NLCFunction는 PCR_NLC를 이용하여 주어진 PCR 최적화 변수 x에 대해 비선형 부등식 및 등식 제약 조건의 만족 여부를 반환하는 함수 변수.
•
GA_populationSize는 전역해 탐색을 충분히 보장하기 위해 최적화 변수 개수의 50배로 결정.
•
GA Option은 모두 시행 착오에 따라 임의로 결정되었으며, MATLAB Help에 기반하여 사용자가 적절히 결정하길 권장 [MATLAB] Genetic Algorithm: ga()
◦
CreationFcn: 초기 population을 생성할 때, 앞서 정의한 선형 부등식 제약 조건 및 lower/upper 범위를 만족하는 범위에서 생성하기 위해 gacreationlinearfeasible 사용.
◦
CrossoverFcn: 제약 조건을 만족하는 초기 population으로부터 빠른 수렴성을 확보하기 위해 crossoverintermediate 사용.
◦
MutationFcn: 제약 조건을 만족하는 범위에서 돌연변이를 생성하기 위해 mutationadaptfeasible 사용.
◦
SelectionFcn: 기본 값인 selectionstochunif 사용.
◦
[ Elite / Crossover / Mutation ]의 비율을 [ 1% / 65% / 34% ]로 사용.
◦
페널티(InitialPenalty, PenaltyFactor)가 너무 크면, 초기에 비선형 제약 조건을 조금이라도 위반하는 population이 모두 사라지며, 전역해 탐색이 어려워지기 때문에 충분히 작은 값으로 결정.
◦
빠른 최적화를 위해 병렬 연산 사용 (Parallel Computing Toolbox 필요).

2.4 Planar Crank-Rocker: Optimization Using Genetic Algorithm

%% Planar Crank-Rocker: Optimization Using Genetic Algorithm % Optimization if (optSwitch == 1) % Run Optimization [optResult.x, ... optResult.modelOutput, ... optResult.exitFlag, ... optResult.output, ... optResult.population, ... optResult.scores] = ga(PCR_optFunction, var_num, A, b, [], [], ... var_lb, var_ub, PCR_NLCFunction, [], ... GA_optimizationOption); % Save Data save([fileName, '_optResult.mat'], 'optResult'); PCR_x = optResult.x; elseif (optSwitch == 0) % Load Optimization Results load([fileName, '_optResult.mat']); PCR_x = optResult.x; end
MATLAB
복사
•
optSwitch가 1인 경우, MATLAB ga 함수를 이용하여 최적화를 진행하며 앞서 정의한 fileName을 이용하여 최적화 결과(optResult)를 mat 파일로 저장.
•
optSwitch가 0인 경우, 과거에 저장되었던 최적화 결과(optResult)를 불러옴 (해당 파일이 존재해야함).

2.5 Kinematic Analysis of PCR

%% Kinematic Analysis of PCR % Optimized PCR PCR.phi0 = round(PCR_x(1), 4); PCR.L0 = fixedLinkLength; PCR.L1 = round(PCR_x(2), 4); PCR.L2 = round(PCR_x(3), 4); PCR.L3 = round(PCR_x(4), 4); PCR.L_in = wingLength; % Position Analysis of Link Loops [mechanismCheckFlag, linkLoop, PCR, joint] = PCR_LoopAnalysis(crank, PCR, GT);
MATLAB
복사
•
최적화 결과를 PCR이라는 struct 변수에 저장하고 PCR_LoopAnalysis 함수를 이용하여 위치 해석 수행.

2.6 Post-Process

%% Post-Process % Transmission Angle mu_min = linkLoop.mu_min; mu_max = linkLoop.mu_max; mu_avg_diff = mean(abs(90 - linkLoop.mu)); % Flapping Kinematics flapAmp = linkLoop.outputAmp; % [deg] flapUpAng = max(linkLoop.outputAng); % [deg] flapDownAng = min(linkLoop.outputAng); % [deg] dihedralAng = 0.5*(flapUpAng + flapDownAng); % [deg] % Kinematics Animation aniFrameRate = 30; % [FPS] axisRange = [-5, 665, -200, 450]; PCR_Simple_KinematicsAnimation(t_num, PCR, joint, aniFrameRate, axisRange, [fileName, '_Kinematics']);
MATLAB
복사
•
기구학 해석 결과 확인 및 PCR_Simple_KinematicsAnimation 함수를 이용한 애니메이션 파일 생성.