[openrtm-commit:00771] r532 - in branches/work/OpenRTM-aist-Python/OpenRTM_aist: . examples

openrtm @ openrtm.org openrtm @ openrtm.org
2012年 3月 13日 (火) 17:43:30 JST


Author: kurihara
Date: 2012-03-13 17:43:30 +0900 (Tue, 13 Mar 2012)
New Revision: 532

Modified:
   branches/work/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py
   branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/component.conf
   branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/rtc.conf.sample
Log:
[incompat,header/imple,func] The method to create EC has been changed. Now zero or more EC can be attached to RTC. Configuration options for EC have been changed. refs #2351

Modified: branches/work/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py
===================================================================
--- branches/work/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py	2012-03-13 08:18:41 UTC (rev 531)
+++ branches/work/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py	2012-03-13 08:43:30 UTC (rev 532)
@@ -487,39 +487,36 @@
   def initialize(self):
     self._rtcout.RTC_TRACE("initialize()")
 
-    ec_args = self._properties.getProperty("exec_cxt.periodic.type")
-    ec_args += "?"
-    ec_args += "rate="
-    ec_args += self._properties.getProperty("exec_cxt.periodic.rate")
+    # EC creation
+    ec_args_ = []
+    if self.getContextOptions(ec_args_) != RTC.RTC_OK:
+      self._rtcout.RTC_ERROR("Valid EC options are not available. Aborting")
+      return RTC.BAD_PARAMETER
 
-    ec = OpenRTM_aist.Manager.instance().createContext(ec_args)
-    if ec is None:
-      return RTC.RTC_ERROR
+    if self.createContexts(ec_args_) != RTC.RTC_OK:
+      self._rtcout.RTC_ERROR("EC creation failed. Maybe out of resources. Aborting.")
+      return RTC.OUT_OF_RESOURCES
 
-    ec.set_rate(float(self._properties.getProperty("exec_cxt.periodic.rate")))
-    self._eclist.append(ec)
-    ecv = ec.getObjRef()
-    if CORBA.is_nil(ecv):
-      return RTC.RTC_ERROR
 
-    ec.bindComponent(self)
+    # -- entering alive state --
+    toSTR_ = lambda x: " was" if len(x) == 1 else "s were"
+    self._rtcout.RTC_INFO("%d execution context%s created.", 
+                          (len(self._ecMine), toSTR_(self._ecMine)))
 
-    # at least one EC must be attached
-    if len(self._ecMine) == 0:
-      return RTC.PRECONDITION_NOT_MET
-
-    ret = self.on_initialize()
+    ret_ = self.on_initialize()
     self._created = False
-    if ret is not RTC.RTC_OK:
-      return ret
+    if ret_ != RTC.RTC_OK:
+      self._rtcout.RTC_ERROR("on_initialize() failed.")
+      return ret_
 
-    # -- entering alive state --
-    for i in range(len(self._ecMine)):
-      self._rtcout.RTC_DEBUG("EC[%d] starting.", i)
-      self._ecMine[i].start()
+    self._rtcout.RTC_DEBUG("on_initialize() was properly done.")
+    for (idx_, ec_) in enumerate(self._ecMine):
+      self._rtcout.RTC_DEBUG("EC[%d] starting.", idx_)
+      ec_.start()
 
     # ret must be RTC_OK
-    return ret
+    assert(ret_ == RTC.RTC_OK)
+    return ret_
 
 
   ##
@@ -1142,7 +1139,13 @@
     ret = RTC.RTC_ERROR
     try:
       self.preOnInitialize(0)
+      self._rtcout.RTC_DEBUG("Calling onInitialize().")
       ret = self.onInitialize()
+      if ret != RTC.RTC_OK:
+        self._rtcout.RTC_ERROR("onInitialize() returns an ERROR (%d)", ret._v)
+      else:
+        self._rtcout.RTC_DEBUG("onInitialize() succeeded.")
+
     except:
       self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception())
       ret = RTC.RTC_ERROR
@@ -1151,11 +1154,15 @@
                                               "default")
 
     if self._configsets.haveConfig(active_set):
