Skip to content

Commit

Permalink
Merge pull request #187 from rogy-AquaLab/service
Browse files Browse the repository at this point in the history
`service`
  • Loading branch information
H1rono authored May 18, 2024
2 parents 6ab5b5d + eb13e8b commit e3085b5
Show file tree
Hide file tree
Showing 4 changed files with 307 additions and 248 deletions.
73 changes: 15 additions & 58 deletions include/schneider_model.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

#include "mbed.h"

#include "MPU6050.h"
#include "device/input.hpp"
#include "device/output.hpp"
#include "packet/input.hpp"
#include "packet/output.hpp"
#include "service/service.hpp"

namespace omniboat {

Expand All @@ -32,69 +32,26 @@ class Schneider {
void one_step();
void init();

/**
* @brief 機体を停止させる関数
*/
void flip_shneider();
// TODO:
// これ実装されてないのでコメントアウト
// commit `f50fb9b` 参照
// /**
// * @brief 機体を停止させる関数
// */
// void flip_shneider();

private:
/**
* @brief ボタンが押されたときに機体を停止させる関数(割り込み処理)
*/
void ticker_flip();

/**
* @brief 入力値
*/
std::array<float, 4> inputs;

/**
* @brief inputsに対しての出力
*/
std::array<float, 3> outputs;

/**
* @brief ヤコビ行列の計算を行う関数\nヤコビ行列は、入力からモータの出力を計算するための行列
*/
std::array<std::array<float, 3>, 4> cal_tjacob() const;

/**
* @brief 最後にアクチュエーターに反映させた値
*/
packet::OutputValues last_output;

/**
* @brief 状態方程式の計算を行う関数
*/
void state_equation();

/**
* @brief
* モータへの出力を計算する関数\nモータへの出力は、勾配を使って目的関数を最小化するように計算する
*/
auto cal_q(const std::array<float, 3>& joy) -> void;

/**
* @brief モータへの信号値に変換する関数
*/
auto set_q(const std::array<float, 3>& gyro) -> packet::OutputValues;

/**
* @brief つまみの値をから機体を回転させる関数
*/
auto rotate(const float& volume_value) const -> packet::OutputValues;

/**
* @brief FETへの出力(=DCモーター)を止める関数
* @return packet::OutputValues write_outputに渡す値
*/
auto stop_fet() const -> packet::OutputValues;

auto write_output(const packet::OutputValues& output) -> void;
// flip_shneider と同様
// /**
// * @brief ボタンが押されたときに機体を停止させる関数(割り込み処理)
// */
// void ticker_flip();

device::InputModules input_modules;
device::OutputModules output_modules;
service::Service service;
};

} // namespace omniboat

#endif
79 changes: 79 additions & 0 deletions include/service/service.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#ifndef OMNIBOAT_ROBOKIT_SERVICE_HPP
#define OMNIBOAT_ROBOKIT_SERVICE_HPP

#include "packet/input.hpp"
#include "packet/output.hpp"

namespace service {

class Service {
public:
Service() = default;
~Service() = default;
Service(const Service&) = default;
auto operator=(const Service&) -> Service& = default;
Service(Service&&) = default;
auto operator=(Service&&) -> Service& = default;

void init();

auto call(const packet::InputValues& input_values) -> packet::OutputValues;

// NOTE
// 使われてないのでコメントアウト
// 元の実装は f50fb9b の src/schneider_model.cpp:88 を参照
// /**
// * @brief 機体を停止させる関数
// */
// auto flip_shneider() -> void;

// TODO: auto debug() -> void;

private:
/// 入力値
std::array<float, 4> inputs = {0, 0, 0};

/// inputsに対しての出力
std::array<float, 3> outputs = {0, 0, 0};

/// 実際に出力された最後の値 outputsとは違う
packet::OutputValues last_output{};

/**
* @brief ヤコビ行列の計算を行う関数
* ヤコビ行列は、入力からモータの出力を計算するための行列
* @return std::array<std::array<float, 3>, 4> 計算したヤコビ行列
*/
auto cal_tjacob() const -> std::array<std::array<float, 3>, 4>;

/// 状態方程式の計算を行う関数
auto state_equation() -> void;

/// モータへの出力を計算する関数
/// モータへの出力は、勾配を使って目的関数を最小化するように計算する
auto cal_q(const std::array<float, 3>& joy) -> void;

/**
* @brief 機体を旋回(=平行移動+回転) させるように出力する関数
* @param gyro MPUの入力 `packet::IntputValues::gyro`
* @return packet::OutputValues アクチュエーターに出力する値 ここで`last_output`は更新しない
*/
auto set_q(const std::array<float, 3>& gyro) -> packet::OutputValues;

/**
* @brief ツマミの値から機体を回転させるように出力する関数
* @param volume ツマミの値
* @return packet::OutputValues アクチュエーターに出力する値 ここで`last_output`は更新しない
*/
auto rotate(const float& volume) const -> packet::OutputValues;

/**
* @brief DCモーター(につながっているFET)を止めるように出力する関数
* @return packet::OutputValues アクチュエーターに出力する値 ここで`last_output`は更新しない
*/
auto stop_dc_motor() const -> packet::OutputValues;
};

} // namespace service

#endif // OMNIBOAT_ROBOKIT_SERVICE_HPP
Loading

0 comments on commit e3085b5

Please sign in to comment.