趣味で作ってるロボット用ソフトウェア
 All Classes Files Functions Enumerations Enumerator Friends Pages
dock.cpp

充電の開始を指示充電できる基地の近くで実行することを想定しており, 一定時間が経過しても充電できなかったら動作を終了する。

#include <cstdlib>
#include <iostream>
#include "Roomba_driver.h"
#include "robot_utils.h"
#include "point_utils.h"
#include "delay.h"
#include "ticks.h"
#include "log_printf.h"
#include <cstdio>
using namespace hrk;
using namespace std;
int main(int argc, char *argv[])
{
static_cast<void>(argc);
static_cast<void>(argv);
if (!robot.open("/dev/ttyUSB0")) {
cerr << FILE_POSITION() << robot.what() << endl;
return 1;
}
// 充電を指示
robot.dock();
// 充電状態を確認する
const double Timeout_second = 10.0;
long first_ticks = ticks_sec();
long spent_time;
PositionF previous_position = robot.position();
do {
long current_ticks = ticks_sec();
spent_time = current_ticks - first_ticks;
// 移動しなくなったら、基地への移動が完了したとみなして電源を切る
// 最初に移動し始めるまでの数秒間は、この判定を行わないようにする
PositionF current_position = robot.position();
if ((spent_time > 4.0) &&
(distance_to(PointF(current_position.x(), current_position.y()),
PointF(previous_position.x(),
previous_position.y())) <= 0)) {
robot.power_down();
}
previous_position = current_position;
// 充電を開始したら、処理を抜ける
if (robot.is_charging()) {
cout << "dock success!" << endl;
return 0;
}
delay_sec(0.1);
} while (spent_time < Timeout_second);
cout << "dock fail." << endl;
return 1;
}