Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1e426d7
update: 公式のAPIラッパークラスを参照するように変更
nishijima515 May 23, 2025
a64683e
update: パスを追加
nishijima515 May 23, 2025
8bba3f2
delete: 不要ファイルの削除
nishijima515 May 23, 2025
6fd84bf
add: 新しいモックデータの追加
nishijima515 May 23, 2025
68ea327
update: mileageクラスを追加したメインの取り込み
nishijima515 May 23, 2025
559bd91
update: ロボットクラス追加後のメインの取り込み
nishijima515 May 27, 2025
8eae213
refactor: 細かな修正
nishijima515 May 27, 2025
2f32911
refactor: 細かな修正
nishijima515 May 27, 2025
5f82ed6
update: 名前空間をcppのほうに記述
nishijima515 May 29, 2025
b1568b5
Merge branch 'work-KL25-27' into ticket-KL25-27
nishijima515 May 29, 2025
7f04876
update: speed値をmm/sで受け取れるように変更
nishijima515 May 29, 2025
d5b68a8
refactor: 細かい修正
nishijima515 May 31, 2025
c10df1a
add: 円周率の定義とRAD_TO_DEGを追加
nishijima515 Jun 1, 2025
a34553b
refactor: 細かい修正
nishijima515 Jun 1, 2025
a3364c5
update: 細かい処理の変更とコメントの修正
nishijima515 Jun 1, 2025
653b3ce
refactor: 細かい修正
nishijima515 Jun 1, 2025
7da9972
refactor: 細かい修正
nishijima515 Jun 1, 2025
e94426c
update: RADIUSをWHEEL_RADIUSに変更
nishijima515 Jun 1, 2025
38bcd70
refactor: コメントの修正
nishijima515 Jun 1, 2025
9a42ec2
refactor: フォーマットエラー解消のための空行追加
nishijima515 Jun 1, 2025
65d9141
refactor: フォーマットエラー解消のための空行
nishijima515 Jun 1, 2025
31b4188
refactor: フォーマットエラー解消のための空行
nishijima515 Jun 1, 2025
d047303
refactor: コメントの修正
nishijima515 Jun 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
137 changes: 0 additions & 137 deletions modules/API/Motor.h

This file was deleted.

35 changes: 20 additions & 15 deletions modules/API/MotorController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
* @author nishijima515
*/
#include "MotorController.h"
using namespace spikeapi;

MotorController::MotorController()
: rightWheel(Port::PORT_A),
leftWheel(Port::PORT_B, Motor::EDirection::COUNTERCLOCKWISE),
armMotor(Port::PORT_C, Motor::EDirection::COUNTERCLOCKWISE)
: rightWheel(EPort::PORT_A),
leftWheel(EPort::PORT_B, Motor::EDirection::COUNTERCLOCKWISE),
armMotor(EPort::PORT_C, Motor::EDirection::COUNTERCLOCKWISE)
{
}

Expand Down Expand Up @@ -54,16 +55,18 @@ void MotorController::resetWheelsMotorPower()
leftWheel.setPower(0);
}

// 右タイヤのモータに回転速度をセット
void MotorController::setRightMotorSpeed(int speed)
// 右タイヤのモータに,線速度を回転速度に変換しセットする
void MotorController::setRightMotorSpeed(double speed)
{
rightWheel.setSpeed(speed);
int rightAngleSpeed = static_cast<int>(speed / WHEEL_RADIUS * (RAD_TO_DEG));
rightWheel.setSpeed(rightAngleSpeed);
}

// 左タイヤのモータに回転速度をセット
void MotorController::setLeftMotorSpeed(int speed)
// 左タイヤのモータに,線速度を回転速度に変換しセットする
void MotorController::setLeftMotorSpeed(double speed)
{
leftWheel.setSpeed(speed);
int leftAngleSpeed = static_cast<int>(speed / WHEEL_RADIUS * (RAD_TO_DEG));
leftWheel.setSpeed(leftAngleSpeed);
}

// 両タイヤのモータを停止する
Expand Down Expand Up @@ -140,14 +143,16 @@ int32_t MotorController::getArmMotorCount()
return armMotor.getCount();
}

// 右タイヤモータの回転速度を取得する
int32_t MotorController::getRightMotorSpeed()
// 右タイヤモータの線速度を取得する
double MotorController::getRightMotorSpeed()
{
return rightWheel.getSpeed();
double rightSpeed = rightWheel.getSpeed() * (DEG_TO_RAD)*WHEEL_RADIUS;
return rightSpeed;
}

// 左タイヤモータの回転速度を取得する
int32_t MotorController::getLeftMotorSpeed()
// 左タイヤモータの線速度を取得する
double MotorController::getLeftMotorSpeed()
{
return leftWheel.getSpeed();
double leftSpeed = leftWheel.getSpeed() * (DEG_TO_RAD)*WHEEL_RADIUS;
return leftSpeed;
}
33 changes: 18 additions & 15 deletions modules/API/MotorController.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
#ifndef MOTOR_MOTORCONTROLLER_H
#define MOTOR_MOTORCONTROLLER_H

#define WHEEL_RADIUS RADIUS // 車輪の半径[mm]

#include "Motor.h"
#include "SystemInfo.h" // RADIUS, PI, RAD_TO_DEGの定義を含む

