Main Content

モバイルロボットさまざまな运动学シミュレーションシミュレーション

この例,の环境でなロボットモデルをモデル化して比较比较する方法方法ししし

运动学的をもつモバイル定义定义

モバイル ロボットの運動学をモデル化する方法は多数あります。そのすべてで車輪速度とロボットの状態[x y theta]とのがされます。ははxy座標と、ロボット進行方向Theta(ラジアン単位)です。

一輪車の運動学モデル

ロボット车运动を表す最も最もな方法は,中央轴周り周りのの回転回転回転回転によって,,,,,,,,,,,,,,轴周りにににピボットピボットできる轮车轮车をををををををは入力の速度と回头角として指定,他の拘束拘束をを考虑考虑考虑ししない场合场合は,いずれいずれもも一一轮轮车

unicycle = unicycleKinematics(“车辆印花”,,,,“车辆peedheadingrate”);

差動駆動型の運動学モデル

差动モデル后駆动车轴使用して车両速度と角速度速度のの両方両方両方をを制御しします。。駆动车駆动车轴轴に接続接続したた车轮车轮车轮は両両両両の车轮何らのインターフェイスをもつこのも入力入力车両车両速度とと回头角速度をを使用ししし,,

diffDrive = differentialDriveKinematics(“车辆印花”,,,,“车辆peedheadingrate”);

一轮车动作とする,差动运动学モデル车轮速度の拘束拘束を追加追加。。。

diffDrive.WheelSpeedRange = [-10 10]*2*pi;

自転车の学モデル

ととととととととと轴に旋回するののののののの本本本本本のの车轴车轴をもつ自动自动车型车型モデルモデルモデルとしてとしてとして扱い扱いますます。自転自転自転车车车车车,,,车轴车轴た単一モデル化,前轮角を车のようにに直接设定できるとという仮定にに基づい基づい基づい。

自行车=自行车运动(“车辆印花”,,,,“车辆peedheadingrate”,,,,“ MaxSteeringAngle”,pi/8);

その他のモデル

アッカーマン運動学モデルは,アッカーマンステアリングを前提とする修正自動車型モデルです。ほとんどの自動車型車両では、複数の前輪が同じ軸の周りに旋回するのではなく、車両の旋回中心と同心円上を走行するように、少し異なる複数の軸の周りを旋回します。この旋回角度の差はアッカーマン ステアリングと呼ばれ、通常は実際の車両の機構によって実現されます。車両と車輪の運動学という観点からは、ステアリング角度を速度入力として扱うことによってこれを実現できます。

carlike = ackermannkinkinematics;

シミュレーション パラメーターの設定

これらのモバイル ロボットは、さまざまな運動学によって発生する何らかの差異を示すように設計された、一連のウェイポイントを追従します。

Waypoints = [0 0;0 10;10 10;5 10;11 9;4 -5];% Define the total time and the sample rateSampleTime = 0.05;样本时间%[S]tVec = 0:sampleTime:20;%时间阵列initpose= [waypoints(1,:)'; 0];初始姿势%(X y Theta)

车両コントローラーの作成

車両は Pure Pursuit コントローラーを使用して一連のウェイポイントを追従します。一連のウェイポイント、ロボットの現在の状態、その他のいくつかのパラメーターを指定されたコントローラーは、車両速度と回頭角速度を出力します。

%定义控制器。每个机器人都需要自己的控制器Controller1 = ControllerPurepursuit(“航点”,,,,waypoints,“ Desiredlinearvelocity”,,,,3,“ maxAngularDelocity”,3*pi);Controller2 = ControllerPurepursuit(“航点”,,,,waypoints,“ Desiredlinearvelocity”,,,,3,“ maxAngularDelocity”,3*pi);Controller3 = ControllerPurepursuit(“航点”,,,,waypoints,“ Desiredlinearvelocity”,,,,3,“ maxAngularDelocity”,3*pi);

ODE ソルバーを使用したモデルのシミュレーション

状態を更新する関数衍生物を使用モデルシミュレートします。この常微常微(ode)ソルバーソルバーソルバーソルバーを使用て解をを生成生成生成しします差动駆动ロボットのパス追従で説明されているようにループを使用して状態を更新します。

odeソルバーソルバーすべて出力をををつのつのとして指定指定するする必要ためため,,线形线形速度速度速度速度速度とととと回头回头回头回头回头回头回头速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度速度つのつのつのつのつのつのつのつのつのつのつのつのつのの补助关数exampleHelperMobileRobotControllerを使用。,の补助,ゴール指定の半径内ににあるロボットはは确実停止停止停止

goalPoints = waypoints(end,:)'; goalRadius = 1;

モデルのタイプにode45が 1 回呼び出されます。導関数は、initpose设定さ初期を使用しし出力を计算。各各导导关数关数はは,対応するする运动学学モデルオブジェクト,现在のののの

在运动控制下每个运动学模型的计算轨迹%[tunicycle,unicyclepose] = ode45(@(t,y)衍生物(unicycle,y,examplehelpermobilerobotcontroller(controller1,y,y,gogents,goartiuss,goartradius)),tvec,initpose);[tbicycle,bicyclepose] = ode45(@(t,y)衍生物(自行车,y,examplehelpermobilerobotcontroller(controller2,y,y,gogents,goartradius,goartradius)),tvec,initpose);[tdiffdrive,diffrivepose] = ode45(@(t,y)衍生物(diffrive,y,examplehelpermobilerobotcontroller(controller3,y,y,goatspoints,goartradius,goartradius)),tvec,initpose);

結果のプロット

odeソルバーの,すべて轨迹のを一度に可视するするplotTransformsを使用て,,つプロット上简単に表示でき。。

まず、姿勢の出力を、平行移動と四元数のインデックス付き行列に変換しなければなりません。

unicycletranslations = [unicyclepose(:,1:2)零(长度(unicyclepose),1)];unicyclerot = axang2quat([repmat([0 0 1],长度(unicyclepose),1)unicyclepose(::,3)]);bicycletranslations = [bicyclepose(:,1:2)零(长度(bicyclepose),1)];bicyclerot = axang2quat([repmat([0 0 1],长度(bicyclepose),1)bicyclepose(::,3)]);diffrivetranslations = [diffrivepose(:,1:2)零(长度(diffrivepose),1)];diffriverot = axang2quat([[repmat([0 0 1],长度(diffrivepose),1)diffrivepose(::,3)]);

その后変换のセットプロットしてからからできでき。一一一轮轮车车车,,,自転车,差动差动駆动駆动駆动型型型ロボットロボットののパスパスははは,,,,それぞれそれぞれそれぞれそれぞれそれぞれそれぞれ赤,青,,,绿绿绿つの出力を表示し。。

图图(Waypoints(:,1),Waypoints(:,2),,“ KX-”,,,,“标记”,,,,20); holdallplotTransForms(unicycletranslations(1:10:end,:),unicyclerot(1:10:end,:),:),::),'MeshFilePath',,,,'groundvehicle.stl',,,,“ Meshcolor”,,,,"r");plotTransForms(bicycletranslations(1:10:end,:),bicyclerot(1:10:end,:),:),::),'MeshFilePath',,,,'groundvehicle.stl',,,,“ Meshcolor”,,,,"b");plotTransForms(diffrivetranslations(1:10:end,:),diffdriverot(1:10:end,:),:),:)'MeshFilePath',,,,'groundvehicle.stl',,,,“ Meshcolor”,,,,“G”);查看(0,90)

图包含一个轴对象。轴对象包含493个类型补丁的对象。