[DataContract]
public class BoeBot : DifferentialDriveEntity
{
Port<EntityContactNotification> _notifications =
new Port<EntityContactNotification>();
// Default constructor, used for creating the entity from XML
public BoeBot() { }
// Custom constructor for building model from hardcoded values.
// Used to create entity programmatically
public BoeBot(Vector3 initialPos)
{
MASS = 0.454f; //in kilograms (around 1 pound)
// the default settings approximate the BoeBot chassis
CHASSIS_DIMENSIONS = new Vector3(0.09f, //meters wide
0.09f, //meters high
0.13f); //meters long
FRONT_WHEEL_MASS = 0.01f;
CHASSIS_CLEARANCE = 0.015f;
FRONT_WHEEL_RADIUS = 0.025f;
CASTER_WHEEL_RADIUS = 0.0125f;
FRONT_WHEEL_WIDTH = 0.01f;
CASTER_WHEEL_WIDTH = 0.008f;
FRONT_AXLE_DEPTH_OFFSET = 0.01f; // distance from center of robot
base.State.Name = "BoeBot";
base.State.MassDensity.Mass = MASS;
base.State.Pose.Position = initialPos;
// chassis position
BoxShapePropertIEs motorBaseDesc =
new BoxShapePropertIEs("BoeBot Body", MASS,
new Pose(new Vector3(
0, // Use 0 for X axis offset
CHASSIS_CLEARANCE + CHASSIS_DIMENSIONS.Y / 2,
0.03f)), // minor offset in the z/depth axis
CHASSIS_DIMENSIONS);
motorBaseDesc.Material =
new MaterialPropertIEs("high friction", 0.0f, 1.0f, 20.0f);
motorBaseDesc.Name = "Chassis";
ChassisShape = new BoxShape(motorBaseDesc);
// rear wheel is also called the castor
CASTER_WHEEL_POSITION = new Vector3(0, // center of chassis
CASTER_WHEEL_RADIUS, // distance from ground
CHASSIS_DIMENSIONS.Z / 2); // at the rear of the robot
RIGHT_FRONT_WHEEL_POSITION = new Vector3(
+CHASSIS_DIMENSIONS.X / 2,// left of center
FRONT_WHEEL_RADIUS, // distance from ground of axle
FRONT_AXLE_DEPTH_OFFSET); // distance from center, on z- axis
LEFT_FRONT_WHEEL_POSITION = new Vector3(
-CHASSIS_DIMENSIONS.X / 2,// right of center
FRONT_WHEEL_RADIUS, // distance from ground of axle
FRONT_AXLE_DEPTH_OFFSET); // distance from center, on z- axis
MotorTorqueScaling = 30;
// specify a default mesh
State.Assets.Mesh = "boe-bot.bos";
}
BoeBot 類的構造函數用於為在 DifferentialDriveEntity 類中定義的多個變 量設置值。例如,將質量值設置為 0.454,代表質量以千克為單位。另外,使用 寬度、長度和高度來定義 Boe-Bot 底盤。這些測量值通過稱取機器人的實際重量 、使用公制尺進行實際測量獲得。
Boe-Bot 的位置通過一組坐標值進行定義,這組坐標值在創建實體時傳入。這 些坐標值代表 X、Y 和 Z 軸上的點。MSRS 模擬引擎使用右手坐標系,這會影響 Z 軸上的點的朝向。
BoeBot 構造函數還可定義底盤和實體中輪子的位置。 DifferentialDriveSystem 類假定您的機器人將使用兩個主輪和一個主要起平衡 作用的小後輪。功率將分配到用於控制主輪的左、右馬達。通過為每個輪子分配 不同的功率級,可以確定各輪將向前、向後、向左還是向右移動。這與驅動物理 機器人的方法相同。
模擬最具吸引力的一點就是:理論上,無論您的機器人是虛擬的還是真實的, 驅動機器人和從傳感器接收數據使用的代碼都是相同的。用於模擬項目的部分代 碼同樣可以重用於實際機器人。現在,您可能已注意到我說的是“理論上 ”。這是因為模擬技術無法完全模擬實際環境。模擬無法對干擾做出解釋, 此處的干擾是指一些出乎您意料的事情,如將障礙物的位置放錯。
模擬的作用是讓您非常真實地體驗新機器人的設計效果,或模擬多個機器人的 交互。這非常適用於資源有限而學員數量龐大的學術環境。