class MotorController {
public:
Expand Down Expand Up @@ -49,16 +52,16 @@ class MotorController {
void resetWheelsMotorPower();

/**
* @brief 右タイヤのモータに回転速度をセット
* @param speed 回転速度(°/秒)
* @brief 右タイヤのモータに, 線速度から算出した回転速度をセット
* @param speed 線速度(mm/秒)
*/
void setRightMotorSpeed(int speed);
void setRightMotorSpeed(double speed);

/**
* @brief 左タイヤのモータに回転速度をセット
* @param speed 回転速度(°/秒)
* @brief 左タイヤのモータに, 線速度から算出した回転速度をセット
* @param speed 線速度(mm/秒)
*/
void setLeftMotorSpeed(int speed);
void setLeftMotorSpeed(double speed);

/**
* @brief 両タイヤのモータを停止する
Expand Down Expand Up @@ -129,21 +132,21 @@ class MotorController {
int getArmMotorPower();

/**
* @brief 右タイヤの回転速度を取得する
* @return 右タイヤの回転速度(°/秒)
* @brief 右タイヤの線速度を取得する
* @return 右タイヤの線速度(mm/秒)
*/
int32_t getRightMotorSpeed();
double getRightMotorSpeed();

/**
* @brief 左タイヤの回転速度を取得する
* @return 左タイヤの回転速度(°/秒)
* @brief 左タイヤの線速度を取得する
* @return 左タイヤの線速度(mm/秒)
*/
int32_t getLeftMotorSpeed();
double getLeftMotorSpeed();

private:
Motor rightWheel; // 右タイヤモータのインスタンス
Motor leftWheel; // 左タイヤモータのインスタンス
Motor armMotor; // アームモータのインスタンス
spikeapi::Motor rightWheel; // 右タイヤモータのインスタンス
spikeapi::Motor leftWheel; // 左タイヤモータのインスタンス
spikeapi::Motor armMotor; // アームモータのインスタンス

/**
* @brief モータに設定するpower値の制限
Expand Down
26 changes: 0 additions & 26 deletions modules/API/Port.h

This file was deleted.

4 changes: 4 additions & 0 deletions modules/common/SystemInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
#ifndef SYSTEM_INFO_H
#define SYSTEM_INFO_H

#define PI 3.1415926 // 円周率
#define RAD_TO_DEG 180.0 / PI // ラジアンを度数に変換するための係数
#define DEG_TO_RAD PI / 180.0 // 度数をラジアンに変換するための係数

static constexpr double RADIUS = 28.0; // 車輪の半径[mm]
static constexpr double TREAD = 112.0; // 走行体のトレッド幅(両輪の間の距離)[mm]

Expand Down
41 changes: 25 additions & 16 deletions tests/MotorControllerTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include "MotorController.h"
#include <gtest/gtest.h>

using namespace spikeapi;

namespace etrobocon2025_test {

// 右車輪のモータにpower値をセットできるかのテスト
Expand Down Expand Up @@ -219,39 +221,46 @@ namespace etrobocon2025_test {
TEST(MotorControllerTest, GetRightMotorSpeed)
{
MotorController MotorController;
int expected = 0;
int actual = MotorController.getRightMotorSpeed();
double expected = 0.0;
double actual = MotorController.getRightMotorSpeed();
EXPECT_EQ(expected, actual);
int speed = 1000;
double speed = 1000.0;
MotorController.setRightMotorSpeed(speed);
expected = 1000;
double expectedLower = speed - 1; // getやsetの計算過程でintに丸められた際の許容誤差
actual = MotorController.getRightMotorSpeed();
EXPECT_EQ(expected, actual);
speed = -1000;
//  誤差が1以内であれば取得できているとする
EXPECT_LE(expectedLower, actual);
EXPECT_GE(speed, actual);
speed = -1000.0;
MotorController.setRightMotorSpeed(speed);
expected = -1000;
double expectedUpper = speed + 1; // getやsetの計算過程でintに丸められた際の許容誤差
actual = MotorController.getRightMotorSpeed();
EXPECT_EQ(expected, actual);
//  誤差が1以内であれば取得できているとする
EXPECT_GE(actual, speed);
EXPECT_LE(actual, expectedUpper);
MotorController.resetRightMotorPower();
}

// 左車輪のモータの回転速度を取得できるかのテスト
TEST(MotorControllerTest, GetLeftMotorSpeed)
{
MotorController MotorController;
int expected = 0;
int actual = MotorController.getLeftMotorSpeed();
double expected = 0.0;
double actual = MotorController.getLeftMotorSpeed();
EXPECT_EQ(expected, actual);
int speed = 1000;
double speed = 1000.0;
MotorController.setLeftMotorSpeed(speed);
expected = 1000;
double expectedLower = speed - 1; // getやsetの計算過程でintに丸められた際の許容誤差
actual = MotorController.getLeftMotorSpeed();
EXPECT_EQ(expected, actual);
speed = -1000;
//  誤差が1以内であれば取得できているとする
EXPECT_LE(expectedLower, actual);
EXPECT_GE(speed, actual);
speed = -1000.0;
MotorController.setLeftMotorSpeed(speed);
expected = -1000;
double expectedUpper = speed + 1; // getやsetの計算過程でintに丸められた際の許容誤差
actual = MotorController.getLeftMotorSpeed();
EXPECT_EQ(expected, actual);
EXPECT_GE(actual, speed);
EXPECT_LE(actual, expectedUpper);
MotorController.resetLeftMotorPower();
}
} // namespace etrobocon2025_test
Loading