예제 #1
0
    def test_create_client_with_group(self):
        cli1 = self.node.create_client(GetParameters, 'get/parameters')
        group = ReentrantCallbackGroup()
        cli2 = self.node.create_client(GetParameters, 'get/parameters', callback_group=group)

        self.assertFalse(group.has_entity(cli1))
        self.assertTrue(group.has_entity(cli2))
예제 #2
0
def main(args=None):
    global g_node
    rclpy.init(args=args)

    g_node = rclpy.create_node('tms_ur_speaker')
    g_node.get_logger().info('start')

    subscription = g_node.create_subscription(String, 'speaker',
                                              subscription_callback, 10)
    subscription  # prevent unused variable warning

    srv = g_node.create_service(SpeakerSrv,
                                'speaker_srv',
                                service_callback,
                                callback_group=ReentrantCallbackGroup())
    wav_srv = g_node.create_service(SpeakerWavSrv,
                                    'speaker_wav_srv',
                                    wav_srv_callback,
                                    callback_group=ReentrantCallbackGroup())

    while rclpy.ok():
        rclpy.spin_once(g_node)

    g_node.destroy_node()
    rclpy.shutdown()
예제 #3
0
    def test_create_timer_with_group(self):
        tmr1 = self.node.create_timer(1.0, lambda: None)
        group = ReentrantCallbackGroup()
        tmr2 = self.node.create_timer(1.0, lambda: None, callback_group=group)

        self.assertFalse(group.has_entity(tmr1))
        self.assertTrue(group.has_entity(tmr2))
예제 #4
0
    def test_create_service_with_group(self):
        srv1 = self.node.create_service(GetParameters, 'get/parameters', lambda req: None)
        group = ReentrantCallbackGroup()
        srv2 = self.node.create_service(
            GetParameters, 'get/parameters', lambda req: None, callback_group=group)

        self.assertFalse(group.has_entity(srv1))
        self.assertTrue(group.has_entity(srv2))
예제 #5
0
    def test_create_subscription_with_group(self):
        sub1 = self.node.create_subscription(Primitives, 'chatter', lambda msg: print(msg))
        group = ReentrantCallbackGroup()
        sub2 = self.node.create_subscription(
            Primitives, 'chatter', lambda msg: print(msg), callback_group=group)

        self.assertFalse(group.has_entity(sub1))
        self.assertTrue(group.has_entity(sub2))
예제 #6
0
    def test_reentrant_group(self):
        self.assertIsNotNone(self.node.handle)
        group = ReentrantCallbackGroup()
        t1 = self.node.create_timer(1.0, lambda: None, callback_group=group)
        t2 = self.node.create_timer(1.0, lambda: None, callback_group=group)

        self.assertTrue(group.can_execute(t1))
        self.assertTrue(group.can_execute(t2))
        self.assertTrue(group.beginning_execution(t1))
        self.assertTrue(group.beginning_execution(t2))
예제 #7
0
    def test_multi_goal_accept(self):
        executor = MultiThreadedExecutor(context=self.context)
        action_server = ActionServer(
            self.node,
            Fibonacci,
            'fibonacci',
            execute_callback=self.execute_goal_callback,
            callback_group=ReentrantCallbackGroup(),
            handle_accepted_callback=lambda gh: None,
        )

        goal_msg = Fibonacci.Impl.SendGoalService.Request()
        goal_msg.goal_id = UUID(uuid=list(uuid.uuid4().bytes))
        future0 = self.mock_action_client.send_goal(goal_msg)
        goal_msg.goal_id = UUID(uuid=list(uuid.uuid4().bytes))
        future1 = self.mock_action_client.send_goal(goal_msg)
        goal_msg.goal_id = UUID(uuid=list(uuid.uuid4().bytes))
        future2 = self.mock_action_client.send_goal(goal_msg)

        rclpy.spin_until_future_complete(self.node, future0, executor)
        rclpy.spin_until_future_complete(self.node, future1, executor)
        rclpy.spin_until_future_complete(self.node, future2, executor)

        self.assertTrue(future0.result().accepted)
        self.assertTrue(future1.result().accepted)
        self.assertTrue(future2.result().accepted)
        action_server.destroy()