+      self._rtcout.RTC_DEBUG("Active configuration set: %s exists.", active_set)
+      self._configsets.activateConfigurationSet(active_set)
       self._configsets.update(active_set)
-      self._configsets.activateConfigurationSet(active_set)
+      self._rtcout.RTC_INFO("Initial active configuration set is %s.", active_set)
     else:
+      self._rtcout.RTC_DEBUG("Active configuration set: %s does not exists.", active_set)
+      self._configsets.activateConfigurationSet("default")
       self._configsets.update("default")
-      self._configsets.activateConfigurationSet("default")
+      self._rtcout.RTC_INFO("Initial active configuration set is default-set.")
 
     self.postOnInitialize(0,ret)
     return ret
@@ -4679,6 +4686,203 @@
     self._actionListeners.ecaction_[OpenRTM_aist.ExecutionContextActionListenerType.EC_DETACHED].notify(ec_id)
     return
 
+
+  # ReturnCode_t getInheritedECOptions(coil::Properties& default_opts);
+  def getInheritedECOptions(self, default_opts):
+    inherited_opts_ = ["sync_transition",
+                       "sync_activation",
+                       "sync_deactivation",
+                       "sync_reset",
+                       "transition_timeout",
+                       "activation_timeout",
+                       "deactivation_timeout",
+                       "reset_timeout"]
+
+    p_ = self._properties.findNode("exec_cxt")
+    if not p_:
+      self._rtcout.RTC_WARN("No exec_cxt option found.")
+      return RTC.RTC_ERROR
+
+    self._rtcout.RTC_DEBUG("Copying inherited EC options.")
+    for opt_ in inherited_opts_:
+        if p_.findNode(opt_):
+          self._rtcout.RTC_PARANOID("Option %s exists.", opt_)
+          default_opts.setProperty(opt_, p_.getProperty(opt_))
+
+    return RTC.RTC_OK
+
+  
+  ##
+  # @brief getting individual EC options from RTC's configuration file
+  #
+  # ReturnCode_t
+  # getPrivateContextOptions(std::vector<coil::Properties>& ec_args);
+  def getPrivateContextOptions(self, ec_args):
+    self._rtcout.RTC_TRACE("getPrivateContextOptions()")
+    # Component specific multiple EC option available
+    if not self._properties.findNode("execution_contexts"):
+      self._rtcout.RTC_DEBUG("No component specific EC specified.")
+      return RTC.RTC_ERROR
+
+    args_ = self._properties.getProperty("execution_contexts")
+    ecs_tmp_ = [s.strip() for s in args_.split(",")]
+    if not ecs_tmp_:
+      return RTC.RTC_ERROR
+    self._rtcout.RTC_DEBUG("Component specific e EC option available,")
+    self._rtcout.RTC_DEBUG("%s", args_)
+
+    default_opts_ = OpenRTM_aist.Properties()
+    self.getInheritedECOptions(default_opts_)
+    for ec_tmp in ecs_tmp_:
+      if OpenRTM_aist.normalize([ec_tmp]) == "none":
+        self._rtcout.RTC_INFO("EC none. EC will not be bound to the RTC.")
+        ec_args = []
+        return RTC.RTC_OK
+
+      type_and_name_ = [s.strip() for s in ec_tmp.split("(")]
+      if len(type_and_name) > 2:
+        self._rtcout.RTC_DEBUG("Invalid EC type specified: %s", ec_tmp)
+        continue
+
+      p_ = default_opts;
+
+      # create EC's properties
+      p_.setProperty("type",type_and_name_[0])
+      self._rtcout.RTC_DEBUG("p_type: %s", p_.getProperty("type"))
+      p_type_ = self._properties.findNode("ec." + p.getProperty("type"))
+      if p_type_:
+        self._rtcout.RTC_DEBUG("p_type props:")
+        self._rtcout.RTC_DEBUG(p_type_)
+        p_.mergeProperties(p_type_)
+
+      else:
+        self._rtcout.RTC_DEBUG("p_type none")
+
+      # EC name specified
+      self._rtcout.RTC_DEBUG("size: %d, name: %s",
+                             (len(type_and_name_), type_and_name_[1]))
+
+      if len(type_and_name_) == 2 and type_and_name_[1][len(type_and_name_[1]) - 1] == ')':
+        del type_and_name_[1][len(type_and_name_[1]) - 1]
+        p_.setProperty("name", type_and_name_[1])
+        p_name_ = self._properties.findNode("ec." + p.getProperty("name"))
+        if p_name_:
+          self._rtcout.RTC_DEBUG("p_name props:")
+          self._rtcout.RTC_DEBUG(p_name_)
+          p_.mergeProperties(p_name_)
+
+        else:
+          self._rtcout.RTC_DEBUG("p_name none")
+
+      ec_args.append(p_)
+      self._rtcout.RTC_DEBUG("New EC properties stored:")
+      self._rtcout.RTC_DEBUG(p_)
+
+    return RTC.RTC_OK
+
+
+  ##
+  # @brief getting global EC options from rtc.conf
+  #
+  # ReturnCode_t
+  # getGlobalContextOptions(coil::Properties& global_ec_props);
+  def getGlobalContextOptions(self, global_ec_props):
+    # exec_cxt option is obsolete
+    self._rtcout.RTC_TRACE("getGlobalContextOptions()")
+
+    prop_ = self._properties.findNode("exec_cxt.periodic")
+    if not prop_:
+      self._rtcout.RTC_WARN("No global EC options found.")
+      return RTC.RTC_ERROR
+
+    self._rtcout.RTC_DEBUG("Global EC options are specified.")
+    self._rtcout.RTC_DEBUG(prop_)
+    self.getInheritedECOptions(global_ec_props)
+    global_ec_props.mergeProperties(prop_)
+    return RTC.RTC_OK
+
+
+  ##
+  # @brief getting EC options
+  #
+  # ReturnCode_t
+  # getContextOptions(std::vector<coil::Properties>& ec_args);
+  def getContextOptions(self, ec_args):
+    self._rtcout.RTC_DEBUG("getContextOptions()")
+    global_props_ = OpenRTM_aist.Properties()
+    ret_global_  = self.getGlobalContextOptions(global_props_)
+    ret_private_ = self.getPrivateContextOptions(ec_args)
+
+    # private(X), global(X) -> error
+    # private(O), global(O) -> private
+    # private(X), global(O) -> global
+    # private(O), global(X) -> private
+    if ret_global_ != RTC.RTC_OK and ret_private_ != RTC.RTC_OK:
+      return RTC.RTC_ERROR
+
+    if ret_global_ == RTC.RTC_OK and ret_private_ != RTC.RTC_OK:
+      ec_args.append(global_props_)
+
+    return RTC.RTC_OK
+
+
+  ##
+  # @brief fiding existing EC from the factory
+  #
+  # ReturnCode_t findExistingEC(coil::Properties& ec_arg,
+  #                             RTC::ExecutionContextBase*& ec);
+  def findExistingEC(self, ec_arg, ec):
+    eclist_ = OpenRTM_aist.ExecutionContextFactory.instance().createdObjects()
+    for ec_ in eclist_:
+      if ec_.getProperties().getProperty("type") == ec_arg.getProperty("type") and \
+            ec_.getProperties().getProperty("name") == ec_arg.getProperty("name"):
+        ec[0] = ec_
+        return RTC.RTC_OK
+
+    return RTC.RTC_ERROR
+
+
+  ##
+  # @brief creating, initializing and binding context
+  #
+  # ReturnCode_t createContexts(std::vector<coil::Properties>& ec_args);
+  def createContexts(self, ec_args):
+    ret_ = RTC.RTC_OK
+    avail_ec_ = OpenRTM_aist.ExecutionContextFactory.instance().getIdentifiers()
+
+    for ec_arg_ in ec_args:
+      ec_type_ = ec_arg_.getProperty("type")
+      ec_name_ = ec_arg_.getProperty("name")
+      ec_ = [None]
+      if ec_name_ and self.findExistingEC(ec_arg_, ec_) == RTC.RTC_OK:
+        # if EC's name exists, find existing EC in the factory.
+        self._rtcout.RTC_DEBUG("EC: type=%s, name=%s already exists.",
+                               (ec_type_, ec_name_))
+      else:
+        # If EC's name is empty or no existing EC, create new EC.
+        if not ec_type_ in avail_ec_:
+          self._rtcout.RTC_WARN("EC %s is not available.", ec_type_)
+          self._rtcout.RTC_DEBUG("Available ECs: %s",
+                                 OpenRTM_aist.flatten(avail_ec_))
+          continue
+        ec_[0] = OpenRTM_aist.ExecutionContextFactory.instance().createObject(ec_type_)
+
+      if not ec_[0]:
+        # EC factory available but creation failed. Resource full?
+        self._rtcout.RTC_ERROR("EC (%s) creation failed.", ec_type_)
+        self._rtcout.RTC_DEBUG("Available EC list: %s",
+                               OpenRTM_aist.flatten(avail_ec_))
+        ret_ = RTC.RTC_ERROR
+        continue
+
+      self._rtcout.RTC_DEBUG("EC (%s) created.", ec_type_)
+      
+      ec_[0].init(ec_arg_)
+      self._eclist.append(ec_[0])
+      ec_[0].bindComponent(self)
+
+    return ret_
+
     
   ##
   # @if jp
