首页 理论 架构 工程 文档 白皮书 著作 研究 案例 下载 博客 关于 开始使用 →

第61章 服务机器人人工智能

第61章 服务机器人人工智能

61.1 服务机器人人工智能定义

机器人服务主体(Robot Service Subject)是以机器人作为实际服务执行主体,在一定环境中通过自身的感知结构、运动结构、操作结构和服务能力,为特定服务对象完成服务任务的机器主体。

机器人与一般服务设备存在明显区别。一般服务设备主要在确定的设备结构和操作范围内执行任务,而机器人具有更强的环境感知能力、对象识别能力、移动能力、操作能力和环境交互能力,可以根据环境变化调整自身行为。

服务机器人人工智能(Service Robot Individual Artificial Intelligence,SRIAI)是个体人工智能(Individual Artificial Intelligence,ICAI)中的一种机器人型个体,是以一个具体服务机器人作为模拟对象,根据该机器人自身的身份、身体结构、传感器、执行器、环境、服务对象、状态、能力、方法、行为、保护机制、故障状态和修复机制,在计算机中建立对应的机器机器人个体。

其基本模型为:

SRI={ID,T,Body,Sensor,Actuator,Environment,Object,Attribute,State,Relation,Perception,Knowledge,Goal,Capability,Method,Decision,Behavior,Action,Protection,Fault,Diagnosis,Repair,Result,Feedback,Memory,Experience,History,Runtime}SRI= \{ ID, T, Body, Sensor, Actuator, Environment, Object, Attribute, State, Relation, Perception, Knowledge, Goal, Capability, Method, Decision, Behavior, Action, Protection, Fault, Diagnosis, Repair, Result, Feedback, Memory, Experience, History, Runtime \}

其中:

  • IDID:机器人身份;
  • TT:机器人类型;
  • BodyBody:机器人身体结构;
  • SensorSensor:传感器结构;
  • ActuatorActuator:执行器结构;
  • EnvironmentEnvironment:机器人运行环境;
  • ObjectObject:服务对象;
  • StateState:对象和机器人状态;
  • PerceptionPerception:机器人感知结构;
  • KnowledgeKnowledge:服务知识;
  • GoalGoal:服务目标;
  • CapabilityCapability:机器人能力;
  • MethodMethod:服务方法;
  • DecisionDecision:机器人决策;
  • BehaviorBehavior:机器人行为;
  • ActionAction:具体动作;
  • ProtectionProtection:保护机制;
  • FaultFault:故障;
  • DiagnosisDiagnosis:故障诊断;
  • RepairRepair:修复机制;
  • ResultResult:服务结果;
  • FeedbackFeedback:反馈;
  • MemoryMemory:机器人记忆;
  • ExperienceExperience:机器人经验;
  • HistoryHistory:运行历史;
  • RuntimeRuntime:机器人持续运行结构。

服务机器人的核心运行关系为:

环境→感知→对象→状态→目标→能力→方法→决策→行为→动作→结果→反馈环境 \rightarrow 感知 \rightarrow 对象 \rightarrow 状态 \rightarrow 目标 \rightarrow 能力 \rightarrow 方法 \rightarrow 决策 \rightarrow 行为 \rightarrow 动作 \rightarrow 结果 \rightarrow 反馈

而机器人在运行过程中还必须持续进行保护和维护:

运行→检测→风险→保护运行 \rightarrow 检测 \rightarrow 风险 \rightarrow 保护

以及:

异常→故障→诊断→修复→验证→恢复异常 \rightarrow 故障 \rightarrow 诊断 \rightarrow 修复 \rightarrow 验证 \rightarrow 恢复

因此,服务机器人人工智能的完整结构可以概括为:

感知+认知+能力+方法+行为+保护+修复\boxed{ 感知 + 认知 + 能力 + 方法 + 行为 + 保护 + 修复 }


61.2 机器人服务主体

机器人服务主体是服务机器人的核心个体。

一个具体机器人具有唯一身份、身体结构、传感器、执行器、能源、软件状态、能力和运行历史。

机器人服务主体可以表示为:

RobotSubject={ID,Type,Body,Sensor,Actuator,Resource,Capability,State,History}RobotSubject= \{ ID, Type, Body, Sensor, Actuator, Resource, Capability, State, History \}

其中:

