AS: adding first phase of orientation
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# Copyright 2017 Open Source Robotics Foundation, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from examples_rclpy_executors.listener import Listener
|
||||
import rclpy
|
||||
from rclpy.callback_groups import MutuallyExclusiveCallbackGroup
|
||||
from rclpy.executors import MultiThreadedExecutor
|
||||
from rclpy.node import Node
|
||||
from std_msgs.msg import String
|
||||
|
||||
|
||||
class DoubleTalker(Node):
|
||||
"""Publish messages to a topic using two publishers at different rates."""
|
||||
|
||||
def __init__(self):
|
||||
super().__init__('double_talker')
|
||||
|
||||
self.i = 0
|
||||
self.pub = self.create_publisher(String, 'chatter', 10)
|
||||
|
||||
# This type of callback group only allows one callback to be executed at a time
|
||||
self.group = MutuallyExclusiveCallbackGroup()
|
||||
# Pass the group as a parameter to give it control over the execution of the timer callback
|
||||
self.timer = self.create_timer(1.0, self.timer_callback, callback_group=self.group)
|
||||
self.timer2 = self.create_timer(0.5, self.timer_callback, callback_group=self.group)
|
||||
|
||||
def timer_callback(self):
|
||||
msg = String()
|
||||
msg.data = 'Hello World: {0}'.format(self.i)
|
||||
self.i += 1
|
||||
self.get_logger().info('Publishing: "{0}"'.format(msg.data))
|
||||
self.pub.publish(msg)
|
||||
|
||||
|
||||
def main(args=None):
|
||||
rclpy.init(args=args)
|
||||
try:
|
||||
talker = DoubleTalker()
|
||||
listener = Listener()
|
||||
# MultiThreadedExecutor executes callbacks with a thread pool. If num_threads is not
|
||||
# specified then num_threads will be multiprocessing.cpu_count() if it is implemented.
|
||||
# Otherwise it will use a single thread. This executor will allow callbacks to happen in
|
||||
# parallel, however the MutuallyExclusiveCallbackGroup in DoubleTalker will only allow its
|
||||
# callbacks to be executed one at a time. The callbacks in Listener are free to execute in
|
||||
# parallel to the ones in DoubleTalker however.
|
||||
executor = MultiThreadedExecutor(num_threads=4)
|
||||
executor.add_node(talker)
|
||||
executor.add_node(listener)
|
||||
|
||||
try:
|
||||
executor.spin()
|
||||
finally:
|
||||
executor.shutdown()
|
||||
listener.destroy_node()
|
||||
talker.destroy_node()
|
||||
finally:
|
||||
rclpy.shutdown()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,52 @@
|
||||
# Copyright 2017 Open Source Robotics Foundation, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import sys
|
||||
|
||||
from examples_rclpy_executors.listener import Listener
|
||||
from examples_rclpy_executors.talker import Talker
|
||||
import rclpy
|
||||
from rclpy.executors import ExternalShutdownException
|
||||
from rclpy.executors import SingleThreadedExecutor
|
||||
|
||||
|
||||
def main(args=None):
|
||||
rclpy.init(args=args)
|
||||
try:
|
||||
talker = Talker()
|
||||
listener = Listener()
|
||||
|
||||
# Runs all callbacks in the main thread
|
||||
executor = SingleThreadedExecutor()
|
||||
# Add imported nodes to this executor
|
||||
executor.add_node(talker)
|
||||
executor.add_node(listener)
|
||||
|
||||
try:
|
||||
# Execute callbacks for both nodes as they become ready
|
||||
executor.spin()
|
||||
finally:
|
||||
executor.shutdown()
|
||||
listener.destroy_node()
|
||||
talker.destroy_node()
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except ExternalShutdownException:
|
||||
sys.exit(1)
|
||||
finally:
|
||||
rclpy.try_shutdown()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,116 @@
|
||||
# Copyright 2017 Open Source Robotics Foundation, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import sys
|
||||
import threading
|
||||
|
||||
import rclpy
|
||||
from rclpy.callback_groups import CallbackGroup
|
||||
from rclpy.executors import ExternalShutdownException
|
||||
from rclpy.node import Node
|
||||
from std_msgs.msg import String
|
||||
|
||||
|
||||
class ThrottledCallbackGroup(CallbackGroup):
|
||||
"""
|
||||
Throttle callbacks using a token bucket.
|
||||
|
||||
Callback groups are responsible for controlling when callbacks are allowed to be executed.
|
||||
rclpy provides two groups: one which always allows a callback to be executed, and another which
|
||||
allows only one callback to be executed at a time. If neither of these are sufficient then a
|
||||
custom callback group should be used instead.
|
||||
"""
|
||||
|
||||
def __init__(self, node):
|
||||
super().__init__()
|
||||
self.timer = node.create_timer(0.5, self.timer_callback)
|
||||
self.bucket = 10
|
||||
self.bucket_max = 10
|
||||
self.lock = threading.Lock()
|
||||
|
||||
def can_execute(self, entity):
|
||||
"""
|
||||
Ask group if this entity could be executed.
|
||||
|
||||
:param entity: A timer, subscriber, client, or service instance
|
||||
:rtype bool: true if a callback can be executed
|
||||
"""
|
||||
return self.bucket > 0
|
||||
|
||||
def beginning_execution(self, entity):
|
||||
"""
|
||||
Get permission from the group to execute a callback for an entity.
|
||||
|
||||
:param entity: A timer, subscriber, client, or service instance
|
||||
:rtype bool: true if the executor has permission to execute it
|
||||
"""
|
||||
with self.lock:
|
||||
if self.bucket > 0:
|
||||
# Take a token
|
||||
self.bucket -= 1
|
||||
return True
|
||||
# The bucket has no tokens
|
||||
return False
|
||||
|
||||
def ending_execution(self, entity):
|
||||
"""
|
||||
Notify group that a callback finished executing.
|
||||
|
||||
:param entity: A timer, subscriber, client, or service instance
|
||||
"""
|
||||
pass
|
||||
|
||||
def timer_callback(self):
|
||||
"""Replenish the tokens in the bucket at a steady rate."""
|
||||
with self.lock:
|
||||
# If there is room in the bucket, add a token to it.
|
||||
if self.bucket < self.bucket_max:
|
||||
self.bucket += 1
|
||||
|
||||
|
||||
class ThrottledTalker(Node):
|
||||
"""A Node which uses a custom callback group."""
|
||||
|
||||
def __init__(self):
|
||||
super().__init__('intermittent_talker')
|
||||
self.i = 0
|
||||
self.pub = self.create_publisher(String, 'chatter', 10)
|
||||
self.group = ThrottledCallbackGroup(self)
|
||||
# Timer triggers very quickly, but is part of a throttled group
|
||||
self.timer = self.create_timer(0.1, self.timer_callback, callback_group=self.group)
|
||||
|
||||
def timer_callback(self):
|
||||
msg = String()
|
||||
msg.data = 'Hello World: {0}'.format(self.i)
|
||||
self.i += 1
|
||||
self.get_logger().info('Publishing: "{0}"'.format(msg.data))
|
||||
self.pub.publish(msg)
|
||||
|
||||
|
||||
def main(args=None):
|
||||
rclpy.init(args=args)
|
||||
try:
|
||||
talker = ThrottledTalker()
|
||||
rclpy.spin(talker)
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except ExternalShutdownException:
|
||||
sys.exit(1)
|
||||
finally:
|
||||
rclpy.try_shutdown()
|
||||
talker.destroy_node()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,103 @@
|
||||
# Copyright 2017 Open Source Robotics Foundation, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
import os
|
||||
|
||||
from examples_rclpy_executors.listener import Listener
|
||||
from examples_rclpy_executors.talker import Talker
|
||||
import rclpy
|
||||
from rclpy.executors import Executor
|
||||
from rclpy.node import Node
|
||||
from std_msgs.msg import String
|
||||
|
||||
|
||||
class Estopper(Node):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__('estopper')
|
||||
self.sub = self.create_subscription(String, 'estop', self.estop_callback, 10)
|
||||
|
||||
def estop_callback(self, msg):
|
||||
self.get_logger().info('I heard: "%s"' % msg.data)
|
||||
|
||||
|
||||
class PriorityExecutor(Executor):
|
||||
"""
|
||||
Execute high priority callbacks in multiple threads, all others in a single thread.
|
||||
|
||||
This is an example of a custom exectuor in python. Executors are responsible for managing
|
||||
how callbacks get mapped to threads. Rclpy provides two executors: one which runs all callbacks
|
||||
in the main thread, and another which runs callbacks in a pool of threads. A custom executor
|
||||
should be written if neither are appropriate for your application.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.high_priority_nodes = set()
|
||||
self.hp_executor = ThreadPoolExecutor(max_workers=os.cpu_count() or 4)
|
||||
self.lp_executor = ThreadPoolExecutor(max_workers=1)
|
||||
|
||||
def add_high_priority_node(self, node):
|
||||
self.high_priority_nodes.add(node)
|
||||
# add_node inherited
|
||||
self.add_node(node)
|
||||
|
||||
def spin_once(self, timeout_sec=None):
|
||||
"""
|
||||
Execute a single callback, then return.
|
||||
|
||||
This is the only function which must be overridden by a custom executor. Its job is to
|
||||
start executing one callback, then return. It uses the method `wait_for_ready_callbacks`
|
||||
to get work to execute.
|
||||
|
||||
:param timeout_sec: Seconds to wait. Block forever if None. Don't wait if <= 0
|
||||
:type timeout_sec: float or None
|
||||
"""
|
||||
# wait_for_ready_callbacks yields callbacks that are ready to be executed
|
||||
try:
|
||||
handler, group, node = self.wait_for_ready_callbacks(timeout_sec=timeout_sec)
|
||||
except StopIteration:
|
||||
pass
|
||||
else:
|
||||
if node in self.high_priority_nodes:
|
||||
self.hp_executor.submit(handler)
|
||||
else:
|
||||
self.lp_executor.submit(handler)
|
||||
|
||||
|
||||
def main(args=None):
|
||||
rclpy.init(args=args)
|
||||
try:
|
||||
listener = Listener()
|
||||
talker = Talker()
|
||||
estopper = Estopper()
|
||||
|
||||
executor = PriorityExecutor()
|
||||
executor.add_high_priority_node(estopper)
|
||||
executor.add_node(listener)
|
||||
executor.add_node(talker)
|
||||
try:
|
||||
executor.spin()
|
||||
finally:
|
||||
executor.shutdown()
|
||||
estopper.destroy_node()
|
||||
talker.destroy_node()
|
||||
listener.destroy_node()
|
||||
finally:
|
||||
rclpy.shutdown()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,66 @@
|
||||
# Copyright 2017 Open Source Robotics Foundation, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import sys
|
||||
|
||||
import rclpy
|
||||
from rclpy.executors import ExternalShutdownException
|
||||
from rclpy.node import Node
|
||||
from std_msgs.msg import String
|
||||
|
||||
|
||||
class Listener(Node):
|
||||
"""
|
||||
A node with a single subscriber.
|
||||
|
||||
This class creates a node which prints messages it receives on a topic. Creating a node by
|
||||
inheriting from Node is recommended because it allows it to be imported and used by
|
||||
other scripts.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
# Calls Node.__init__('listener')
|
||||
super().__init__('listener')
|
||||
self.sub = self.create_subscription(String, 'chatter', self.chatter_callback, 10)
|
||||
|
||||
def chatter_callback(self, msg):
|
||||
self.get_logger().info('I heard: "%s"' % msg.data)
|
||||
|
||||
|
||||
def main(args=None):
|
||||
"""
|
||||
Run a Listener node standalone.
|
||||
|
||||
This function is called directly when using an entrypoint. Entrypoints are configured in
|
||||
setup.py. This along with the script installation in setup.cfg allows a listener node to be run
|
||||
with the command `ros2 run examples_rclpy_executors listener`.
|
||||
|
||||
:param args: Arguments passed in from the command line.
|
||||
"""
|
||||
rclpy.init(args=args)
|
||||
try:
|
||||
listener = Listener()
|
||||
rclpy.spin(listener)
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except ExternalShutdownException:
|
||||
sys.exit(1)
|
||||
finally:
|
||||
rclpy.try_shutdown()
|
||||
listener.destroy_node()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Runs a listener node when this script is run directly (not through an entrypoint)
|
||||
main()
|
||||
@@ -0,0 +1,76 @@
|
||||
# Copyright 2017 Open Source Robotics Foundation, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import sys
|
||||
|
||||
import rclpy
|
||||
from rclpy.executors import ExternalShutdownException
|
||||
from rclpy.node import Node
|
||||
from std_msgs.msg import String
|
||||
|
||||
|
||||
class Talker(Node):
|
||||
"""
|
||||
A node with a single publisher.
|
||||
|
||||
This class creates a node which regularly publishes messages on a topic. Creating a node by
|
||||
inheriting from Node is recommended because it allows it to be imported and used by
|
||||
other scripts.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
# Calls Node.__init__('talker')
|
||||
super().__init__('talker')
|
||||
self.i = 0
|
||||
self.pub = self.create_publisher(String, 'chatter', 10)
|
||||
# Create a timer that calls a callback every second. A timer is recommended for executing
|
||||
# periodic tasks because it does not block the main thread while it's waiting. This allows
|
||||
# an executor to do other work when mutliple nodes are run in the same process.
|
||||
self.timer = self.create_timer(1.0, self.timer_callback)
|
||||
|
||||
def timer_callback(self):
|
||||
msg = String()
|
||||
msg.data = 'Hello World: {0}'.format(self.i)
|
||||
self.i += 1
|
||||
self.get_logger().info('Publishing: "{0}"'.format(msg.data))
|
||||
self.pub.publish(msg)
|
||||
|
||||
|
||||
def main(args=None):
|
||||
"""
|
||||
Run a Talker node standalone.
|
||||
|
||||
This function is called directly when using an entrypoint. Entrypoints are configured in
|
||||
setup.py. This along with the script installation in setup.cfg allows a talker node to be run
|
||||
with the command `ros2 run examples_rclpy_executors talker`.
|
||||
|
||||
:param args: Arguments passed in from the command line.
|
||||
"""
|
||||
# Run standalone
|
||||
rclpy.init(args=args)
|
||||
try:
|
||||
talker = Talker()
|
||||
rclpy.spin(talker)
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
except ExternalShutdownException:
|
||||
sys.exit(1)
|
||||
finally:
|
||||
rclpy.try_shutdown()
|
||||
talker.destroy_node()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Runs a talker node when this script is run directly (not through an entrypoint)
|
||||
main()
|
||||
1
ros2_ws/build/examples_rclpy_executors/colcon_build.rc
Normal file
1
ros2_ws/build/examples_rclpy_executors/colcon_build.rc
Normal file
@@ -0,0 +1 @@
|
||||
0
|
||||
@@ -0,0 +1 @@
|
||||
# generated from colcon_core/shell/template/command_prefix.sh.em
|
||||
@@ -0,0 +1,20 @@
|
||||
AMENT_PREFIX_PATH=/opt/ros/humble
|
||||
COLCON=1
|
||||
HOME=/root
|
||||
HOSTNAME=a41c1d4d4b48
|
||||
LANG=C.UTF-8
|
||||
LC_ALL=C.UTF-8
|
||||
LD_LIBRARY_PATH=/opt/ros/humble/opt/rviz_ogre_vendor/lib:/opt/ros/humble/lib/x86_64-linux-gnu:/opt/ros/humble/lib
|
||||
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
|
||||
OLDPWD=/root/ros2_ws/src
|
||||
PATH=/opt/ros/humble/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||
PWD=/root/ros2_ws/build/examples_rclpy_executors
|
||||
PYTHONPATH=/opt/ros/humble/lib/python3.10/site-packages:/opt/ros/humble/local/lib/python3.10/dist-packages
|
||||
ROS_DISTRO=humble
|
||||
ROS_LOCALHOST_ONLY=0
|
||||
ROS_PYTHON_VERSION=3
|
||||
ROS_VERSION=2
|
||||
SHLVL=1
|
||||
TERM=xterm
|
||||
_=/usr/bin/colcon
|
||||
_colcon_cd_root=/opt/ros/humble/
|
||||
1
ros2_ws/build/examples_rclpy_executors/examples_rclpy_executors
Symbolic link
1
ros2_ws/build/examples_rclpy_executors/examples_rclpy_executors
Symbolic link
@@ -0,0 +1 @@
|
||||
/root/ros2_ws/src/examples/rclpy/executors/examples_rclpy_executors
|
||||
@@ -0,0 +1,19 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: examples-rclpy-executors
|
||||
Version: 0.15.3
|
||||
Summary: Examples of creating and using exectors to run multiple nodes in rclpy.
|
||||
Home-page: UNKNOWN
|
||||
Author: Shane Loretz
|
||||
Author-email: sloretz@openrobotics.org
|
||||
Maintainer: Aditya Pande, Shane Loretz
|
||||
Maintainer-email: aditya.pande@openrobotics.org, shane@openrobotics.org
|
||||
License: Apache License, Version 2.0
|
||||
Keywords: ROS
|
||||
Platform: UNKNOWN
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: Apache Software License
|
||||
Classifier: Programming Language :: Python
|
||||
Classifier: Topic :: Software Development
|
||||
|
||||
UNKNOWN
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package.xml
|
||||
setup.cfg
|
||||
setup.py
|
||||
../../../../build/examples_rclpy_executors/examples_rclpy_executors.egg-info/PKG-INFO
|
||||
../../../../build/examples_rclpy_executors/examples_rclpy_executors.egg-info/SOURCES.txt
|
||||
../../../../build/examples_rclpy_executors/examples_rclpy_executors.egg-info/dependency_links.txt
|
||||
../../../../build/examples_rclpy_executors/examples_rclpy_executors.egg-info/entry_points.txt
|
||||
../../../../build/examples_rclpy_executors/examples_rclpy_executors.egg-info/requires.txt
|
||||
../../../../build/examples_rclpy_executors/examples_rclpy_executors.egg-info/top_level.txt
|
||||
../../../../build/examples_rclpy_executors/examples_rclpy_executors.egg-info/zip-safe
|
||||
examples_rclpy_executors/__init__.py
|
||||
examples_rclpy_executors/callback_group.py
|
||||
examples_rclpy_executors/composed.py
|
||||
examples_rclpy_executors/custom_callback_group.py
|
||||
examples_rclpy_executors/custom_executor.py
|
||||
examples_rclpy_executors/listener.py
|
||||
examples_rclpy_executors/talker.py
|
||||
resource/examples_rclpy_executors
|
||||
test/test_copyright.py
|
||||
test/test_flake8.py
|
||||
test/test_pep257.py
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
[console_scripts]
|
||||
callback_group = examples_rclpy_executors.callback_group:main
|
||||
composed = examples_rclpy_executors.composed:main
|
||||
custom_callback_group = examples_rclpy_executors.custom_callback_group:main
|
||||
custom_executor = examples_rclpy_executors.custom_executor:main
|
||||
listener = examples_rclpy_executors.listener:main
|
||||
talker = examples_rclpy_executors.talker:main
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
setuptools
|
||||
@@ -0,0 +1 @@
|
||||
examples_rclpy_executors
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
29
ros2_ws/build/examples_rclpy_executors/install.log
Normal file
29
ros2_ws/build/examples_rclpy_executors/install.log
Normal file
@@ -0,0 +1,29 @@
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/custom_callback_group.py
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__init__.py
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/custom_executor.py
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/talker.py
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/listener.py
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/callback_group.py
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/composed.py
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__pycache__/custom_callback_group.cpython-310.pyc
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__pycache__/__init__.cpython-310.pyc
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__pycache__/custom_executor.cpython-310.pyc
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__pycache__/talker.cpython-310.pyc
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__pycache__/listener.cpython-310.pyc
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__pycache__/callback_group.cpython-310.pyc
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors/__pycache__/composed.cpython-310.pyc
|
||||
/root/ros2_ws/install/examples_rclpy_executors/share/ament_index/resource_index/packages/examples_rclpy_executors
|
||||
/root/ros2_ws/install/examples_rclpy_executors/share/examples_rclpy_executors/package.xml
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors-0.15.3-py3.10.egg-info/zip-safe
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors-0.15.3-py3.10.egg-info/dependency_links.txt
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors-0.15.3-py3.10.egg-info/top_level.txt
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors-0.15.3-py3.10.egg-info/requires.txt
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors-0.15.3-py3.10.egg-info/entry_points.txt
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors-0.15.3-py3.10.egg-info/PKG-INFO
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/python3.10/site-packages/examples_rclpy_executors-0.15.3-py3.10.egg-info/SOURCES.txt
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/examples_rclpy_executors/callback_group
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/examples_rclpy_executors/composed
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/examples_rclpy_executors/custom_callback_group
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/examples_rclpy_executors/custom_executor
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/examples_rclpy_executors/listener
|
||||
/root/ros2_ws/install/examples_rclpy_executors/lib/examples_rclpy_executors/talker
|
||||
1
ros2_ws/build/examples_rclpy_executors/package.xml
Symbolic link
1
ros2_ws/build/examples_rclpy_executors/package.xml
Symbolic link
@@ -0,0 +1 @@
|
||||
/root/ros2_ws/src/examples/rclpy/executors/package.xml
|
||||
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
import sys
|
||||
if sys.prefix == '/usr':
|
||||
sys.real_prefix = sys.prefix
|
||||
sys.prefix = sys.exec_prefix = '/root/ros2_ws/install/examples_rclpy_executors'
|
||||
@@ -0,0 +1 @@
|
||||
/root/ros2_ws/src/examples/rclpy/executors/resource/examples_rclpy_executors
|
||||
1
ros2_ws/build/examples_rclpy_executors/setup.cfg
Symbolic link
1
ros2_ws/build/examples_rclpy_executors/setup.cfg
Symbolic link
@@ -0,0 +1 @@
|
||||
/root/ros2_ws/src/examples/rclpy/executors/setup.cfg
|
||||
@@ -0,0 +1 @@
|
||||
prepend-non-duplicate;PYTHONPATH;/root/ros2_ws/build/examples_rclpy_executors
|
||||
@@ -0,0 +1,3 @@
|
||||
# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em
|
||||
|
||||
colcon_prepend_unique_value PYTHONPATH "$env:COLCON_CURRENT_PREFIX\/root/ros2_ws/build/examples_rclpy_executors"
|
||||
@@ -0,0 +1,3 @@
|
||||
# generated from colcon_core/shell/template/hook_prepend_value.sh.em
|
||||
|
||||
_colcon_prepend_unique_value PYTHONPATH "/root/ros2_ws/build/examples_rclpy_executors"
|
||||
Reference in New Issue
Block a user