[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 メーリングリストの案内