Body={Component1,Component2,…,Componentn}Body= \{ Component_1, Component_2, \ldots, Component_n \}

表示机器人身体及其组成部件。

传感器:

Sensor={S1,S2,…,Sn}Sensor= \{ S_1,S_2,\ldots,S_n \}

执行器:

Actuator={A1,A2,…,An}Actuator= \{ A_1,A_2,\ldots,A_n \}

机器人服务能力来源于:

Capability=f(Body,Sensor,Actuator,Knowledge,Method,Resource,State)Capability = f( Body, Sensor, Actuator, Knowledge, Method, Resource, State )

因此:

机器人结构→机器人能力机器人结构 \rightarrow 机器人能力

但机器人能力并不是固定不变的。

例如:

ActuatorFault=1ActuatorFault=1

可能导致:

MovementCapability=0MovementCapability=0

又例如传感器异常:

SensorFault=1SensorFault=1

可能导致:

PerceptionCapability↓PerceptionCapability\downarrow

因此:

RobotCapability=PotentialCapability∩AvailableCapabilityRobotCapability = PotentialCapability \cap AvailableCapability

机器人服务主体不是一个简单的“机器人设备对象”,而是具有结构、状态、能力、目标、行为和历史的完整机器个体。


61.3 环境

环境(Environment)是机器人服务行为发生的外部空间及其对象、状态、事件和变化的集合。

环境可以表示为:

E={Space,Object,State,Event,Resource,Relation,Time}E= \{ Space, Object, State, Event, Resource, Relation, Time \}

其中:

  • SpaceSpace:空间;
  • ObjectObject:环境对象;
  • StateState:环境状态;
  • EventEvent:环境事件;
  • ResourceResource:环境资源;
  • RelationRelation:环境关系;
  • TimeTime:时间。

机器人不是在静态环境中永久运行的。

环境状态可以表示为:

EtE_t

经过事件:

EventtEvent_t

形成:

Et+1E_{t+1}

因此:

Et→Eventt→Et+1E_t \rightarrow Event_t \rightarrow E_{t+1}

机器人必须持续获取环境变化:

Environment→Sensor→PerceptionEnvironment \rightarrow Sensor \rightarrow Perception

并根据环境变化调整行为:

EnvironmentChange→StateChange→DecisionChange→BehaviorChangeEnvironmentChange \rightarrow StateChange \rightarrow DecisionChange \rightarrow BehaviorChange

因此,环境是服务机器人认知和行为的重要外部条件。


61.4 服务对象

服务对象是机器人服务行为实际作用、处理、移动、检测、操作或保护的对象。

服务对象可以表示为:

Object={ID,Type,Attribute,State,Position,Relation,Need,History}Object= \{ ID, Type, Attribute, State, Position, Relation, Need, History \}

其中增加:

PositionPosition

用于表示对象在环境中的位置或空间状态。

机器人与服务对象之间形成关系:

R=(Robot,Object,Service)R= (Robot,Object,Service)

机器人需要首先确定:

是什么对象是什么对象

然后确定:

对象在哪里对象在哪里

再确定:

对象处于什么状态对象处于什么状态

最后确定:

应该如何服务应该如何服务

因此形成:

Environment→Object→Attribute→State→Relation→ServiceNeedEnvironment \rightarrow Object \rightarrow Attribute \rightarrow State \rightarrow Relation \rightarrow ServiceNeed

机器人对对象的服务可能改变对象状态:

ObjectStatet→RobotAction→ObjectStatet+1ObjectState_t \rightarrow RobotAction \rightarrow ObjectState_{t+1}

例如机器人搬运对象:

ObjectPositiont→Move→ObjectPositiont+1ObjectPosition_t \rightarrow Move \rightarrow ObjectPosition_{t+1}

因此,服务对象是机器人服务行为的直接作用目标。


61.5 感知

感知(Perception)是机器人通过传感器获取环境、对象、状态、位置、事件等信息,并将其转换为结构化感知元素的计算过程。

感知可以表示为:

Perception=f(Sensor,Environment,Object,State)Perception= f( Sensor, Environment, Object, State )

感知输入可以包括:

VisualVisual AudioAudio DistanceDistance PositionPosition TemperatureTemperature PressurePressure MotionMotion

等结构化信息。

感知过程为:

