程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Robotics:使用Microsoft Robotics Studio模擬真實的世界(7)

Robotics:使用Microsoft Robotics Studio模擬真實的世界(7)

編輯:關於C語言

[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 類假定您的機器人將使用兩個主輪和一個主要起平衡 作用的小後輪。功率將分配到用於控制主輪的左、右馬達。通過為每個輪子分配 不同的功率級,可以確定各輪將向前、向後、向左還是向右移動。這與驅動物理 機器人的方法相同。

模擬最具吸引力的一點就是:理論上,無論您的機器人是虛擬的還是真實的, 驅動機器人和從傳感器接收數據使用的代碼都是相同的。用於模擬項目的部分代 碼同樣可以重用於實際機器人。現在,您可能已注意到我說的是“理論上 ”。這是因為模擬技術無法完全模擬實際環境。模擬無法對干擾做出解釋, 此處的干擾是指一些出乎您意料的事情,如將障礙物的位置放錯。

模擬的作用是讓您非常真實地體驗新機器人的設計效果,或模擬多個機器人的 交互。這非常適用於資源有限而學員數量龐大的學術環境。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved