Dependencies:   SimpleMapSerialization serial_communication

Committer:
inst
Date:
Sun Apr 03 06:30:39 2016 +0000
Revision:
2:074942a78af1
Parent:
0:8b0edcbd3b87
Child:
4:24d383b68566

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
inst 0:8b0edcbd3b87 1 #include "communication.hpp"
inst 0:8b0edcbd3b87 2 #include "moving_object.hpp"
inst 0:8b0edcbd3b87 3 #include "serial_communication.hpp"
inst 0:8b0edcbd3b87 4
inst 0:8b0edcbd3b87 5 #include "mbed_stl.hpp"
inst 0:8b0edcbd3b87 6 #include "mbed.h"
inst 0:8b0edcbd3b87 7
inst 0:8b0edcbd3b87 8 communication* communication::instance_ = NULL;
inst 2:074942a78af1 9 const int communication::velocity_offset_ = 32767;
inst 2:074942a78af1 10
inst 2:074942a78af1 11 communication::communication() {}
inst 0:8b0edcbd3b87 12
inst 0:8b0edcbd3b87 13 node_system::moving_object::CONTROL_MODE communication::get_mode() const {
inst 0:8b0edcbd3b87 14 return node_system::moving_object::MANUAL_MODE;
inst 0:8b0edcbd3b87 15 }
inst 0:8b0edcbd3b87 16
inst 0:8b0edcbd3b87 17 communication::vector2f communication::get_velocity() const {
inst 0:8b0edcbd3b87 18 uint32_t iv[] = {
inst 2:074942a78af1 19 serial_communication::instance()->get("stkLX"),
inst 2:074942a78af1 20 serial_communication::instance()->get("stkLY")
inst 0:8b0edcbd3b87 21 };
inst 0:8b0edcbd3b87 22
inst 0:8b0edcbd3b87 23 // 受信データは [0, 65535] の範囲であるので [-1, 1] に変換する
inst 2:074942a78af1 24 if ((iv[0] == velocity_offset_) && (iv[1] == velocity_offset_)) {
inst 0:8b0edcbd3b87 25 return vector2f();
inst 0:8b0edcbd3b87 26 }
inst 0:8b0edcbd3b87 27
inst 0:8b0edcbd3b87 28 vector2f v;
inst 0:8b0edcbd3b87 29
inst 0:8b0edcbd3b87 30 for (uint32_t i = 0; i < 2; ++i) {
inst 0:8b0edcbd3b87 31 v[i] = iv[i];
inst 2:074942a78af1 32 v[i] -= velocity_offset_;
inst 2:074942a78af1 33 v[i] /= velocity_offset_;
inst 0:8b0edcbd3b87 34 /*
inst 0:8b0edcbd3b87 35 switch(iv[i]) {
inst 0:8b0edcbd3b87 36 case 0:
inst 0:8b0edcbd3b87 37 v[i] = 0.0f;
inst 0:8b0edcbd3b87 38 break;
inst 0:8b0edcbd3b87 39
inst 0:8b0edcbd3b87 40 case 1:
inst 0:8b0edcbd3b87 41 v[i] = 1.0f;
inst 0:8b0edcbd3b87 42
inst 0:8b0edcbd3b87 43 break;
inst 0:8b0edcbd3b87 44
inst 0:8b0edcbd3b87 45 case 2:
inst 0:8b0edcbd3b87 46 v[i] = -1.0f;
inst 0:8b0edcbd3b87 47 break;
inst 0:8b0edcbd3b87 48 }
inst 0:8b0edcbd3b87 49 */
inst 0:8b0edcbd3b87 50 }
inst 0:8b0edcbd3b87 51
inst 0:8b0edcbd3b87 52 if (v.length() > 1.0f) {
inst 2:074942a78af1 53 return v.unit();
inst 0:8b0edcbd3b87 54 }
inst 0:8b0edcbd3b87 55
inst 2:074942a78af1 56 return v;
inst 2:074942a78af1 57
inst 0:8b0edcbd3b87 58 /*
inst 0:8b0edcbd3b87 59 vector2f velocity = v.unit();
inst 0:8b0edcbd3b87 60 return velocity;
inst 0:8b0edcbd3b87 61 */
inst 0:8b0edcbd3b87 62 }
inst 0:8b0edcbd3b87 63 float communication::get_angular_velocity_rad_per_sec() const {
inst 0:8b0edcbd3b87 64 return 0.0f;
inst 0:8b0edcbd3b87 65 }
inst 0:8b0edcbd3b87 66 communication::vector2f communication::get_target_position_mm() const {
inst 0:8b0edcbd3b87 67 return vector2f();
inst 0:8b0edcbd3b87 68 }
inst 0:8b0edcbd3b87 69 float communication::get_target_heading_rad() const {
inst 0:8b0edcbd3b87 70 return 0.0f;
inst 0:8b0edcbd3b87 71 }