Sensor→RawData→PerceptionElement→Object→Attribute→StateSensor \rightarrow RawData \rightarrow PerceptionElement \rightarrow Object \rightarrow Attribute \rightarrow State

因此,机器人不是直接从传感器数据进入行为,而是需要经过结构化认知过程:

传感器数据→感知元素→对象→属性→状态传感器数据 \rightarrow 感知元素 \rightarrow 对象 \rightarrow 属性 \rightarrow 状态

例如机器人检测到前方存在一个对象:

Sensor→Position→ObjectSensor \rightarrow Position \rightarrow Object

进一步判断:

ObjectTypeObjectType

再判断:

ObjectStateObjectState

最后形成:

ServiceObjectServiceObject

这使机器人感知与前面建立的ICAI感知元素理论、对象理论和状态理论保持统一。


61.6 服务能力

机器人服务能力(Robot Service Capability)是机器人在特定环境、对象和状态条件下能够完成服务任务的能力集合。

可以表示为:

CR={Operation,Object,Condition,Method,Resource,Result}C_R= \{ Operation, Object, Condition, Method, Resource, Result \}

机器人能力可以包括:

移动能力移动能力 抓取能力抓取能力 搬运能力搬运能力 检测能力检测能力 识别能力识别能力 交互能力交互能力 操作能力操作能力 导航能力导航能力

等。

但是:

Capability≠AvailableCapabilityCapability \neq AvailableCapability

当前可用能力为:

AvailableCapability=f(Capability,State,Environment,Resource,Object,Condition)AvailableCapability = f( Capability, State, Environment, Resource, Object, Condition )

例如:

MovementCapability=1MovementCapability=1

但如果:

Environment=BlockedEnvironment=Blocked

则当前移动能力可能为:

AvailableMovementCapability=0AvailableMovementCapability=0

因此:

机器人能力→环境条件→对象条件→状态条件→当前可用能力机器人能力 \rightarrow 环境条件 \rightarrow 对象条件 \rightarrow 状态条件 \rightarrow 当前可用能力

这使能力成为动态结构,而不是静态属性。


61.7 服务方法

服务方法(Service Method)是机器人为实现服务目标而采用的结构化处理方式。

方法可以表示为:

MdR={Condition,Object,Process,Action,Result}Md_R= \{ Condition, Object, Process, Action, Result \}

其基本关系为:

Condition→Object→Process→Action→ResultCondition \rightarrow Object \rightarrow Process \rightarrow Action \rightarrow Result

机器人方法选择:

Md∗=f(Goal,Object,State,Capability,Environment,Rule,Resource)Md^* = f( Goal, Object, State, Capability, Environment, Rule, Resource )

例如机器人需要将一个物体从位置 AA 移动到位置 BB

Goal=Move(A,B)Goal=Move(A,B)

机器人需要计算:

ObjectObject CurrentPositionCurrentPosition TargetPositionTargetPosition AvailableMovementCapabilityAvailableMovementCapability EnvironmentEnvironment

然后形成:

Path→MoveMethod→ActionPath \rightarrow MoveMethod \rightarrow Action

如果环境发生变化:

ObstacleDetectedObstacleDetected

则:

Methodt→Recalculate→Methodt+1Method_t \rightarrow Recalculate \rightarrow Method_{t+1}

因此,服务机器人的方法必须能够根据对象、状态和环境条件进行选择和调整。


61.8 服务行为

机器人服务行为(Robot Service Behavior)是机器人根据目标、对象、环境、状态、能力、方法和决策产生的连续动作结构。

可以表示为:

BR=f(Goal,Object,Environment,State,Capability,Method,Decision)B_R= f( Goal, Object, Environment, State, Capability, Method, Decision )

机器人行为可以包括:

MoveMove NavigateNavigate DetectDetect GraspGrasp TransportTransport OperateOperate DeliverDeliver StopStop AvoidAvoid

等。

行为与动作存在区别:

Behavior≠ActionBehavior \neq Action

行为是具有目标和过程结构的行为单元,而动作是具体执行动作。

形成:

Behavior→Action1→Action2→⋯→Actionn→ResultBehavior \rightarrow Action_1 \rightarrow Action_2 \rightarrow \cdots \rightarrow Action_n \rightarrow Result

例如:

搬运行为搬运行为

可以由:

