Skip to content

set_velocities raises ValueError when ids is a scalar or 0d array #39

Description

@pooleya19

Calling set_velocities(ids, velocities) raises a ValueError when ids is a scalar or a 0-dimensional NDArray, which might be used for single-robot control.

Reproduction (Single robot moving in a circle):

import numpy as np
from rps.robotarium import Robotarium

robotarium = Robotarium(number_of_robots=1, show_figure=True)
for _ in range(100):
    poses = robotarium.get_poses()
    command = np.array([[0.2], [1]])
    robotarium.set_velocities(0, command)                       # crashes
    # robotarium.set_velocities(np.array(0), command)           # crashes
    # robotarium.set_velocities([0], command)                   # no crash
    # robotarium.set_velocities(np.atleast_1d(0), command)      # no crash
    # robotarium.set_velocities(np.arange(1), command)          # no crash
    robotarium.step()

Error:

ValueError: could not broadcast input array from shape (2,1) into shape (2,)

Cause:

In set_velocities, if ids is a scalar or 0d array, self._velocities[:,ids] has shape (2,). Because velocities is (2,1), numpy fails to broadcast.

Suggested fix:

Hopefully I will follow this with a pull request. My suggested fix would be to make ids be at least 1d, allowing self._velocities[:,ids] to maintain a shape of (2,1). This would have no effect if ids is already 1d or 2d.

ids = np.atleast_1d(ids)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions