Dependencies: SimpleMapSerialization serial_communication
communication.cpp
- Committer:
- inst
- Date:
- 2016-04-09
- Revision:
- 8:52ccf5b84a05
- Parent:
- 7:6c4b22a43eb3
File content as of revision 8:52ccf5b84a05:
#include "communication.hpp" #include "moving_object.hpp" #include "serial_communication.hpp" #include "mbed_stl.hpp" #include "mbed.h" communication* communication::instance_ = NULL; const int communication::velocity_offset_ = 32767; //const float communication::analog_stick_lower_limit_ = 0.2f; //const size_t communication::velocity_div_num_ = 8; communication::communication() {} node_system::moving_object::CONTROL_MODE communication::get_mode() const { return node_system::moving_object::MANUAL_MODE; } communication::vector2f communication::get_velocity() const { uint32_t iv[] = { serial_communication::instance()->get("stkLX"), serial_communication::instance()->get("stkLY") }; if ((iv[0] == velocity_offset_) && (iv[1] == velocity_offset_)) { return vector2f(); } vector2f v; // 受信データは [0, 65535] の範囲であるので [-1, 1] に変換する for (uint32_t i = 0; i < 2; ++i) { v[i] = iv[i]; v[i] -= velocity_offset_; v[i] /= velocity_offset_; } if (v.length() > 1.0f) { //v = v.unit(); return v.unit(); } return v; /* float p = 2.0f * PI;// / 8.0f;// / velocity_div_num_; float rad = atan2(v.y(), v.x()); rad += p * 0.5f; rad /= p; rad *= p; */ //float l = sqrt(v.x() * v.x() + v.y() * v.y()); //float l = v.length(); //return vector2f(cos(rad), sin(rad)); //return vector2f(0.3f * cos(rad), 0.3f * sin(rad)); //return vector2f(l * cos(rad), l * sin(rad)); /* if (v.length() < analog_stick_lower_limit_) { return vector2f(); // しきい値以下なら移動操作無しとみなす } */ //return v; /* vector2f velocity = v.unit(); return velocity; */ } float communication::get_angular_velocity_rad_per_sec() const { return 0.0f; } communication::vector2f communication::get_target_position_mm() const { return vector2f(); } float communication::get_target_heading_rad() const { return 0.0f; }