定位→移动→接近→抓取→移动→放置定位 \rightarrow 移动 \rightarrow 接近 \rightarrow 抓取 \rightarrow 移动 \rightarrow 放置

组成。

因此:

ComplexBehavior=Action1+Action2+⋯+ActionnComplexBehavior = Action_1+Action_2+\cdots+Action_n

这使机器人行为能够与前面的ICAI复杂行为理论统一。


61.9 机器人保护

保护(Protection)是服务机器人在运行过程中,根据环境、设备状态、服务对象和风险条件,主动限制或调整自身行为,以避免人员、设备、对象或环境受到损害的计算机制。

保护可以表示为:

Protection=f(Risk,State,Environment,Object,Capability,Behavior)Protection= f( Risk, State, Environment, Object, Capability, Behavior )

机器人风险可以表示为:

Risk=f(Environment,Object,State,Behavior,Capability)Risk= f( Environment, Object, State, Behavior, Capability )

当:

Risk>ThresholdRisk>Threshold

其中 ThresholdThreshold 表示预设风险阈值,则机器人进入保护行为。

例如:

前方存在障碍物前方存在障碍物

形成:

ObstacleDetected→Risk→StopObstacleDetected \rightarrow Risk \rightarrow Stop

或者:

ObstacleDetected→AvoidObstacleDetected \rightarrow Avoid

保护行为可以包括:

StopStop SlowDownSlowDown AvoidAvoid ReturnReturn RestrictOperationRestrictOperation EmergencyActionEmergencyAction

因此:

Protection⊆RobotBehaviorProtection \subseteq RobotBehavior

但保护行为具有特殊目标:

ProtectionGoal=ReduceRiskProtectionGoal = ReduceRisk

即降低运行风险。


61.10 故障与修复

服务机器人在长期运行过程中可能出现:

SensorFaultSensorFault ActuatorFaultActuatorFault PowerFaultPowerFault CommunicationFaultCommunicationFault SoftwareFaultSoftwareFault

以及其他设备或运行异常。

故障结构可以表示为:

Fault={ID,Object,Type,Cause,State,Impact,Time}Fault= \{ ID, Object, Type, Cause, State, Impact, Time \}

机器人故障首先需要检测:

Runtime→Detection→FaultRuntime \rightarrow Detection \rightarrow Fault

然后进行诊断:

Fault→DiagnosisFault \rightarrow Diagnosis

诊断模型为:

Diagnosis=f(Fault,State,Component,History,Rule)Diagnosis = f( Fault, State, Component, History, Rule )

确定故障原因以后选择修复方法:

RepairMethod=f(FaultType,Cause,State,Resource,History)RepairMethod = f( FaultType, Cause, State, Resource, History )

然后执行:

RepairActionRepairAction

最后验证:

Verification=f(State,Capability,TestResult)Verification = f( State, Capability, TestResult )

如果:

Verification=1Verification=1

则:

Repair→RecoveryRepair \rightarrow Recovery

如果:

Verification=0Verification=0

则:

Repair→DiagnosisRepair \rightarrow Diagnosis

重新进行诊断。

完整修复过程为:

Fault→Diagnosis→RepairMethod→RepairAction→Verification→RecoveryFault \rightarrow Diagnosis \rightarrow RepairMethod \rightarrow RepairAction \rightarrow Verification \rightarrow Recovery


61.11 服务机器人运行闭环

将本章主要结构统一起来,可以得到服务机器人核心运行闭环:

Environment→Perception→Object→State→Goal→Capability→Method→Decision→Behavior→Action→Result→FeedbackEnvironment \rightarrow Perception \rightarrow Object \rightarrow State \rightarrow Goal \rightarrow Capability \rightarrow Method \rightarrow Decision \rightarrow Behavior \rightarrow Action \rightarrow Result \rightarrow Feedback

同时增加风险保护:

State+Environment+Behavior→Risk→ProtectionState + Environment + Behavior \rightarrow Risk \rightarrow Protection

发生异常:

Runtime→Detection→Fault→Diagnosis→Repair→Verification→RecoveryRuntime \rightarrow Detection \rightarrow Fault \rightarrow Diagnosis \rightarrow Repair \rightarrow Verification \rightarrow Recovery

三个过程最终统一:

环境
↓
感知
↓
对象
↓
状态
↓
目标
↓
能力
↓
方法
↓
决策
↓
行为
↓
动作
↓
服务结果
↓
反馈
↓
状态更新
↓
继续运行