예제 #8
0
    def __init__(
            self,
            worker_id: int,
            name: str,
            policy_type: str = 'DQN') -> None:
        """Initialize Worker Node class."""
        super().__init__(worker_id, name, policy_type)
        self.episode = 0

        # Set timer flags, futures, and callback groups.
        self.flag = Flags(True, False, False, False, True)
        self._future_weights = rclpy.Future()
        self._future_gradients = rclpy.Future()
        self._cb_group = ReentrantCallbackGroup()
        self._total_reward = 0
        self._update = 10

        # Create ROS service clients and publisher.
        self._cli: Dict[str, Client] = {
            'weights': self.create_client(
                Weights, '/weights', callback_group=self._cb_group),
            'gradients': self.create_client(
                Gradients, '/gradient', callback_group=self._cb_group),
        }
        self._pub = self.create_publisher(
            Float32, 'total_reward', 10, callback_group=self._cb_group)

        # Check if ROS service servers are available.
        while not self._cli['weights'].wait_for_service(timeout_sec=1.0):
            self.get_logger().info(
                '`Weights` service not available, waiting again...')

        while not self._cli['gradients'].wait_for_service(timeout_sec=1.0):
            self.get_logger().info(
                '`Gradients` service not available, waiting again...')
예제 #9
0
    def __init__(self, task_tree, name_prefix=""):
        self.node_type = task_tree[0]
        self.task_tree = task_tree
        if name_prefix != "":
            name_prefix += "_"
        #self.name = f"{name_prefix}{self.node_type}{TaskNode._task_num}"
        self.name = f"{self.node_type}{TaskNode._task_num}"
        TaskNode._task_num += 1
        TaskNode.tasks.append(self)
        self.cb_group = ReentrantCallbackGroup()
        self.child_task_nodes = []
        self.child_clients = []  # Action Client
        self.goal_handles = []  # Goal Handle
    
        super().__init__(self.name)

        # self.get_logger().info(f"task tree:{self.task_tree}")
        self.action_server = ActionServer(
            self,
            TsDoTask,
            f"{self.name}",
            self.execute_callback,
            callback_group=self.cb_group,
            # goal_callback=self.goal_callback,
            cancel_callback=self.cancel_callback)
        
        self.get_logger().info('Instantiate')
    def __init__(self):
        super().__init__('turtlebot3_patrol_server')
        """************************************************************
        ** Initialise variables
        ************************************************************"""
        self.goal = Patrol.Goal()
        """************************************************************
        ** Initialise ROS publishers and servers
        ************************************************************"""
        qos = QoSProfile(depth=10)

        # Initialise publishers
        self.cmd_vel_pub = self.create_publisher(Twist, 'cmd_vel', qos)

        # Initialise servers
        self.action_server = ActionServer(
            self,
            Patrol,
            'patrol',
            execute_callback=self.execute_callback,
            callback_group=ReentrantCallbackGroup(),
            goal_callback=self.goal_callback,
            cancel_callback=self.cancel_callback)

        self.get_logger().info(
            "Turtlebot3 patrol action server has been initialised.")
예제 #11
0
    def __init__(self):
        super().__init__('async_action_server')
        self.logger = self.get_logger()
        # fibonacciアクションサーバーの作成
        # (execute_callback実行は複数同時処理を許可)
        cg01 = ReentrantCallbackGroup()
        # cg01 = MutuallyExclusiveCallbackGroup()

        self._srv = ActionServer(self,
                                 Fibonacci,
                                 'fibonacci',
                                 execute_callback=self._execute_callback,
                                 callback_group=cg01)

        # ---------- Timer 01 ----------
        self._timer01_cnt = 0
        self._timer01 = self.create_timer(timer_period_sec=3.0,
                                          callback=self._on_timer01,
                                          callback_group=cg01)

        # ---------- Timer 01 ----------
        self._timer02_cnt = 0
        self._timer02 = self.create_timer(timer_period_sec=3.0,
                                          callback=self._on_timer02,
                                          callback_group=cg01)

        self._dtstr = self._get_time_now()
        self.logger.info('----- [action_server]Start! -----')
