fix(touch): detect stopped speedL controller during touch
This commit is contained in:
parent
d51ceab46e
commit
7df07fba56
@ -1577,6 +1577,22 @@ bool TouchScreenTask::stepTouching() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A successful speedL submission does not report later worker failures.
|
||||||
|
// With duration=0 the controller must stay active until we request a stop
|
||||||
|
// or retract; otherwise waiting for contact/distance can continue forever.
|
||||||
|
if (!arm_->busy()) {
|
||||||
|
const double elapsed =
|
||||||
|
std::chrono::duration<double>(Clock::now() - phase_start_time_).count();
|
||||||
|
CMVR_LOG(ERROR) << "[TouchScreenTask][TOUCHING] speedL controller became idle before contact"
|
||||||
|
<< ", elapsed_s=" << elapsed
|
||||||
|
<< ", fz_N=" << last_touch_resultant_fz_
|
||||||
|
<< ", criterion_value_N=" << last_touch_pressure_sum_
|
||||||
|
<< ", threshold_N=" << config_.touch().tactile().force_threshold()
|
||||||
|
<< "; check preceding CartesianVelocityController/planner errors";
|
||||||
|
enterFailed(Status::ROBOT_COMMAND_FAILED);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const double speed_l_max_distance_m = config_.touch().speed_l().max_distance_m();
|
const double speed_l_max_distance_m = config_.touch().speed_l().max_distance_m();
|
||||||
if (speed_l_max_distance_m > 0.0) {
|
if (speed_l_max_distance_m > 0.0) {
|
||||||
if (!touch_start_position_valid_) {
|
if (!touch_start_position_valid_) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user