smartercow / home-robot

Low-level API for controlling various home robots

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Home Robot

CircleCI Code style: black

Mostly Hello Stretch infrastructure

Installation & Usage

This project contains numerous packages. See individual package docs for corresponding details & instructions.

Resource Description
home_robot Core package
home_robot_hw ROS package containing hardware drivers for the Hello Stretch Robot
home_robot_sim Simulation
home_robot_client Minimal remote client

Getting Started on the Hello Stretch

  1. SSH into the onboard computer on the Hello Stretch.
  2. Install home_robot_hw.
  3. Install home_robot.
  4. Launch the ROS hardware stack:
    conda deactivate
    roslaunch home_robot startup_stretch_hector_slam.launch
  5. In a separate shell, launch home-robot helper nodes:
    conda activate home_robot
    python -m home_robot.nodes.state_estimator &
    python -m home_robot.nodes.goto_controller &
  6. Launch interactive client: python -m home_robot.client.local_hello_robot

You should then be able to command the robot using the following commands:

# Query states
robot.get_base_state()  # returns base location in the form of [x, y, rz]

# Mode switching
robot.switch_to_velocity_mode()  # enables base velocity control
robot.switch_to_navigation_mode()  # enables continuous navigation
robot.switch_to_manipulation_mode()  # enables gripper control

# Velocity mode
robot.set_velocity(v: float, w: float)  # directly sets the linear and angular velocity of robot base

# Navigation mode
robot.navigate_to(xyt: list, relative: bool = False, position_only: bool = False)

# Manipulation mode
robot.set_arm_joint_positions(joint_positions: list)  # joint positions: [BASE_TRANSLATION, ARM_LIFT, ARM_EXTENTION, WRIST_YAW, WRIST_PITCH, WRIST_ROLL]
robot.set_ee_pose(pos: list, quat: list, relative: bool = False)

Basic example:

robot.get_base_state()  # Shows the robot's SE2 coordinates (should be [0, 0, 0])

robot.switch_to_navigation_mode()
robot.navigate_to([0.3, 0.3, 0.0])  # Sets SE2 target
robot.get_base_state()  # Shows the robot's SE2 coordinates (should be close to [0.3, 0.3, 0])

robot.switch_to_manipulation_mode()
robot.set_ee_pose([0.5, 0.6, 0.5], [0, 0, 0, 1])

Launching Grasping Demo (outdated)

You need to create a catkin workspace on your server in order to run this demo, as this is where we will run Contact Graspnet.

Contact graspnet is downloaded under third_party/, but there is a CATKIN_IGNORE file in this directory. You want to symlink this file out into your workspace:

ROSWS=/path/to/ros_ws
ln -s `rospack find home_robot`/third_party/contact_graspnet $ROSWS/src/contact_graspnet

... but it actually shouldn't be necessary. What is necessary is to build the grasp service defined in home_robot by placing it into $ROSWS.

Put the robot in its initial position, e.g. so the arm is facing cups you can pick up. On the robot side:

roslaunch home_robot startup_stretch_hector_slam.launch

Note: Contact GraspNet

Contact graspnet is supported as a way of generating candidate grasps for the Stretch to use on various objects. We have our own fork of Contact Graspnet which has been modified with a ROS interface.

Follow the installation instructions as normal and start it with:

conda activate contact_graspnet_env
~/src/contact_graspnet$ python contact_graspnet/graspnet_ros_server.py  --local_regions --filter_grasps

Troubleshooting

  • ImportError: cannot import name 'gcd' from 'fractions': Launch ros nodes from an env with Python 3.8 instead of 3.9

Code Contribution

We enforce linters for our code. The formatting test will not pass if your code does not conform.

To make this easy for yourself, you can either

  • Add the formattings to your IDE
  • Install the git pre-commit hooks by running
    pip install pre-commit
    pre-commit install

To enforce this in VSCode, install black, set your Python formatter to black and set Format On Save to true.

To format manually, run: black .

License

Home Robot is MIT licensed. See the LICENSE for details.

References (temp)

About

Low-level API for controlling various home robots

License:MIT License


Languages

Language:Jupyter Notebook 84.6%Language:Python 15.3%Language:CMake 0.1%Language:Shell 0.0%