Mostly Hello Stretch infrastructure
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 |
- SSH into the onboard computer on the Hello Stretch.
- Install home_robot_hw.
- Install home_robot.
- Launch the ROS hardware stack:
conda deactivate roslaunch home_robot startup_stretch_hector_slam.launch
- 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 &
- 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])
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
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
ImportError: cannot import name 'gcd' from 'fractions'
: Launch ros nodes from an env with Python 3.8 instead of 3.9
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 .
Home Robot is MIT licensed. See the LICENSE for details.
- cpaxton/home_robot
- Chris' repo for controlling stretch
- facebookresearch/fairo
- Robotics platform with a bunch of different stuff
- polymetis: Contains Torchscript controllers useful for exposing low-level control logic to the user side.
- Meta Robotics Platform(MRP): Useful for launching & managing multiple processes within their own sandboxes (to prevent dependency conflicts).
- The perception folder contains a bunch of perception related modules
- Polygrasp: A grasping library that uses GraspNet to generate grasps and Polymetis to execute them.
- iphone_reader: iPhone slam module.
- realsense_driver: A thin realsense wrapper
- droidlet/lowlevel/hello_robot
- Austin's branch with the continuous navigation stuff: austinw/hello_goto_odom
- Chris & Theo's branch with the grasping stuff: cpaxton/grasping-with-semantic-slam
- Nearest common ancester of all actively developing branches: Should migrate this snapshot into home-robot then work from there.
- hello-robot/stretch_body
- Base API for interacting with the Stretch robot
- Some scripts for interacting with the Stretch
- hello-robot/stretch_firmware
- Arduino firmware for the Stretch
- hello-robot/stretch_ros
- Builds on top of stretch_body
- ROS-related code for Stretch
- hello-robot/stretch_web_interface
- Development branch for ROS2
- hello-robot/stretch_web_interface
- Web interface for teleoping Stretch
- RoboStack/ros-noetic
- Conda stream with ROS binaries
- codekansas/strech-robot
- Some misc code for interacting with RealSense camera, streaming