运行过程中
↓
风险检测
↓
保护

运行异常
↓
故障检测
↓
诊断
↓
修复
↓
验证
↓
恢复运行

因此:

RobotRuntime=ServiceLoop+ProtectionLoop+RepairLoopRobotRuntime = ServiceLoop + ProtectionLoop + RepairLoop


61.12 服务机器人机器个体模型

服务机器人机器个体可以统一表示为:

SRI={ID,T,Body,Sensor,Actuator,Environment,Object,Attribute,State,Relation,Perception,Knowledge,Goal,Capability,Method,Decision,Behavior,Action,Protection,Fault,Diagnosis,Repair,Result,Feedback,Memory,Experience,History,Runtime}SRI= \{ ID, T, Body, Sensor, Actuator, Environment, Object, Attribute, State, Relation, Perception, Knowledge, Goal, Capability, Method, Decision, Behavior, Action, Protection, Fault, Diagnosis, Repair, Result, Feedback, Memory, Experience, History, Runtime \}

其中形成四个主要结构:

第一,感知结构

Environment→Sensor→Perception→Object→StateEnvironment \rightarrow Sensor \rightarrow Perception \rightarrow Object \rightarrow State

第二,服务结构

Goal→Capability→Method→Decision→Behavior→Action→ResultGoal \rightarrow Capability \rightarrow Method \rightarrow Decision \rightarrow Behavior \rightarrow Action \rightarrow Result

第三,保护结构

Environment+State+Risk→ProtectionEnvironment + State + Risk \rightarrow Protection

第四,修复结构

Fault→Diagnosis→Repair→Verification→RecoveryFault \rightarrow Diagnosis \rightarrow Repair \rightarrow Verification \rightarrow Recovery

四者共同组成:

RobotIndividualRuntime=Perception+Service+Protection+Repair\boxed{ RobotIndividualRuntime = Perception + Service + Protection + Repair }


61.13 服务机器人人工智能工程映射

服务机器人人工智能需要进一步转换为实际机器软件中的对象、类、服务、引擎和运行结构。

基本映射为:

服务机器人理论→机器人对象模型→Robot对象→PHP Class→RobotService→RobotEngine→Repository→MySQL→RobotRuntime服务机器人理论 \rightarrow 机器人对象模型 \rightarrow Robot对象 \rightarrow PHP\ Class \rightarrow RobotService \rightarrow RobotEngine \rightarrow Repository \rightarrow MySQL \rightarrow RobotRuntime

核心对象包括:

Robot
↓
机器人主体

Environment
↓
环境对象

Sensor
↓
传感器对象

ServiceObject
↓
服务对象

Perception
↓
感知对象

Capability
↓
能力对象

ServiceMethod
↓
服务方法

Behavior
↓
行为对象

Protection
↓
保护对象

Fault
↓
故障对象

Diagnosis
↓
诊断对象

Repair
↓
修复对象

Feedback
↓
反馈对象

核心引擎可以进一步划分为:

PerceptionEnginePerceptionEngine

负责:

Sensor→Perception→Object→StateSensor \rightarrow Perception \rightarrow Object \rightarrow State CapabilityEngineCapabilityEngine

负责:

State+Environment+Capability→AvailableCapabilityState + Environment + Capability \rightarrow AvailableCapability MethodEngineMethodEngine

负责:

Goal+Object+State+Capability→MethodGoal + Object + State + Capability \rightarrow Method BehaviorEngineBehaviorEngine

负责:

Method+Decision→BehaviorMethod + Decision \rightarrow Behavior ProtectionEngineProtectionEngine

负责:

Risk→ProtectionRisk \rightarrow Protection DiagnosisEngineDiagnosisEngine

负责:

Fault→DiagnosisFault \rightarrow Diagnosis RepairEngineRepairEngine

负责:

Diagnosis→RepairDiagnosis \rightarrow Repair

最终:

RobotRuntime=PerceptionEngine+CapabilityEngine+MethodEngine+BehaviorEngine+ProtectionEngine+RepairEngineRobotRuntime = PerceptionEngine + CapabilityEngine + MethodEngine + BehaviorEngine + ProtectionEngine + RepairEngine


61.14 服务机器人人工智能与设备人工智能的关系