@@ -4775,3 +4979,39 @@
 
 
 # RtcBase = RTObject_impl
+"""
+    ec_args = self._properties.getProperty("exec_cxt.periodic.type")
+    ec_args += "?"
+    ec_args += "rate="
+    ec_args += self._properties.getProperty("exec_cxt.periodic.rate")
+
+    ec = OpenRTM_aist.Manager.instance().createContext(ec_args)
+    if ec is None:
+      return RTC.RTC_ERROR
+
+    ec.set_rate(float(self._properties.getProperty("exec_cxt.periodic.rate")))
+    self._eclist.append(ec)
+    ecv = ec.getObjRef()
+    if CORBA.is_nil(ecv):
+      return RTC.RTC_ERROR
+
+    ec.bindComponent(self)
+
+    # at least one EC must be attached
+    if len(self._ecMine) == 0:
+      return RTC.PRECONDITION_NOT_MET
+
+    ret = self.on_initialize()
+    self._created = False
+    if ret is not RTC.RTC_OK:
+      return ret
+
+    # -- entering alive state --
+    for i in range(len(self._ecMine)):
+      self._rtcout.RTC_DEBUG("EC[%d] starting.", i)
+      self._ecMine[i].start()
+
+    # ret must be RTC_OK
+    return ret
+"""
+

