Search

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_optFunctionPCR_OptimizationUsingGA를 이용하여 주어진 PCR 최적화 변수 x에 대해 목적 함수의 출력을 반환하는 함수 변수.
PCR_VariableBoundary 함수를 이용하여 최적화 변수의 lower 및 upper 범위(var_lb, var_ub)를 결정.
Ab는 5개의 선형 부등식을 위한 변수로 다음 기구학적 조건을 만족하기 위함.
PCR을 구성하는 4개의 링크 길이 L0L_0, L1L_1, L2L_2, L3L_3 중, fixed link 길이인 L0L_0 이 가장 길고, crank 길이인 L1L_1 이 가장 짧다.
앞선 길이 조건을 만족할 때, crank가 한 바퀴 회전하기 위한 Grashof 조건.
PCR_NLCFunctionPCR_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
복사
optSwitch1인 경우, MATLAB ga 함수를 이용하여 최적화를 진행하며 앞서 정의한 fileName을 이용하여 최적화 결과(optResult)를 mat 파일로 저장.
optSwitch0인 경우, 과거에 저장되었던 최적화 결과(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 함수를 이용한 애니메이션 파일 생성.