예제 #12
0
    def __init__(self):

        super().__init__("ex_follow_target_py")

        # Create callback group that allows execution of callbacks in parallel without restrictions
        self._callback_group = ReentrantCallbackGroup()

        # Create MoveIt 2 interface
        self._moveit2 = MoveIt2(
            node=self,
            joint_names=panda.joint_names(),
            base_link_name=panda.base_link_name(),
            end_effector_name=panda.end_effector_name(),
            group_name=panda.MOVE_GROUP_ARM,
            execute_via_moveit=True,
            callback_group=self._callback_group,
        )
        # Use upper joint velocity and acceleration limits
        self._moveit2.max_velocity = 1.0
        self._moveit2.max_acceleration = 1.0

        # Create a subscriber for target pose
        self.__previous_target_pose = Pose()
        self.create_subscription(
            msg_type=PoseStamped,
            topic="/target_pose",
            callback=self.target_pose_callback,
            qos_profile=QoSProfile(depth=1),
            callback_group=self._callback_group,
        )

        self.get_logger().info("Initialization successful.")
예제 #13
0
    def __init__(self):
        super().__init__("async_service_server")
        self.logger = self.get_logger()
        # add_two_intsサービスサーバーの作成
        # (execute_callback実行は複数同時処理を許可)
        cg_re_01 = ReentrantCallbackGroup()
        cg_mu_01 = MutuallyExclusiveCallbackGroup()

        self._srv = self.create_service(AddTwoInts,
                                        "add_two_ints",
                                        callback=self.add_two_ints_callback,
                                        callback_group=cg_re_01
                                        )

        # ---------- Timer 01 ----------
        self._timer01_cnt = 0
        self._timer01 = self.create_timer(timer_period_sec=3.0,
                                          callback=self._on_timer01,
                                          callback_group=cg_mu_01)

        # ---------- Timer 01 ----------
        self._timer02_cnt = 0
        self._timer02 = self.create_timer(timer_period_sec=3.0,
                                          callback=self._on_timer02,
                                          callback_group=cg_mu_01)

        self._dtstr = self._get_time_now()
        self.list_len = 3
        self._share_list = list(range(self._timer01_cnt, self._timer01_cnt + self.list_len))
        self.logger.info('----- [service_server]Start! -----')
예제 #14
0
    async def subtask(self, goal_handle, task_tree):
        # print("subtask")
        command = task_tree[1]

        subtask_client = ActionClient(self,
                                      TsDoSubtask,
                                      "subtask_node_" + str(command[0]),
                                      callback_group=ReentrantCallbackGroup())
        if not subtask_client.wait_for_server(timeout_sec=5.0):
            self.get_logger().error('No action server available')
            goal_handle.abort()
            result = TsReq.Result()
            result.message = "Abort"
            return result
        goal_msg = TsDoSubtask.Goal()
        if len(command) >= 2:
            goal_msg.arg_json = command[1]
        else:
            goal_msg.arg_json = "{}"

        print(f'subtask: subtask_node_{command[0]} args:{goal_msg.arg_json}')
        subtask_goalhandle = await subtask_client.send_goal_async(goal_msg)
        self.subtask_goalhandles[
            subtask_goalhandle.goal_id.uuid.tostring()] = subtask_goalhandle
        if not subtask_goalhandle.accepted:
            self.get_logger().info("goal rejected")
            del self.subtask_goalhandles[
                subtask_goalhandle.goal_id.uuid.tostring()]
            return "Abort"

        future_result = await subtask_goalhandle.get_result_async()
        del self.subtask_goalhandles[
            subtask_goalhandle.goal_id.uuid.tostring()]
        self.get_logger().info(f"returned {future_result.result.message}")
        return future_result.result.message
