|
@@ -205,6 +205,122 @@ void card_location_base::on_location(const std::vector<point>&vp, const std::vec
|
|
|
|
|
|
log_info("[help-battery] card_id=%d, battery=%d, val=%d", m_id, m_battery_value, val);
|
|
|
do_status(val);
|
|
|
+
|
|
|
+ if (is_vehicle())
|
|
|
+ {
|
|
|
+ if (m_stat_last == ENUM_STATUS_BACK)
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_BACK;
|
|
|
+ }
|
|
|
+ if (m_speed > 1 && m_stat_last != ENUM_STATUS_BACK)
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_FORWARD;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_stat_last == ENUM_STATUS_FORWARD ||
|
|
|
+ m_stat_last == ENUM_STATUS_SPEED_UP ||
|
|
|
+ m_stat_last == ENUM_STATUS_SPEED_DOWN
|
|
|
+ )
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_FORWARD;
|
|
|
+ }
|
|
|
+ if (m_stat_last == ENUM_STATUS_LEFT ||
|
|
|
+ m_stat_last == ENUM_STATUS_RIGHT)
|
|
|
+ {
|
|
|
+ m_stat = m_statusBeforeTurning;
|
|
|
+ }
|
|
|
+ if ((lm[0].m_acc <= -0.009 && m_stat_last == ENUM_STATUS_STATIC) || m_stat_last == ENUM_STATUS_BACK)
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_BACK;
|
|
|
+ }
|
|
|
+ if (lm[0].m_acc >= 0.009 &&
|
|
|
+ (m_stat_last == ENUM_STATUS_FORWARD ||
|
|
|
+ m_stat_last == ENUM_STATUS_SPEED_UP ||
|
|
|
+ m_stat_last == ENUM_STATUS_SPEED_DOWN ||
|
|
|
+ m_stat_last == ENUM_STATUS_STATIC))
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_SPEED_UP;
|
|
|
+ }
|
|
|
+ if (lm[0].m_acc <= -0.009 &&
|
|
|
+ (m_stat_last == ENUM_STATUS_FORWARD ||
|
|
|
+ m_stat_last == ENUM_STATUS_SPEED_UP ||
|
|
|
+ m_stat_last == ENUM_STATUS_SPEED_DOWN ||
|
|
|
+ (m_speed_last - m_speed > 0.5)))
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_SPEED_DOWN;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (lm[0].m_rav > 0)
|
|
|
+ {
|
|
|
+ if (m_stat_last == ENUM_STATUS_LEFT)
|
|
|
+ {
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_statusBeforeTurning = m_stat_last;
|
|
|
+ }
|
|
|
+ m_stat = ENUM_STATUS_LEFT;
|
|
|
+ }
|
|
|
+ if (lm[0].m_rav < 0)
|
|
|
+ {
|
|
|
+ if (m_stat_last == ENUM_STATUS_RIGHT)
|
|
|
+ {
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_statusBeforeTurning = m_stat_last;
|
|
|
+ }
|
|
|
+ m_stat = ENUM_STATUS_RIGHT;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_stat_last != ENUM_STATUS_BACK)
|
|
|
+ {
|
|
|
+ if (lm[0].m_acc == 0 && lm[0].m_rav == 0 && m_speed <= 1)
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_STATIC;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (lm[0].m_acc == 0 && lm[0].m_rav == 0 && m_speed <= 0.3)
|
|
|
+ {
|
|
|
+ m_stat = ENUM_STATUS_STATIC;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ switch (m_stat)
|
|
|
+ {
|
|
|
+ case ENUM_STATUS_STATIC:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 静止 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ case ENUM_STATUS_MOVE:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 移动 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ case ENUM_STATUS_FORWARD:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 前进 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ case ENUM_STATUS_BACK:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 后退 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ case ENUM_STATUS_LEFT:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 左转 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ case ENUM_STATUS_RIGHT:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 右转 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ case ENUM_STATUS_SPEED_UP:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 加速 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ case ENUM_STATUS_SPEED_DOWN:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 减速 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ log_info("[car-motion] card_id=%d, val=%d 未知 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ m_speed_last = m_speed;
|
|
|
+ m_stat_last = m_stat;
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|