irsim.lib.algorithm.rvo#

This file is the implementation of the Reciprocal Velocity Obstacle (RVO) algorithm for multi-robot collision avoidance.

Author: Ruihua Han

reference: MengGuo/RVO_Py_MAS

Classes#

reciprocal_vel_obs

A class to implement the Reciprocal Velocity Obstacle (RVO) algorithm for multi-robot collision avoidance.

Module Contents#

class irsim.lib.algorithm.rvo.reciprocal_vel_obs(state: list, obs_state_list=None, vxmax=1.5, vymax=1.5, acce=0.5, factor=1.0, line_obs_list=None)[source]#

A class to implement the Reciprocal Velocity Obstacle (RVO) algorithm for multi-robot collision avoidance.

Parameters:
  • state (list) – The rvo state of the agent [x, y, vx, vy, radius, vx_des, vy_des].

  • obs_state_list (list) – List of states of static obstacles [[x, y, vx, vy, radius]].

  • vxmax (float) – Maximum velocity in the x direction.

  • vymax (float) – Maximum velocity in the y direction.

  • acce (float) – Acceleration limit.

  • factor (float) – Penalty weighting factor for velocity selection.

  • line_obs_list (list) – List of line segments [[x1, y1, x2, y2], …].

state#
obs_state_list = None#
line_obs_list = None#
vxmax = 1.5#
vymax = 1.5#
acce = 0.5#
factor = 1.0#
update(state, obs_state_list, line_obs_list=None)[source]#

Update the agent, circular-obstacle, and line-obstacle states.

cal_vel(mode='rvo')[source]#

Calculate the velocity of the agent based on the Reciprocal Velocity Obstacle (RVO) algorithm.

Parameters:

mode (str) – The vo configure to calculate the velocity. It can be β€œrvo”, β€œhrvo”, or β€œvo”. - rvo: Reciprocal Velocity Obstacle (RVO) algorithm, for multi-robot collision avoidance. - hrvo: Hybrid Reciprocal Velocity Obstacle (HRVO) algorithm, for multi-robot collision avoidance. - vo: Velocity Obstacle (VO) algorithm, for obstacle-robot collision avoidance.

Returns:

Selected velocity [vx, vy].

Return type:

list[float]

config_rvo()[source]#

Build reciprocal velocity-obstacle cones for all obstacles.

config_rvo_mode(obstacle)[source]#

Build one RVO cone for a circular obstacle.

Parameters:

obstacle – Moving obstacle state [x, y, vx, vy, radius] or static circular obstacle state [x, y, radius].

Returns:

[apex, left_vector, right_vector] cone description.

Return type:

list

config_hrvo()[source]#

Build hybrid reciprocal velocity-obstacle cones for all obstacles.

config_hrvo_mode(obstacle)[source]#

Build one HRVO cone for a circular obstacle.

Parameters:

obstacle – Moving obstacle state [x, y, vx, vy, radius] or static circular obstacle state [x, y, radius].

Returns:

[apex, left_vector, right_vector] cone description.

Return type:

list | None

config_vo()[source]#

Build standard velocity-obstacle cones for all obstacles.

config_vo_mode(obstacle)[source]#

Build one VO cone for a circular obstacle.

Parameters:

obstacle – Moving obstacle state [x, y, vx, vy, radius] or static circular obstacle state [x, y, radius].

Returns:

[apex, left_vector, right_vector] cone description.

Return type:

list

config_vo_lines()[source]#

Compute VO cones for line segment obstacles.

For each segment, compute the angular span as seen from the agent, expanded by asin(r / dist) on each side to account for the agent radius. The apex is [0, 0] since line obstacles are static.

vel_candidate(rvo_list)[source]#

Sample reachable velocities and split them by VO feasibility.

Parameters:

rvo_list – Velocity-obstacle cone descriptions.

Returns:

Feasible velocities outside all cones and infeasible velocities inside at least one cone.

Return type:

tuple[list, list]

vo_out(vx, vy, rvo_list)[source]#

Return whether a candidate velocity lies outside every VO cone.

vel_select(vo_outside, vo_inside)[source]#

Select the best velocity from feasible candidates or penalized fallback.

penalty(vel, vel_des, factor)[source]#

Compute fallback cost from desired-velocity error and collision time.

static between_vector(line_left_vector, line_right_vector, line_vector)[source]#

Return whether line_vector lies inside a cone boundary pair.

static cross_product(vector1, vector2)[source]#

Compute the 2D cross product vector1 x vector2.