第60章研究服务设备人工智能,第61章进一步研究服务机器人人工智能。

二者存在继承和扩展关系。

服务设备主要形成:

Device→Capability→Method→State→Fault→RepairDevice \rightarrow Capability \rightarrow Method \rightarrow State \rightarrow Fault \rightarrow Repair

服务机器人进一步增加:

Environment+Sensor+Perception+Movement+ObjectInteractionEnvironment + Sensor + Perception + Movement + ObjectInteraction

因此可以表示为:

RobotIndividual⊇DeviceIndividualRobotIndividual \supseteq DeviceIndividual

但这里的“包含”主要表示结构能力上的扩展关系,而不是所有机器人在工程类型系统中都必须简单继承同一个设备类。

服务机器人具有:

DeviceCapability+PerceptionCapability+MovementCapability+InteractionCapabilityDeviceCapability + PerceptionCapability + MovementCapability + InteractionCapability

因此:

RobotCapability=DeviceCapability+PerceptionCapability+EnvironmentInteractionCapabilityRobotCapability = DeviceCapability + PerceptionCapability + EnvironmentInteractionCapability

这使服务机器人从固定设备执行进一步发展为具有环境交互能力的机器个体。


61.15 本章总结

服务机器人人工智能是以具体服务机器人为模拟对象建立的机器个体理论。

其核心结构为:

机器人服务主体+环境+服务对象+感知+能力+方法+行为+保护+修复机器人服务主体 + 环境 + 服务对象 + 感知 + 能力 + 方法 + 行为 + 保护 + 修复

其核心认知行为过程为:

环境→感知→对象→状态→目标→能力→方法→决策→行为→动作→结果→反馈环境 \rightarrow 感知 \rightarrow 对象 \rightarrow 状态 \rightarrow 目标 \rightarrow 能力 \rightarrow 方法 \rightarrow 决策 \rightarrow 行为 \rightarrow 动作 \rightarrow 结果 \rightarrow 反馈

其核心保护过程为:

环境→风险→保护环境 \rightarrow 风险 \rightarrow 保护

其核心修复过程为:

异常→故障→诊断→修复→验证→恢复异常 \rightarrow 故障 \rightarrow 诊断 \rightarrow 修复 \rightarrow 验证 \rightarrow 恢复

最终形成:

环境感知→对象认知→状态判断→能力匹配→方法选择→行为决策→机器人动作→服务结果→反馈\boxed{ 环境感知 \rightarrow 对象认知 \rightarrow 状态判断 \rightarrow 能力匹配 \rightarrow 方法选择 \rightarrow 行为决策 \rightarrow 机器人动作 \rightarrow 服务结果 \rightarrow 反馈 }

同时:

运行→风险检测→自我保护\boxed{ 运行 \rightarrow 风险检测 \rightarrow 自我保护 }

以及:

故障→诊断→修复→验证→恢复\boxed{ 故障 \rightarrow 诊断 \rightarrow 修复 \rightarrow 验证 \rightarrow 恢复 }

三个结构统一为:

服务机器人人工智能=感知+认知+服务+行为+保护+修复\boxed{ 服务机器人人工智能 = 感知 + 认知 + 服务 + 行为 + 保护 + 修复 }

由此,服务机器人人工智能成为ICAI中连接机器身体、环境感知、服务能力、行为执行和自我维护的重要个体类型。

它与前面的服务设备人工智能形成递进关系:

服务设备→服务机器人服务设备 \rightarrow 服务机器人

其中服务设备强调:

设备运行+设备能力+故障+修复设备运行 + 设备能力 + 故障 + 修复

服务机器人进一步增加:

环境感知+对象认知+空间交互+自主行为环境感知 + 对象认知 + 空间交互 + 自主行为

因此,服务机器人机器个体可以在更复杂的环境中形成:

环境→感知→认知→决策→行为→反馈→保护→修复→学习→更新→继续运行环境 \rightarrow 感知 \rightarrow 认知 \rightarrow 决策 \rightarrow 行为 \rightarrow 反馈 \rightarrow 保护 \rightarrow 修复 \rightarrow 学习 \rightarrow 更新 \rightarrow 继续运行

这构成服务机器人人工智能的完整机器个体运行模型。

Leave a Reply

Your email address will not be published. Required fields are marked *