![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged hello_helpers at Robotics Stack Exchange
![]() |
hello_helpers package from stretch_ros2 repohello_helpers stretch_calibration stretch_core stretch_deep_perception stretch_demos stretch_description stretch_funmap stretch_nav2 stretch_octomap stretch_rtabmap stretch_simulation |
ROS Distro
|
Package Summary
Tags | No category tags. |
Version | 0.2.0 |
License | Apache License 2.0 |
Build type | AMENT_PYTHON |
Use | RECOMMENDED |
Repository Summary
Description | ROS 2 packages for the Stretch mobile manipulators from Hello Robot Inc. |
Checkout URI | https://github.com/hello-robot/stretch_ros2.git |
VCS Type | git |
VCS Version | humble |
Last Updated | 2025-06-24 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Hello Robot Inc.
Authors
Overview
hello_helpers mostly consists of the hello_helpers Python module. This module provides various Python files used across stretch_ros2 that have not attained sufficient status to stand on their own.
Capabilities
fit_plane.py : Fits planes to 3D data.
hello_misc.py : Various functions, including a helpful Python object with which to create ROS nodes.
hello_ros_viz.py : Various helper functions for vizualizations using RViz.
Typical Usage
import hello_helpers.fit_plane as fp
import hello_helpers.hello_misc as hm
import hello_helpers.hello_ros_viz as hr
API
Classes
HelloNode
This class is a convenience class for creating a ROS 2 node for Stretch. The most common way to use this class is to extend it. In your extending class, the main funcion would call HelloNode
’s main function. This would look like:
import hello_helpers.hello_misc as hm
class MyNode(hm.HelloNode):
def __init__(self):
hm.HelloNode.__init__(self)
def main(self):
hm.HelloNode.main(self, 'my_node', 'my_node', wait_for_first_pointcloud=False)
# my_node's main logic goes here
node = MyNode()
node.main()
There is also a one-liner class method for instantiating a HelloNode
for easy prototyping. One example where this is handy in sending pose commands from iPython:
# roslaunch the stretch launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
temp.move_to_pose({'joint_lift': 0.4})
Attributes
dryrun
This attribute allows you to control whether the robot actually moves when calling move_to_pose()
, home_the_robot()
, stow_the_robot()
, or other motion methods in this class. When dryrun
is set to True, these motion methods return immediately. This attribute is helpful when you want to run just the perception/planning part of your node without actually moving the robot. For example, you could replace the following verbose snippet:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
actually_move = False
[...]
if actually_move:
temp.move_to_pose({'translate_mobile_base': 1.0})
to be more consise:
# launch the stretch driver launch file beforehand
import hello_helpers.hello_misc as hm
temp = hm.HelloNode.quick_create('temp')
[...]
temp.dryrun = True
temp.move_to_pose({'translate_mobile_base': 1.0})
Methods
move_to_pose(pose, blocking=False, custom_contact_thresholds=False, duration=2.0)
This method takes in a dictionary that describes a desired pose for the robot and communicates with stretch_driver to execute it. The basic format of this dictionary is string/number key/value pairs, where the keys are joint names and the values are desired position goals. For example, {'joint_lift': 0.5}
would put the lift at 0.5m in its joint range. A full list of command-able joints is published to the /stretch/joint_states
topic. Used within a node extending HelloNode
, calling this method would look like:
self.move_to_pose({'joint_lift': 0.5})
Internally, this dictionary is converted into a JointTrajectory message that is sent to a FollowJointTrajectory action server in stretch_driver. This method waits by default for the server to report that the goal has completed executing. However, you can return before the goal has completed by setting the blocking
argument to False. This can be useful for preempting goals.
When the robot is in position
mode, if you set custom_contact_thresholds
to True, this method expects a different format dictionary: string/tuple key/value pairs, where the keys are still joint names, but the values are (position_goal, effort_threshold)
. The addition of a effort threshold enables you to detect when a joint has made contact with something in the environment, which is useful for manipulation or safe movements. For example, {'joint_arm': (0.5, 20)}
commands the telescoping arm fully out (the arm is nearly fully extended at 0.5 meters) but with a low enough effort threshold (20% of the arm motor’s max effort) that the motor will stop when the end of arm has made contact with something. Again, in a node, this would look like:
File truncated at 100 lines see the full file