Skip to content

Commit 39c091f

Browse files
author
Shota Aoki
authored
STEP10 controlInterrupt関数のモータオフしきい値、タイヤ角度更新処理の修正 (#16)
* モーターオフする速度のしきい値を調整 モータOFF時にタイヤ角度の更新も止める * 変数名を修正 * MOTOR_OFF_THRESHOLDの廃止 * コメント修正
1 parent 0e8f599 commit 39c091f

File tree

1 file changed

+22
-21
lines changed

1 file changed

+22
-21
lines changed

uROS_STEP10_tfMsg/intrrupt.ino

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,35 @@
1414

1515
void controlInterrupt(void)
1616
{
17-
double speed_r, speed_l;
17+
// 直進速度と回転速度から、左右のモータ速度を求める
18+
double speed_r = g_speed + g_omega * TREAD_WIDTH / 2.0;
19+
double speed_l = g_speed - g_omega * TREAD_WIDTH / 2.0;
1820

19-
if ((g_speed < 0.001) && (g_speed > -0.001) && (g_omega < 0.001) && (g_omega > -0.001)) {
21+
// 左右両方のモータ速度がMIN_SPEED以下の場合は走行を停止する
22+
if (fabs(speed_r) < MIN_SPEED && fabs(speed_l) < MIN_SPEED) {
2023
g_motor_move = 0;
21-
} else {
22-
g_motor_move = 1;
24+
return;
2325
}
2426

25-
speed_r = g_speed + g_omega * TREAD_WIDTH / 2.0;
26-
speed_l = g_speed - g_omega * TREAD_WIDTH / 2.0;
27-
28-
if ((speed_r > 0.001) && (speed_r < MIN_SPEED)) {
29-
speed_r = MIN_SPEED;
30-
} else if ((speed_r < -0.001) && (speed_r > (-1.0 * MIN_SPEED))) {
31-
speed_r = -1.0 * MIN_SPEED;
27+
g_motor_move = 1;
28+
// モータ速度をMIN_SPEED以上に制限する
29+
if (fabs(speed_r) < MIN_SPEED) {
30+
speed_r = (speed_r > 0.0) ? MIN_SPEED : -1.0 * MIN_SPEED;
3231
}
33-
if ((speed_l > 0.001) && (speed_l < MIN_SPEED)) {
34-
speed_l = MIN_SPEED;
35-
} else if ((speed_l < -0.001) && (speed_l > (-1.0 * MIN_SPEED))) {
36-
speed_l = -1.0 * MIN_SPEED;
32+
if (fabs(speed_l) < MIN_SPEED) {
33+
speed_l = (speed_l > 0.0) ? MIN_SPEED : -1.0 * MIN_SPEED;
3734
}
38-
g_speed = (speed_r + speed_l) / 2.0;
3935

40-
g_odom_x += g_speed * 0.001 * cos(g_odom_theta) * 0.001;
41-
g_odom_y += g_speed * 0.001 * sin(g_odom_theta) * 0.001;
42-
g_odom_theta += g_omega * 0.001;
43-
g_position_r += speed_r * 0.001 / (48 * PI) * 2 * PI;
44-
g_position_l -= speed_l * 0.001 / (48 * PI) * 2 * PI;
36+
// 制限されたモータ速度から、直進速度と回転速度を求める
37+
const double forward_speed = (speed_r + speed_l) / 2.0;
38+
const double omega = (speed_r - speed_l) / TREAD_WIDTH;
39+
40+
const double UPDATE_INTERVAL = 0.001;
41+
g_odom_x += forward_speed * UPDATE_INTERVAL * cos(g_odom_theta) * UPDATE_INTERVAL;
42+
g_odom_y += forward_speed * UPDATE_INTERVAL * sin(g_odom_theta) * UPDATE_INTERVAL;
43+
g_odom_theta += omega * UPDATE_INTERVAL;
44+
g_position_r += speed_r * UPDATE_INTERVAL / (TIRE_DIAMETER * PI) * 2 * PI;
45+
g_position_l -= speed_l * UPDATE_INTERVAL / (TIRE_DIAMETER * PI) * 2 * PI;
4546

4647
if (speed_r > 0) {
4748
digitalWrite(CW_R, LOW);

0 commit comments

Comments
 (0)