|
@@ -169,12 +169,12 @@ void Navigation::pubStatuThreadFuc(void* p) {
|
|
|
void Navigation::publish_statu(NavMessage::NavStatu& statu) {
|
|
|
|
|
|
//发布nav状态
|
|
|
- statu.set_statu(eReady); //默认ready
|
|
|
+ statu.set_statu(actionType_); //
|
|
|
+ printf(" statu:%d\n",actionType_);
|
|
|
statu.set_move_mode(move_mode_);
|
|
|
NavMessage::Action *current_action = nullptr;
|
|
|
if (running_)
|
|
|
{
|
|
|
- statu.set_statu(eRunning);
|
|
|
statu.set_key(global_navCmd_.key());
|
|
|
std::queue<NavMessage::Action> actios = unfinished_cations_;
|
|
|
while (actios.empty() == false) {
|
|
@@ -448,6 +448,7 @@ bool Navigation::execute_adjust_action(const Pose2d& target,const Pose2d& target
|
|
|
double limit_angular=limit(angular,limit_rotate.min*M_PI/180.0,limit_rotate.max*M_PI/180.0);
|
|
|
|
|
|
SendMoveCmd(move_mode_,Monitor_emqx::eRotate, 0, limit_angular);
|
|
|
+ actionType_=eRotation;
|
|
|
printf(" Ratate | input anguar:%f,next angular:%f,down:%f diff:%f\n",timedA_.Get(),angular,limit_angular,theta);
|
|
|
continue;
|
|
|
}
|
|
@@ -457,6 +458,7 @@ bool Navigation::execute_adjust_action(const Pose2d& target,const Pose2d& target
|
|
|
double hv=limit_gause(diff.y(),limit_h.min,limit_h.max);
|
|
|
double velocity=limit(next_speed(timedV_.Get(),hv,acc_v,dt),limit_h.min,limit_h.max);
|
|
|
SendMoveCmd(move_mode_,Monitor_emqx::eHorizontal,velocity , 0);
|
|
|
+ actionType_=eHorizon;
|
|
|
printf(" Horizontal input:%f out:%f\n",timedV_.Get(),velocity);
|
|
|
continue;
|
|
|
}
|
|
@@ -466,6 +468,7 @@ bool Navigation::execute_adjust_action(const Pose2d& target,const Pose2d& target
|
|
|
double v=limit_gause(diff.x(),limit_v.min,limit_v.max);
|
|
|
double velocity=limit(next_speed(timedV_.Get(),v,acc_v,dt),limit_v.min,limit_v.max);
|
|
|
SendMoveCmd(move_mode_,Monitor_emqx::eMPC, velocity, 0);
|
|
|
+ actionType_=eVertical;
|
|
|
printf(" Vrtical input:%f,out:%f\n",timedV_.Get(),velocity);
|
|
|
continue;
|
|
|
}
|
|
@@ -533,14 +536,16 @@ bool Navigation::IsArrived(const Pose2d& cur,double velocity,double angular,
|
|
|
|
|
|
void Navigation::SendMoveCmd(Monitor_emqx::ActionMode mode,Monitor_emqx::ActionType type,
|
|
|
double v,double angular){
|
|
|
- if(monitor_)
|
|
|
- monitor_->set_speed(mode,type,v,angular);
|
|
|
+ if(monitor_) {
|
|
|
+ monitor_->set_speed(mode, type, v, angular);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
bool Navigation::clamp_close()
|
|
|
{
|
|
|
if(monitor_) {
|
|
|
monitor_->clamp_close(move_mode_);
|
|
|
+ actionType_=eClampClose;
|
|
|
while (cancel_ == false) {
|
|
|
if (timed_clamp_.timeout()) {
|
|
|
printf("timed clamp is timeout\n");
|
|
@@ -550,6 +555,7 @@ bool Navigation::clamp_close()
|
|
|
return true;
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
|
monitor_->clamp_close(move_mode_);
|
|
|
+ actionType_=eClampClose;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
@@ -558,6 +564,7 @@ bool Navigation::clamp_close()
|
|
|
bool Navigation::clamp_open() {
|
|
|
if(monitor_) {
|
|
|
monitor_->clamp_open(move_mode_);
|
|
|
+ actionType_=eClampOpen;
|
|
|
while(cancel_==false)
|
|
|
{
|
|
|
if(timed_clamp_.timeout())
|
|
@@ -569,6 +576,7 @@ bool Navigation::clamp_open() {
|
|
|
return true;
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
|
monitor_->clamp_open(move_mode_);
|
|
|
+ actionType_=eClampOpen;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
@@ -609,27 +617,28 @@ bool Navigation::execute_along_action(const Pose2d& begin,const Pose2d& target,c
|
|
|
/*
|
|
|
* 判断周边是否有障碍物,半径r,当障碍物进入r内,停下等待,当障碍物远离 1.2*r,恢复
|
|
|
* */
|
|
|
- double r = 2.8;
|
|
|
- static bool obs_stoped = false;
|
|
|
- Pose2d obs_relative = Pose2d::relativePose(timedBrotherPose_.Get(), timedPose_.Get());
|
|
|
- double distance = sqrt(obs_relative.x() * obs_relative.x() + obs_relative.y() * obs_relative.y());
|
|
|
- if (obs_stoped == false){
|
|
|
- if (distance < r && fabs(obs_relative.x())>0.2) {
|
|
|
- std::cout << "find obs stop to wait...." << std::endl;
|
|
|
- Stop();
|
|
|
- obs_stoped = true;
|
|
|
- continue;
|
|
|
- }
|
|
|
- } else {
|
|
|
- //障碍解除
|
|
|
- if(distance>1.2*r)
|
|
|
- {
|
|
|
- std::cout << "obs release continue MPC" << std::endl;
|
|
|
- obs_stoped = false;
|
|
|
- }else{
|
|
|
- continue;
|
|
|
- }
|
|
|
+ if(move_mode_==Monitor_emqx::eSingle) {
|
|
|
+ double r = 2.8;
|
|
|
+ static bool obs_stoped = false;
|
|
|
+ Pose2d obs_relative = Pose2d::relativePose(timedBrotherPose_.Get(), timedPose_.Get());
|
|
|
+ double distance = sqrt(obs_relative.x() * obs_relative.x() + obs_relative.y() * obs_relative.y());
|
|
|
+ if (obs_stoped == false) {
|
|
|
+ if (distance < r && fabs(obs_relative.x()) > 0.2) {
|
|
|
+ std::cout << "find obs stop to wait...." << std::endl;
|
|
|
+ Stop();
|
|
|
+ obs_stoped = true;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //障碍解除
|
|
|
+ if (distance > 1.2 * r) {
|
|
|
+ std::cout << "obs release continue MPC" << std::endl;
|
|
|
+ obs_stoped = false;
|
|
|
+ } else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//一次变速
|
|
@@ -661,6 +670,7 @@ bool Navigation::execute_along_action(const Pose2d& begin,const Pose2d& target,c
|
|
|
}
|
|
|
|
|
|
SendMoveCmd(move_mode_, Monitor_emqx::eMPC, out[0], out[1]);
|
|
|
+ actionType_=eMPC;
|
|
|
//std::this_thread::sleep_for(std::chrono::milliseconds (400));
|
|
|
}
|
|
|
|
|
@@ -705,6 +715,7 @@ void Navigation::navigatting()
|
|
|
pause_=false;
|
|
|
cancel_=false;
|
|
|
running_=true;
|
|
|
+ actionType_=eReady;
|
|
|
printf(" navigation beg...\n");
|
|
|
|
|
|
while(unfinished_cations_.empty()==false && cancel_==false)
|
|
@@ -767,7 +778,7 @@ void Navigation::navigatting()
|
|
|
}
|
|
|
unfinished_cations_.pop();
|
|
|
}
|
|
|
-
|
|
|
+ actionType_=eReady;
|
|
|
Stop();
|
|
|
if(cancel_==true) {
|
|
|
printf(" navigation canceled\n");
|