예제 #15
0
 def cancel_callback(self, goal_handle):
     self.get_logger().info('Received cancel request')
     self._timer = self.create_timer(
         0.0,
         self._cancel_service_callback,
         callback_group=ReentrantCallbackGroup())
     return CancelResponse.ACCEPT
예제 #16
0
 def __init__(self):
     super().__init__('wait')
     self.cb_group = ReentrantCallbackGroup()
     self.srv = self.create_service(AddTwoInts,
                                    'wait',
                                    self.wait_callback,
                                    callback_group=self.cb_group)
예제 #17
0
 async def create_tasknode(self, task_tree):
     global executor
     # generate task_node
     child_tasknode = TaskNode(task_tree)
     # self.child_tasknode.append(self.childtask_node)
     executor.add_node(child_tasknode)  # added last added task
     ## execute
     client = ActionClient(self,
                           TsDoTask,
                           child_tasknode.name,
                           callback_group=ReentrantCallbackGroup())
     if not client.wait_for_server(timeout_sec=5.0):
         self.get_logger().error('No action server available')
         goal_handle.abort()
         result = TsDoTask.Result()
         result.message = "Abort"
         return result
     goal = TsDoTask.Goal()
     goal_handle_client = await client.send_goal_async(goal)
     if not goal_handle_client.accepted:
         self.get_logger().info("goal reject")
         goal_handle.abort()
         result = TsDoTask.Result()
         result.message = "Goal Reject"
         return result
     self.get_logger().info("goal accept")
     return goal_handle_client, child_tasknode
예제 #18
0
    def __init__(self):
        super().__init__('camera_receiver')
        self.pubImg = self.create_publisher(Image, "camera/image", 10)
        self.pubImgCompress = self.create_publisher(CompressedImage,
                                                    "camera/compressed", 10)

        self.declare_parameter("ip", "192.168.2.101")
        self.declare_parameter("frame_id", "cellphone_camera")

        ip = self.get_parameter("ip").get_parameter_value().string_value

        self.cap = cv.VideoCapture("http://" + ip + ":8080/video")
        self.cap.set(cv.CAP_PROP_BUFFERSIZE, 0)

        self.callbackGroup = ReentrantCallbackGroup()

        timer_period = 0.016666 / 2.0  # segundos
        self.timer = self.create_timer(
            timer_period,
            self.timerCallback)  #, callback_group=self.callbackGroup)
        self.timer2 = self.create_timer(
            timer_period,
            self.timer2Callback)  #, callback_group=self.callbackGroup)

        self.frame = None
        self.ret = False

        self.height = 0
        self.width = 0
예제 #19
0
def main(args=None):
    global logger
    rclpy.init(args=args)

    node = rclpy.create_node('minimal_action_server')
    logger = node.get_logger()

    # Use a ReentrantCallbackGroup to enable processing multiple goals concurrently
    # Default goal callback accepts all goals
    # Default cancel callback rejects cancel requests
    action_server = ActionServer(node,
                                 Fibonacci,
                                 'fibonacci',
                                 execute_callback=execute_callback,
                                 cancel_callback=cancel_callback,
                                 callback_group=ReentrantCallbackGroup())

    # Use a MultiThreadedExecutor to enable processing goals concurrently
    executor = MultiThreadedExecutor()

    rclpy.spin(node, executor=executor)

    action_server.destroy()
    node.destroy_node()
    rclpy.shutdown()
