@@ -146,14 +146,18 @@ def _move_to_pose(goal, publisher, controller):
146146 vel_msg .linear .x = _move_speed_factor (controller ) * vel_msg .linear .x
147147 vel_msg .angular .z = _move_speed_factor (controller ) * vel_msg .angular .z
148148
149- vel_msg .linear .x = (
150- _MOVE_LINEAR_LIMITS [1 ] if vel_msg .linear .x > _MOVE_LINEAR_LIMITS [1 ]
151- else _MOVE_LINEAR_LIMITS [0 ]
152- if vel_msg .linear .x < _MOVE_LINEAR_LIMITS [0 ] else vel_msg .linear .x )
153- vel_msg .angular .z = (
154- _MOVE_ANGULAR_LIMIT if vel_msg .angular .z > _MOVE_ANGULAR_LIMIT else
155- - _MOVE_ANGULAR_LIMIT
156- if vel_msg .angular .z < - _MOVE_ANGULAR_LIMIT else vel_msg .angular .z )
149+ clamped_l = min (_MOVE_LINEAR_LIMITS [1 ],
150+ max (_MOVE_LINEAR_LIMITS [0 ], vel_msg .linear .x ))
151+ clamped_a = min (_MOVE_ANGULAR_LIMIT ,
152+ max (- _MOVE_ANGULAR_LIMIT , vel_msg .angular .z ))
153+ factor = max (abs (vel_msg .linear .x / clamped_l ),
154+ abs (vel_msg .angular .z / clamped_a ))
155+ # print(
156+ # "r,a,p: (%f,%f,%f) B:%d l,a: (%f, %f) lc,ac: (%f, %f)" %
157+ # (rho, alpha, beta, backwards, vel_msg.linear.x, vel_msg.angular.z,
158+ # vel_msg.linear.x / factor, vel_msg.angular.z / factor))
159+ vel_msg .linear .x = vel_msg .linear .x / factor
160+ vel_msg .angular .z = vel_msg .angular .z / factor
157161
158162 # Publish velocity (don't move if we're already there!)
159163 if (rho > _MOVE_TOL_DIST ):
0 commit comments