Modified: branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/component.conf
===================================================================
--- branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/component.conf	2012-03-13 08:18:41 UTC (rev 531)
+++ branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/component.conf	2012-03-13 08:43:30 UTC (rev 532)
@@ -15,12 +15,128 @@
 
 #============================================================
 # execution context options
+#============================================================
 #
+# Periodic type ExecutionContext
+#
+# Other availabilities in OpenRTM-aist
+#
+# - ExtTrigExecutionContext: External triggered EC. It is embedded in
+#                            OpenRTM library.
+# - OpenHRPExecutionContext: External triggred paralell execution
+#                            EC. It is embedded in OpenRTM
+#                            library. This is usually used with
+#                            OpenHRP3.
+# - RTPreemptEC:             Real-time execution context for Linux
+#                            RT-preemptive pathed kernel.
+# - ArtExecutionContext:     Real-time execution context for ARTLinux
+#                            (http://sourceforge.net/projects/art-linux/)
 # exec_cxt.periodic.type: [specify periodic type EC]
+
+#
+# The execution cycle of ExecutionContext
+#
 # exec_cxt.periodic.rate: [Hz]
+
+#
+# Event driven execution context (not implemented yet)
+#
 # exec_cxt.event_driven.type: [specify event driven type EC]
 #
 