예제 #20
0
    def __init__(self):

        super().__init__("ex_throw_object")

        # Create callback group that allows execution of callbacks in parallel without restrictions
        self._callback_group = ReentrantCallbackGroup()

        # Create MoveIt 2 interface
        self._moveit2 = MoveIt2(
            node=self,
            joint_names=panda.joint_names(),
            base_link_name=panda.base_link_name(),
            end_effector_name=panda.end_effector_name(),
            group_name=panda.MOVE_GROUP_ARM,
            callback_group=self._callback_group,
        )
        # Use upper joint velocity and acceleration limits
        self._moveit2.max_velocity = 1.0
        self._moveit2.max_acceleration = 1.0

        # Create MoveIt 2 interface for gripper
        self._moveit2_gripper = MoveIt2Gripper(
            node=self,
            gripper_joint_names=panda.gripper_joint_names(),
            open_gripper_joint_positions=panda.OPEN_GRIPPER_JOINT_POSITIONS,
            closed_gripper_joint_positions=panda.
            CLOSED_GRIPPER_JOINT_POSITIONS,
            gripper_group_name=panda.MOVE_GROUP_GRIPPER,
            callback_group=self._callback_group,
        )

        self.get_logger().info("Initialization successful.")
 def __init__(self) -> None:
     super().__init__('battery_state_server')
     # tworzenie zmiennych potrzebnych do obliczania SOC i time_to_full
     self.goal_handle = None
     self.measure_time = None
     self.start = None
     self.last_callback_time = None
     self.state_of_charge = 0  # A*s
     self.max_capacity = 5 * 60 * 60  # A*s
     self.measurements = []
     # listy potrzebne do logowania danych
     self.log_time, self.log_soc, self.log_current = [], [], []
     # tworzymy callback grupę żeby możliwe było równoczesne przetwarzanie callbacków
     callback_group = ReentrantCallbackGroup()
     # tworzymy serwer akcji obliczający stan baterii
     self._action_server = ActionServer(self,
                                        BatteryState,
                                        'battery_state',
                                        self.execute_callback,
                                        callback_group=callback_group)
     # tworzymy subscribera do tematu z obciążeniem prądowym
     self.subscription = self.create_subscription(
         Float64,
         'current',
         self.analysis_callback,
         10,
         callback_group=callback_group)
     self.get_logger().info('Starting battery state server')
 def camera_listener(self):
     """Registers the node to listen to CameraMsg(video_mjpeg) and
        Image(display_mjpeg) messages.
     """
     camera_sub_cb_grp = ReentrantCallbackGroup()
     self.create_subscription(CameraMsg,
                              constants.CAMERA_MSG_TOPIC,
                              self.camera_callback,
                              10,
                              callback_group=camera_sub_cb_grp)
     display_img_sub_cb_grp = ReentrantCallbackGroup()
     self.create_subscription(Image,
                              constants.DISPLAY_MSG_TOPIC,
                              self.display_callback,
                              10,
                              callback_group=display_img_sub_cb_grp)
예제 #23
0
    def __init__(self, namespace: str = None):
        super().__init__('each_leg_gait', namespace=namespace)
        self._gait_action_server = ActionServer(
            self,
            Gait,
            'gait',
            execute_callback=self.execute_callback,
            callback_group=ReentrantCallbackGroup(),
            goal_callback=self.goal_callback,
            cancel_callback=self.cancel_callback)
        self._calibrate_signal_pub = self.create_publisher(
            Empty, 'calibrate_signal', 10)
        self._move_leg_action_client = ActionClient(self, MoveLeg, 'move_leg')
        self._forcesensor_sub = self.create_subscription(
            ForceSensor, 'force_sensor', self.forcesensor_callback, 10)
        # self._timer = self.create_timer(0.001, lambda: self.get_logger().info('timer'))

        self._leg_stop_condition = (lambda: False)
        self._leg_stoped = False
        self._move_leg_goal_handle = None

        self._forcesensor_msg = None

        self._x_result = 0.0
        self._y_result = 0.0
        self._z_result = 0.0
        self._z_lock = 0.0

        self._x_offset = 0
        self._z_offset = 0.0

        self._timer_start = time.time()
