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 |
Make sure you update all submodules by running:
git submodule update --recursive --init
- 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
Let ROBOT_IP
store the robot's IP and let SERVER_IP
store the server's IP. If your local network doesn't have access to internet we recommend using rsync
with --update
flag to sync your code changes across the machines. Usage:
rsync -rvu /abs/path/to/local/home-robot $ROBOT_USER@$ROBOT_IP:/abs/path/to/remote/home-robot
The above command will do a recursive updating of changed files while echoing a verbose output.
We enforce linters for our code. The lint
test will not pass if your code does not conform.
Install the git pre-commit hooks by running
pip install pre-commit
pre-commit install
To format manually, run: pre-commit run --show-diff-on-failure --all-files
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