+#
+# State transition mode settings YES/NO
+#
+# Default: YES (efault setting is recommended.)
+#
+# Activating, deactivating and resetting of RTC performs state
+# transition. Some execution contexts might execute main logic in
+# different thread. If these flags are set to YES, activation,
+# deactivation and resetting will be performed synchronously. In other
+# words, if these flags are YES,
+# activation/deactivation/resetting-operations must be returned after
+# state transition completed.
+#
+# "sync_transition" will set synchronous transition flags to all other
+# synchronous transition flags sync_activation/deactivation/reset.
+#
+# exec_cxt.sync_transition: YES
+# exec_cxt.sync_activation: YES
+# exec_cxt.sync_deactivation: YES
+# exec_cxt.sync_reset: YES
+
+#
+# Timeout of synchronous state transition [s]
+#
+# Default: 0.5 [s]
+#
+# When synchronous transition flags are set to YES, the following
+# timeout settings are valid. If "transition_timeout" is set, the
+# value will be set to all other timeout of activation/deactivation
+# and resetting
+#
+# exec_cxt.transition_timeout: 0.5
+# exec_cxt.activation_timeout: 0.5
+# exec_cxt.deactivation_timeout: 0.5
+# exec_cxt.reset_timeout: 0.5
+
+#
+# Specifying Execution Contexts
+#
+# Default: No default
+#
+# execution_contexts: None or <EC0>,<EC1>,...
+# <EC?>: ECtype(ECname)
+#
+# RTC can be attached with zero or more Execution
+# Contexts. "execution_contexts" option specifies RTC-specific
+# attached ECs and its name. If the option is not specified, the
+# internal global options or rtc.conf options related to EC will be
+# used. If None is specified, no EC will be created.
+#
+# Availabilities in OpenRTM-aist
+#
+# - ExtTrigExecutionContext: External triggered EC. It is embedded in
+#                            OpenRTM library.
+# - OpenHRPExecutionContext: External triggred paralell execution
+#                            EC. It is embedded in OpenRTM
+#                            library. This is usually used with
+#                            OpenHRP3.
+# - RTPreemptEC:             Real-time execution context for Linux
+#                            RT-preemptive pathed kernel.
+# - ArtExecutionContext:     Real-time execution context for ARTLinux
+#                            (http://sourceforge.net/projects/art-linux/)
+#
+# execution_contexts: PeriodicExecutionContext(pec1000Hz), \
+#                     PeriodicExecutionContext(pec500Hz)
+
+#
+# EC specific configurations
+#
+# Default: No default
+#
+# Each EC can have its own configuration. Individual configuration can
+# be specified by using EC type name or EC instance name. Attached ECs
+# would be specified in execution_context option like <EC type
+# name>(<EC instance name>), ...  EC specific option can be specified
+# as follows.
+#
+# ec.<EC type name>.<option>
+# ec.<EC instance name>.<option>
+#
+# Example:
+# ec.PeriodicExecutionContext.sync_transition: NO
+# ec.pec1000Hz.rate: 1000
+# ec.pec1000Hz.synch_transition: YES
+# ec.pec1000Hz.transition_timeout: 0.5
+# ec.pec500Hz.rate: 500
+# ec.pec500Hz.synch_activation: YES
+# ec.pec500Hz.synch_deactivation: NO
+# ec.pec500Hz.synch_reset: YES
+# ec.pec500Hz.activation_timeout: 0.5
+# ec.pec500Hz.reset_timeout: 0.5
+
+
 #============================================================
 # port configurations
 #
@@ -72,10 +188,10 @@
 # configuration parameters
 #
 # conf.[configuration_set_name].[parameter_name]:
-# conf.constraint.[parameter_name]:
+# conf.__widget__.[parameter_name]: GUI control type for RTSystemEditor
+# conf.__constraint__.[parameter_name]: Constraints for the value
 #
 #
-#
 
 #------------------------------------------------------------
 # configuration sets
@@ -83,12 +199,49 @@
 # conf.[configuration_set_name].[parameter_name]:
 
 #------------------------------------------------------------
-# constraint condition of configuration parameter 
+# GUI control option for RTSystemEditor
+#------------------------------------------------------------
 #
-# substitute variable name: "x"
+# Available GUI control options [__widget__]:
 #
-# available constraint formats
+# conf.__widget__.[widget_name]:
 #