예제 #24
0
    def __init__(self, role_name, ego_vehicle_id, node, avoid_risk=True):
        """
        """
        super(BasicAgent, self).__init__(role_name, ego_vehicle_id, avoid_risk,
                                         node)
        self.node = node
        self._avoid_risk = avoid_risk
        self._proximity_threshold = 10.0  # meters
        self._state = AgentState.NAVIGATING

        if ROS_VERSION == 1:
            cb_group = None
        elif ROS_VERSION == 2:
            cb_group = ReentrantCallbackGroup()

        if self._avoid_risk:
            self._vehicle_id_list = []
            self._lights_id_list = []
            self._objects = []
            self._actors_subscriber = self.node.create_subscriber(
                CarlaActorList,
                "/carla/actor_list",
                self.actors_updated,
                callback_group=cb_group)
            self._objects_subscriber = self.node.create_subscriber(
                ObjectArray, "/carla/{}/objects".format(role_name),
                self.objects_updated)
            self._get_actor_waypoint_client = self.node.create_service_client(
                '/carla_waypoint_publisher/{}/get_actor_waypoint'.format(
                    role_name),
                GetActorWaypoint,
                callback_group=cb_group)
예제 #25
0
    def create_renv_client(self, service_type, service_name):
        cb_group = ReentrantCallbackGroup()
        service_type_for_ros2 = service_type

        result_sub = self.create_renv_subscription(service_type.Response,
                                                   service_name + '_response',
                                                   10,
                                                   without_ros_subscription=True,
                                                   event_prefix='rosservice')

        def request_callback(request_msg, self_=self, service_name=service_name):
            cli = self_.__clients[service_name]
            future = cli.call_async(request_msg)
            future.add_done_callback(lambda future: result_sub(future.result()))
            #rclpy.spin_until_future_complete(self_, future)

            #result = future.result()
            #result_sub(result)
            pass
        
        self.create_renv_publisher(service_type.Request,
                                   service_name + '_request',
                                   10,
                                   callback=request_callback,
                                   without_ros_publisher=True,
                                   action_prefix='rosservice')

        cli = self.create_client(service_type_for_ros2, service_name, callback_group=cb_group)
        self.__clients[service_name] = cli
        return cli
예제 #26
0
 async def play_jtalk(self, t):
     self.cli_speaker = self.create_client(
         SpeakerSrv, 'speaker_srv', callback_group=ReentrantCallbackGroup())
     while not self.cli_speaker.wait_for_service(1.0):
         self.get_logger().info('service "speaker_srv" not found...')
     req = SpeakerSrv.Request()
     req.data = t
     await self.cli_speaker.call_async(req)
예제 #27
0
    def __init__(self):
        super().__init__('hello_action_test_server')

        self.hello_server = ActionServer(self, Hello, 'hello_action',
                execute_callback=self.executeCB,
                callback_group=ReentrantCallbackGroup(),
                goal_callback=self.goalCB,
                cancel_callback=self.cancelCB)
예제 #28
0
 def __init__(self):
     super().__init__('minimal_action_server')
     self._action_server = ActionServer(
         self,
         Fibonacci,
         'fibonacci',
         execute_callback=self.execute_callback,
         callback_group=ReentrantCallbackGroup())
예제 #29
0
    def __init__(self, node):
        super().__init__(ReentrantCallbackGroup())

        self.guard_condition = _rclpy.rclpy_create_guard_condition(node.context.handle)
        self.guard_condition_index = None
        self.guard_is_ready = False

        self.node = node
        self.future = None
예제 #30
0
 def __init__(self):
     super().__init__()
     self.log_subscriber = self.create_subscription(
         Log,
         "/rosout",
         self.log_callback,
         callback_group=ReentrantCallbackGroup())
     self.is_navigation_end = False
     self.is_navigation_start = False