State of repo when Spot & MOVO both worked fine for object search demos.
Spot
We have moved away from spot_ros and created our own integration of Spot and ROS through the following four ROS packages:
This is more modular and more light-weight.
From a Python programming perspective, this means that most functionalities related to controlling Spot are folded into a single Python package called rbd_spot
(see this __init__.py
file).
Look for tests in each package for example usage. As a quick example from rbd_spot_action/tests), here is how you could make Spot move its arm with body follow (fundamentally based on the FollowArmCommand rpc from Spot SDK).
#!/usr/bin/env python
import rbd_spot
from bosdyn.client.robot_command import blocking_stand
conn = rbd_spot.SpotSDKConn(sdk_name="ArmMoveClient",
take_lease=True)
command_client = rbd_spot.arm.create_client(conn)
robot_state_client = rbd_spot.state.create_client(conn)
blocking_stand(command_client, timeout_sec=10)
rbd_spot.arm.moveEEToWithBodyFollow(conn, command_client, robot_state_client, (2.0, 0.1, 0.25))
time.sleep(2.0)
rbd_spot.arm.stow(conn, command_client)
time.sleep(2.0)
MOVO
Similarly for MOVO, there are four packages, rbd_movo_action, rbd_movo_perception, rbd_movo_systems, and rbd_movo_teleop. They require building the kinova-movo stack (that is provided by Kinova when MOVO was released). See robotdev/movo/src.
Note that MOVO runs onboard ROS kinetic. Your computer may most likely be running ROS noetic. Your computer can still communicate with MOVO -- it still works. Controlling the MOVO robot through an action server running in noetic works. Note that you do need to make a symbolic link to the kinova-movo stack built in ROS kinetic (see the noetic_ws folder dedicated for a ROS noetic workspace for MOVO.
Below are some notes I wrote down when I made this work (sloop_object_search
was my package for object search I was testing):
How did I do this..:
1. Create 'noetic_ws' inside 'movo', as a workspace dedicated for Noetic (you cannot mix
up different ROS versions for the same workspace -- the build & devel folders are not
compatible)
2. Create symbolic link to sloop_object_search_ros inside noetic_ws. Note that
sloop_object_search abandons the idea that its ROS package may be used by
Kinetic; It only assumes Noetic.
3. Run catkin_make -DWHITELIST_PACKAGES="sloop_object_search_ros"
4. Make sure that the launch files you need /do not/ depend on rbd_movo_* packages;
Because those packages are in ROS kinetic. We want message-level communication
but not mix-up.
5. Install sloop_object_search ros package by ~pip install -e .~.