+# available wdget name:
+# - text:          text box [default].
+# - slider.<step>: Horizontal slider. <step> is step for the slider.
+#                  A range constraints option is required. 
+# - spin:          Spin button. A range constraitns option is required.
+# - radio:         Radio button. An enumeration constraints is required.
+# - checkbox:      Checkbox control. An enumeration constraints is
+#                  required. The parameter has to be able to accept a
+#                  comma separated list.
+# - orderd_list:   Orderd list control.  An enumeration constraint is
+#                  required. The parameter has to be able to accept a
+#                  comma separated list. In this control, Enumerated
+#                  elements can appear one or more times in the given list.
+# examples:
+# conf.__widget__.int_param0: slider.10
+# conf.__widget__.int_param1: spin
+# conf.__widget__.double_param0: slider.10
+# conf.__widget__.double_param1: text
+# conf.__widget__.str_param0: radio
+# conf.__widget__.vector_param0: checkbox
+# conf.__widget__.vector_param1: orderd_list
+
+#
+# Available GUI control constraint options [__constraints__]:
+#
+# conf.__constraints__.[parameter_name]:
+#
+# available constraints:
+# - none:         blank
+# - direct value: 100 (constant value)
+# - range:        <, >, <=, >= can be used.
+# - enumeration:  (enum0, enum1, ...)
+# - array:        <constraints0>, ,constraints1>, ... for only array value
+# - hash:         {key0: value0, key1:, value0, ...}
+#
+# available constraint formats (substitute variable name: "x"):
 # - No constraint              : (blank)
 # - Direct                     : 100 (read only)
 # - 100 or over                : x >= 100
@@ -101,4 +254,12 @@
 # - Array                      : x < 1, x < 10, x > 100
 # - Hash                       : {key0: 100<x<200, key1: x>=100}
 #
-# conf.constraint.[parameter_name]:
+# examples:
+# conf.__constraints__.int_param0: 0<=x<=150
+# conf.__constraints__.int_param1: 0<=x<=1000
+# conf.__constraints__.double_param0: 0<=x<=100
+# conf.__constraints__.double_param1:
+# conf.__constraints__.str_param0: (default,mode0,mode1)
+# conf.__constraints__.vector_param0: (dog,monky,pheasant,cat)
+# conf.__constraints__.vector_param1: (pita,gora,switch)
+

Modified: branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/rtc.conf.sample
===================================================================
--- branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/rtc.conf.sample	2012-03-13 08:18:41 UTC (rev 531)
+++ branches/work/OpenRTM-aist-Python/OpenRTM_aist/examples/rtc.conf.sample	2012-03-13 08:43:30 UTC (rev 532)
@@ -9,7 +9,7 @@
 #          Advanced Industrial Science and Technology (AIST), Japan
 #      All rights reserved.
 #
-# $Id: rtc.conf.sample 1900 2010-02-27 14:28:48Z n-ando $
+# $Id: rtc.conf.sample 2312 2012-02-07 02:55:32Z n-ando $
 # 
 #----------------------------------------------------------------------
 
@@ -45,6 +45,7 @@
 #   process will be shutdown in case no rtc exists on periodic check.
 manager.shutdown_on_nortcs: YES
 manager.shutdown_auto: YES
+manager.auto_shutdown_duration: 10.0
 
 #============================================================
 # CORBA configuration
@@ -117,6 +118,35 @@
 #
 corba.nameservice.replace_endpoint: NO
 
+#
+# IOR alternate IIOP addresses
+#
+# This option adds alternate IIOP addresses into the IOR Profiles.
+# IOR can include additional endpoints for a servant. It is almost
+# same as "corba.endpoints" option, but this option does not create
+# actual endpoint on the ORB. (corba.endpoints try to create actual
+# endpoint, and if it cannot be created, error will be returned.)
+# This option just add alternate IIOP endpoint address information to
+# an IOR.
+#
+# This option can be used when RTCs are located inside of NAT or
+# router.  Generally speaking, RTCs in a private network cannot
+# connect to RTCs in the global network, because global client cannot
+# reach to private servants. However, if route (or NAT) is properly
+# configured for port forwarding, global RTCs can reach to RTCs in
+# private network.
+#
+# A setting example is as follows.
+# 1) Configure your router properly for port-forwarding.
+#    ex. global 2810 port is forwarded to private 2810
+# 2) Set the following options in rtc.conf
+#  corba.nameservers: my.global.nameserver.com <- name server in global network
+#  corba.endpoints: :2810 <- actual port number
+#  corba.additional_ior_addresses: w.x.y.z:2810 <- routers global IP addr/port
+# 3) Launch global RTCs and private RTC, and connect them.
+#
+corba.alternate_iiop_addresses: addr:port
+
 #============================================================
 # Naming configurations
 #============================================================
