/// <summary> /// グリップの半径[m]を取得する. /// </summary> /// <returns> /// グリップの半径[m] /// </returns> public float GetGripRadius() { float gripRadius; Spidar.GetGripRadius(this.SerialNumber, out gripRadius); return(gripRadius); }
/// <summary> /// SPIDARの初期化を明示的に実行する. /// 初期化に成功した場合はtrueを返す. /// </summary> /// <returns> /// true: 成功 /// false: 失敗 /// </returns> public bool Initialize() { if (spidar != null) { spidar.Stop(); spidar.Dispose(); spidar = null; } spidar = Spidar.Create(SerialNumber, (int)DeviceType); if (spidar != null) { spidar.Start(); for (int i = 0; i < 8; ++i) { gpioDownState[i] = true; gpioUpState[i] = true; } updateSkipCount = 100; meshRenderer.enabled = true; return(true); } else { meshRenderer.enabled = false; return(false); } }
/// <summary> /// 提示力を設定する. /// </summary> /// <param name="force"> /// 出力する併進力[N](目標値) /// </param> /// <param name="torque"> /// 出力する回転力[Nm](目標値) /// </param> /// <param name="forceK"> /// バネ定数 K /// </param> /// <param name="forceB"> /// ダンパ係数 B /// </param> /// <param name="torqueK"> /// バネ定数 K /// </param> /// <param name="torqueB"> /// ダンパ係数 B /// </param> /// <param name="lerp"> /// 提示力の線形補間のON/OFF /// </param> /// <param name="cascade"> /// カスケード制御のON/OFF /// </param> public void SetForce(Vector3 force, float forceK, float forceB, Vector3 torque, float torqueK, float torqueB, bool lerp, bool cascade) { Spidar.SetForce(this.SerialNumber, ref force, forceK, forceB, ref torque, torqueK, torqueB, lerp, cascade); }
/// <summary> /// デバイスの更新周期[s]を取得する(実測値). /// </summary> /// <returns> /// デバイスの更新周期[s] /// </returns> public float GetDeltaTime() { float deltaTime; Spidar.GetDeltaTime(this.SerialNumber, out deltaTime); return(deltaTime); }
/// <summary> /// GPIOの値を取得する. /// </summary> /// <returns> /// GPIOの値 /// </returns> public uint GetGpioValue() { uint value; if (!Spidar.GetGpioValue(this.SerialNumber, out value)) { return(0); } return(value); }
/// <summary> /// エンコーダ値を取得する. /// </summary> /// <param name="count"> /// エンコーダ値 /// </param> public void GetEncoderCount(ref int[] count) { Spidar.GetEncoderCount(this.SerialNumber, this.count); int max = count.Length > 8 ? 8 : count.Length; for (int i = 0; i < max; ++i) { count[i] = this.count[i]; } }
/// <summary> /// デバイスを初期化し,Spidarクラスのインスタンスを作成する. /// デバイスの初期化に失敗した場合はnullを返す. /// </summary> /// <param name="fileName"> /// SPIDAR設定ファイルの名前 /// </param> /// <returns> /// Spidarクラスのインスタンス /// </returns> public static Spidar Create(uint serialNumber, int type) { if (Spidar.Initialize(serialNumber, type)) { return(new Spidar(serialNumber)); } else { return(null); } }
/// <summary> /// ログの取得を開始する. /// </summary> public void StartLog() { Spidar.StartLog(this.SerialNumber); }
/// <summary> /// デバイスの動作を停止する. /// </summary> public void Stop() { Spidar.Stop(this.SerialNumber); }
/// <summary> /// 力提示をやめ最小張力とする. /// </summary> /// <param name="lerp"> /// 提示力補間のON/OFF /// </param> public void ClearForce(bool lerp = false) { Vector3 zero = Vector3.zero; Spidar.SetForce(this.SerialNumber, ref zero, 0, 0, ref zero, 0, 0, lerp, false); }
/// <summary> /// グリップの姿勢を取得する. /// </summary> /// <param name="position"> /// グリップの位置[m] /// </param> /// <param name="rotation"> /// グリップの回転(四元数) /// </param> /// <param name="velocity"> /// グリップの速度[m/s] /// </param> /// <param name="angularVelocity"> /// グリップの角速度[rad/s] /// </param> public void GetPose(out Vector3 position, out Quaternion rotation, out Vector3 velocity, out Vector3 angularVelocity) { Spidar.GetPose(this.SerialNumber, out position, out rotation, out velocity, out angularVelocity); }
/// <summary> /// カスケード制御用バネ定数のゲインを設定する. /// </summary> /// <param name="gain"> /// ゲイン /// </param> public void SetCascadeGain(float gain) { Spidar.SetCascadeGain(this.SerialNumber, gain); }
/// <summary> /// 力覚提示のON/OFFを設定する. /// </summary> /// <param name="enable"> /// true: ON, false: OFF /// </param> public void SetHaptics(bool enable) { Spidar.SetHaptics(this.SerialNumber, enable); }
/// <summary> /// デバイスのグリップ姿勢のキャリブレーションを行う. /// </summary> public void Calibrate() { Spidar.Calibrate(this.SerialNumber); }
/// <summary> /// デバイスの終了処理. /// </summary> public void Dispose() { Spidar.Terminate(this.SerialNumber); GC.SuppressFinalize(this); }