@@ -273,6 +303,8 @@
 #    from 0-11. 
 # %M minute as a number (0-59) 
 # %p locale's equivalent of AM or PM 
+# %Q millisecond as a number (0-999) from ver 1.1
+# %q microsecond as a number (0-999) from ver 1.1
 # %S second as a number (0-59) 
 # %U week of the year, sunday as the first day 
 # %w weekday as a decimal (0-6, sunday=0) 
@@ -318,6 +350,22 @@
 #
 logger.log_level: NORMAL
 
+#
+# Logger's clock time
+#
+# logger.clock_type option specifies a type of clock to be used for
+# timestamp of log message. Now these three types are available.
+#
+# - system: system clock [default]
+# - logical: logical clock
+# - adjusted: adjusted clock
+#
+# To use logical time clock, call and set time by the following
+# function in somewhere.
+# coil::ClockManager::instance().getClock("logical").settime()
+#
+logger.clock_type: system
+
 #============================================================
 # Timer configuration
 #============================================================
@@ -337,9 +385,76 @@
 #
 # Periodic type ExecutionContext
 #
+# Other availabilities in OpenRTM-aist
+#
+# - ExtTrigExecutionContext: External triggered EC. It is embedded in
+#                            OpenRTM library.
+# - OpenHRPExecutionContext: External triggred paralell execution
+#                            EC. It is embedded in OpenRTM
+#                            library. This is usually used with
+#                            OpenHRP3.
+# - RTPreemptEC:             Real-time execution context for Linux
+#                            RT-preemptive pathed kernel.
+# - ArtExecutionContext:     Real-time execution context for ARTLinux
+#                            (http://sourceforge.net/projects/art-linux/)
+#
 exec_cxt.periodic.type: PeriodicExecutionContext
+# exec_cxt.event_driven_type: to be implemented
 
 #
 # The execution cycle of ExecutionContext
 #
 exec_cxt.periodic.rate: 1000
+
+#
+# State transition mode settings YES/NO
+#
+# Default: YES (efault setting is recommended.)
+#
+# Activating, deactivating and resetting of RTC makes state
+# transition.  Some execution contexts execute main logic in different
+# thread.  If these flags set to YES, activation, deactivation and
+# resetting will be performed synchronously.  In other words, if these
+# flags are YES, activation/deactivation/resetting-operations must be
+# returned after state transition completed.
+#
+# "synchronous_transition" will set synchronous transition flags to
+# all other synchronous transition flags
+# (synchronous_activation/deactivation/resetting.
+#
+exec_cxt.sync_transition: YES
+exec_cxt.sync_activation: YES
+exec_cxt.sync_deactivation: YES
+exec_cxt.sync_reset: YES
+
+#
+# Timeout of synchronous state transition [s]
+#
+# Default: 1.0 [s]
+#
+# When synchronous transition flags are set to YES, the following
+# timeout settings are valid. If "transition_timeout" is set, the
+# value will be set to all other timeout of activation/deactivation
+# and resetting
+#
+exec_cxt.transition_timeout: 0.5
+exec_cxt.activation_timeout: 0.5
+exec_cxt.deactivation_timeout: 0.5
+exec_cxt.reset_timeout: 0.5
+
+
+
+#============================================================
+# SDO service settings
+#============================================================
+#
+# SDO service provider settings
+#
+sdo.service.provider.available_services: [read only]
+sdo.service.provider.enabled_services: ALL
+sdo.service.provider.providing_services: [read only]
+#
+# SDO service consumer settings
+#
+sdo.service.consumer.available_services: [read only]
+sdo.service.consumer.enabled_services: ALL



openrtm-commit メーリングリストの案内