Bug 567799 - [Robotics, ROS2] Lifecycle operations are incomplete
- Add ON_SHUTDOWN to FunctionKind enum in profile
- Regenerate static profile
- Enable invocation of multiple functions for a lifecycle transition
- Create a separate timer for each activity (currently, two activities with different periods lead to undefined results)
- Stop timers in case of de-activation and shutdown
- Adapt test code
- Delete accidental test file ros_out
Change-Id: Ib0085f1876014eeab50bd6968a81ff03a63b4ec6
Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/FunctionUtils.java b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/FunctionUtils.java
index dd1b0e8..8e4542c 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/FunctionUtils.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.core/src/org/eclipse/papyrus/robotics/core/utils/FunctionUtils.java
@@ -1,5 +1,8 @@
package org.eclipse.papyrus.robotics.core.utils;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.papyrus.robotics.profile.robotics.components.Activity;
import org.eclipse.papyrus.robotics.profile.robotics.components.ActivityPort;
import org.eclipse.papyrus.robotics.profile.robotics.functions.Function;
@@ -55,14 +58,15 @@
* a specific kind (typically a handler)
* @return the found function or null
*/
- public static Behavior getFunction(Activity activity, FunctionKind kind) {
+ public static List<Behavior> getFunctions(Activity activity, FunctionKind kind) {
+ List<Behavior> behaviorList = new ArrayList<Behavior>();
for (Function fct : activity.getFunctions()) {
if (fct.getKind() == kind && fct.getBase_Class() instanceof Behavior) {
Behavior base = (Behavior) fct.getBase_Class();
- return base;
+ behaviorList.add(base);
}
}
- return null;
+ return behaviorList;
}
/**
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore
index ade2674..367799b 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.ecore
@@ -124,11 +124,12 @@
<eLiterals name="ON_CONFIGURE"/>
<eLiterals name="ON_ACTIVATE" value="1"/>
<eLiterals name="ON_DEACTIVATE" value="2"/>
- <eLiterals name="ON_CLEANUP" value="3"/>
- <eLiterals name="ON_ERROR" value="4"/>
- <eLiterals name="HANDLER" value="5"/>
- <eLiterals name="PERIODIC" value="6"/>
- <eLiterals name="MANUALLY_CALLED" value="7"/>
+ <eLiterals name="ON_SHUTDOWN" value="3"/>
+ <eLiterals name="ON_CLEANUP" value="4"/>
+ <eLiterals name="ON_ERROR" value="5"/>
+ <eLiterals name="HANDLER" value="6"/>
+ <eLiterals name="PERIODIC" value="7"/>
+ <eLiterals name="MANUALLY_CALLED" value="8"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Function" eSuperTypes="platform:/plugin/org.eclipse.papyrus.robotics.bpc.profile/model/bpc.ecore#//Block">
<eStructuralFeatures xsi:type="ecore:EReference" name="arguments" ordered="false"
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel
index 9c55624..2b7d9b6 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.genmodel
@@ -123,6 +123,7 @@
<genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="robotics.ecore#//functions/FunctionKind/ON_CONFIGURE"/>
<genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="robotics.ecore#//functions/FunctionKind/ON_ACTIVATE"/>
<genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="robotics.ecore#//functions/FunctionKind/ON_DEACTIVATE"/>
+ <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="robotics.ecore#//functions/FunctionKind/ON_SHUTDOWN"/>
<genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="robotics.ecore#//functions/FunctionKind/ON_CLEANUP"/>
<genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="robotics.ecore#//functions/FunctionKind/ON_ERROR"/>
<genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="robotics.ecore#//functions/FunctionKind/HANDLER"/>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation
index 21a82f2..4b3998e 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.notation
@@ -4626,13 +4626,17 @@
<element xmi:type="uml:EnumerationLiteral" href="robotics.profile.uml#_yWtY4GMVEeq3RO23rtQA0g"/>
<layoutConstraint xmi:type="notation:Location" xmi:id="_Pq-YoWMgEeqnwOKXIadaoQ"/>
</children>
+ <children xmi:type="notation:Shape" xmi:id="_Dq-10Ax3EeuIedt4csBL7g" type="EnumerationLiteral_LiteralLabel">
+ <element xmi:type="uml:EnumerationLiteral" href="robotics.profile.uml#_DqGsEAx3EeuIedt4csBL7g"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dq-10Qx3EeuIedt4csBL7g"/>
+ </children>
<styles xmi:type="notation:TitleStyle" xmi:id="_2ZoGMksjEeqojt4A_a-YAw"/>
<styles xmi:type="notation:SortingStyle" xmi:id="_2ZoGM0sjEeqojt4A_a-YAw"/>
<styles xmi:type="notation:FilteringStyle" xmi:id="_2ZoGNEsjEeqojt4A_a-YAw"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_2ZoGNUsjEeqojt4A_a-YAw"/>
</children>
<element xmi:type="uml:Enumeration" href="robotics.profile.uml#_2ZbR4EsjEeqojt4A_a-YAw"/>
- <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2ZnfIEsjEeqojt4A_a-YAw" x="60" y="320" width="201" height="181"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2ZnfIEsjEeqojt4A_a-YAw" x="60" y="320" width="201" height="221"/>
</children>
<styles xmi:type="notation:StringValueStyle" xmi:id="_c4BzkS6LEei0V9-WLHIyvg" name="diagram_compatibility_version" stringValue="1.4.0"/>
<styles xmi:type="notation:DiagramStyle" xmi:id="_c4Bzki6LEei0V9-WLHIyvg"/>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml
index e230cb1..598eaa7 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/model/robotics.profile.uml
@@ -838,6 +838,7 @@
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_gUyEgGMVEeq3RO23rtQA0g" name="ON_CONFIGURE"/>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_HwrRkEskEeqojt4A_a-YAw" name="ON_ACTIVATE"/>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_MKB3cEskEeqojt4A_a-YAw" name="ON_DEACTIVATE"/>
+ <ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_DqGsEAx3EeuIedt4csBL7g" name="ON_SHUTDOWN"/>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_uSadAGMVEeq3RO23rtQA0g" name="ON_CLEANUP"/>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_Hsmz4GMgEeqnwOKXIadaoQ" name="ON_ERROR"/>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="_NdFawEskEeqojt4A_a-YAw" name="HANDLER"/>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/FunctionKind.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/FunctionKind.java
index 9c1226f..ccf9ab7 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/FunctionKind.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/FunctionKind.java
@@ -52,6 +52,14 @@
* @ordered
*/
ON_DEACTIVATE(2, "ON_DEACTIVATE", "ON_DEACTIVATE"), /**
+ * The '<em><b>ON SHUTDOWN</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #ON_SHUTDOWN_VALUE
+ * @generated
+ * @ordered
+ */
+ ON_SHUTDOWN(3, "ON_SHUTDOWN", "ON_SHUTDOWN"), /**
* The '<em><b>ON CLEANUP</b></em>' literal object.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -59,7 +67,7 @@
* @generated
* @ordered
*/
- ON_CLEANUP(3, "ON_CLEANUP", "ON_CLEANUP"), /**
+ ON_CLEANUP(4, "ON_CLEANUP", "ON_CLEANUP"), /**
* The '<em><b>ON ERROR</b></em>' literal object.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -67,7 +75,7 @@
* @generated
* @ordered
*/
- ON_ERROR(4, "ON_ERROR", "ON_ERROR"), //$NON-NLS-1$ //$NON-NLS-2$
+ ON_ERROR(5, "ON_ERROR", "ON_ERROR"), //$NON-NLS-1$ //$NON-NLS-2$
/**
* The '<em><b>HANDLER</b></em>' literal object.
@@ -77,7 +85,7 @@
* @generated
* @ordered
*/
- HANDLER(5, "HANDLER", "HANDLER"), //$NON-NLS-1$ //$NON-NLS-2$
+ HANDLER(6, "HANDLER", "HANDLER"), //$NON-NLS-1$ //$NON-NLS-2$
/**
* The '<em><b>PERIODIC</b></em>' literal object.
@@ -87,7 +95,7 @@
* @generated
* @ordered
*/
- PERIODIC(6, "PERIODIC", "PERIODIC"), /**
+ PERIODIC(7, "PERIODIC", "PERIODIC"), /**
* The '<em><b>MANUALLY CALLED</b></em>' literal object.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -95,7 +103,7 @@
* @generated
* @ordered
*/
- MANUALLY_CALLED(7, "MANUALLY_CALLED", "MANUALLY_CALLED"); //$NON-NLS-1$ //$NON-NLS-2$
+ MANUALLY_CALLED(8, "MANUALLY_CALLED", "MANUALLY_CALLED"); //$NON-NLS-1$ //$NON-NLS-2$
/**
* The '<em><b>ON CONFIGURE</b></em>' literal value.
@@ -131,6 +139,17 @@
public static final int ON_DEACTIVATE_VALUE = 2;
/**
+ * The '<em><b>ON SHUTDOWN</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #ON_SHUTDOWN
+ * @model
+ * @generated
+ * @ordered
+ */
+ public static final int ON_SHUTDOWN_VALUE = 3;
+
+ /**
* The '<em><b>ON CLEANUP</b></em>' literal value.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -139,7 +158,7 @@
* @generated
* @ordered
*/
- public static final int ON_CLEANUP_VALUE = 3;
+ public static final int ON_CLEANUP_VALUE = 4;
/**
* The '<em><b>ON ERROR</b></em>' literal value.
@@ -150,7 +169,7 @@
* @generated
* @ordered
*/
- public static final int ON_ERROR_VALUE = 4;
+ public static final int ON_ERROR_VALUE = 5;
/**
* The '<em><b>HANDLER</b></em>' literal value.
@@ -161,7 +180,7 @@
* @generated
* @ordered
*/
- public static final int HANDLER_VALUE = 5;
+ public static final int HANDLER_VALUE = 6;
/**
* The '<em><b>PERIODIC</b></em>' literal value.
@@ -172,7 +191,7 @@
* @generated
* @ordered
*/
- public static final int PERIODIC_VALUE = 6;
+ public static final int PERIODIC_VALUE = 7;
/**
* The '<em><b>MANUALLY CALLED</b></em>' literal value.
@@ -183,7 +202,7 @@
* @generated
* @ordered
*/
- public static final int MANUALLY_CALLED_VALUE = 7;
+ public static final int MANUALLY_CALLED_VALUE = 8;
/**
* An array of all the '<em><b>Function Kind</b></em>' enumerators.
@@ -196,6 +215,7 @@
ON_CONFIGURE,
ON_ACTIVATE,
ON_DEACTIVATE,
+ ON_SHUTDOWN,
ON_CLEANUP,
ON_ERROR,
HANDLER,
@@ -260,6 +280,7 @@
case ON_CONFIGURE_VALUE: return ON_CONFIGURE;
case ON_ACTIVATE_VALUE: return ON_ACTIVATE;
case ON_DEACTIVATE_VALUE: return ON_DEACTIVATE;
+ case ON_SHUTDOWN_VALUE: return ON_SHUTDOWN;
case ON_CLEANUP_VALUE: return ON_CLEANUP;
case ON_ERROR_VALUE: return ON_ERROR;
case HANDLER_VALUE: return HANDLER;
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/impl/FunctionsPackageImpl.java b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/impl/FunctionsPackageImpl.java
index ec5ff7e..8db5c0a 100644
--- a/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/impl/FunctionsPackageImpl.java
+++ b/plugins/customization/org.eclipse.papyrus.robotics.profile/src-gen/org/eclipse/papyrus/robotics/profile/robotics/functions/impl/FunctionsPackageImpl.java
@@ -352,6 +352,7 @@
addEEnumLiteral(functionKindEEnum, FunctionKind.ON_CONFIGURE);
addEEnumLiteral(functionKindEEnum, FunctionKind.ON_ACTIVATE);
addEEnumLiteral(functionKindEEnum, FunctionKind.ON_DEACTIVATE);
+ addEEnumLiteral(functionKindEEnum, FunctionKind.ON_SHUTDOWN);
addEEnumLiteral(functionKindEEnum, FunctionKind.ON_CLEANUP);
addEEnumLiteral(functionKindEEnum, FunctionKind.ON_ERROR);
addEEnumLiteral(functionKindEEnum, FunctionKind.HANDLER);
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.cpp
index d95259e..42f508b 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.cpp
@@ -86,8 +86,7 @@
*/
AddClient::AddClient(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("AddClient", options) {
- useAdd_client_ = create_client < simple::srv::AddServiceDef
- > ("AddServiceDef");
+ useAdd_client_ = create_client<simple::srv::AddServiceDef>("AddServiceDef");
}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.h b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.h
index 26aaf93..d189cc2 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.h
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient.h
@@ -49,7 +49,7 @@
/**
*
*/
- rclcpp::TimerBase::SharedPtr timer_;
+ rclcpp::TimerBase::SharedPtr timer_CallAdd_;
/**
*
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient_main.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient_main.cpp
index 0e425d2..e257457 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient_main.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addClientCompdef/AddClient_main.cpp
@@ -11,8 +11,8 @@
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
- auto addclient = std::make_shared < addClientCompdef::AddClient
- > (addclient_options);
+ auto addclient = std::make_shared<addClientCompdef::AddClient>(
+ addclient_options);
RCLCPP_INFO(addclient->get_logger(), "AddClient has been initialized");
@@ -20,12 +20,26 @@
[addclient](const rclcpp_lifecycle::State&) {
addclient->fOnActivate();
// periodic execution (1s) using a wall timer
- addclient->timer_ = addclient->create_wall_timer(1s,
+ addclient->timer_CallAdd_ = addclient->create_wall_timer(1s,
std::bind(&addClientCompdef::AddClient::fPeriodic,
addclient));
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
}
);
+ addclient->register_on_deactivate(
+ [addclient](const rclcpp_lifecycle::State&) {
+ // stop timer
+ addclient->timer_CallAdd_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
+ addclient->register_on_shutdown(
+ [addclient](const rclcpp_lifecycle::State&) {
+ // stop timer
+ addclient->timer_CallAdd_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
rclcpp::executors::MultiThreadedExecutor executor;
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer.cpp
index 061f018..6a0125f 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer.cpp
@@ -29,10 +29,10 @@
const simple::srv::AddServiceDef::Request::SharedPtr /*in*/request,
const simple::srv::AddServiceDef::Response::SharedPtr /*in*/response) {
response->sum = request->x + request->y;
- RCLCPP_INFO(get_logger(), "request: x=%ld, y=%ld", (long int) request->x,
- (long int) request->y);
+ RCLCPP_INFO(get_logger(), "request: x=%ld, y=%ld", (long int ) request->x,
+ (long int ) request->y);
RCLCPP_INFO(get_logger(), "sending back response: [%ld]",
- (long int) response->sum);
+ (long int ) response->sum);
return true;
}
@@ -42,10 +42,9 @@
*/
AddServer::AddServer(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("AddServer", options) {
- addSvc_srv_ = create_service < simple::srv::AddServiceDef
- > ("AddServiceDef", std::bind(&addServerCompdef::AddServer::fAdder,
- (AddServer*) this, std::placeholders::_1,
- std::placeholders::_2));
+ addSvc_srv_ = create_service<simple::srv::AddServiceDef>("AddServiceDef",
+ std::bind(&addServerCompdef::AddServer::fAdder, (AddServer*) this,
+ std::placeholders::_1, std::placeholders::_2));
}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer_main.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer_main.cpp
index 9dccc3e..3479f86 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer_main.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/clientServer/src-gen/addServerCompdef/AddServer_main.cpp
@@ -10,8 +10,8 @@
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
- auto addserver = std::make_shared < addServerCompdef::AddServer
- > (addserver_options);
+ auto addserver = std::make_shared<addServerCompdef::AddServer>(
+ addserver_options);
RCLCPP_INFO(addserver->get_logger(), "AddServer has been initialized");
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
index b96430b..87d77b7 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
@@ -40,7 +40,7 @@
*/
PeriodicPublisher::PeriodicPublisher(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("PeriodicPublisher", options) {
- pMap_pub_ = create_publisher < simple::msg::Map > ("pMap", 1);
+ pMap_pub_ = create_publisher<simple::msg::Map>("pMap", 1);
// directly activate a publisher
pMap_pub_->on_activate();
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.h b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.h
index a59e322..4c3fbd3 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.h
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher.h
@@ -45,7 +45,7 @@
/**
*
*/
- rclcpp::TimerBase::SharedPtr timer_;
+ rclcpp::TimerBase::SharedPtr timer_Activity1_;
/**
*
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp
index c371efc..12ce185 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp
@@ -11,9 +11,9 @@
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
- auto periodicpublisher = std::make_shared<
- periodicPublisherCompdef::PeriodicPublisher>(
- periodicpublisher_options);
+ auto periodicpublisher = std::make_shared
+ < periodicPublisherCompdef::PeriodicPublisher
+ > (periodicpublisher_options);
RCLCPP_INFO(periodicpublisher->get_logger(),
"PeriodicPublisher has been initialized");
@@ -21,7 +21,7 @@
periodicpublisher->register_on_activate(
[periodicpublisher](const rclcpp_lifecycle::State&) {
// periodic execution (250ms) using a wall timer
- periodicpublisher->timer_ =
+ periodicpublisher->timer_Activity1_ =
periodicpublisher->create_wall_timer(250ms,
std::bind(
&periodicPublisherCompdef::PeriodicPublisher::fPublishing,
@@ -29,6 +29,20 @@
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
}
);
+ periodicpublisher->register_on_deactivate(
+ [periodicpublisher](const rclcpp_lifecycle::State&) {
+ // stop timer
+ periodicpublisher->timer_Activity1_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
+ periodicpublisher->register_on_shutdown(
+ [periodicpublisher](const rclcpp_lifecycle::State&) {
+ // stop timer
+ periodicpublisher->timer_Activity1_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
periodicpublisher->declareParameters();
periodicpublisher->initParameterVars();
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber.cpp
index bbd98c1..b53a71d 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber.cpp
@@ -41,11 +41,10 @@
*/
Subscriber::Subscriber(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("Subscriber", options) {
- rMap_sub_ =
- create_subscription < simple::msg::Map
- > ("rMap", rclcpp::QoS(rclcpp::KeepLast(100)).best_effort(), std::bind(
- &subscriberCompdef::Subscriber::fListening,
- (Subscriber*) this, std::placeholders::_1));
+ rMap_sub_ = create_subscription<simple::msg::Map>("rMap",
+ rclcpp::QoS(rclcpp::KeepLast(100)).best_effort(),
+ std::bind(&subscriberCompdef::Subscriber::fListening,
+ (Subscriber*) this, std::placeholders::_1));
}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber_main.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber_main.cpp
index 47cb456..c182eb2 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber_main.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe/src-gen/subscriberCompdef/Subscriber_main.cpp
@@ -10,8 +10,8 @@
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
- auto subscriber = std::make_shared<subscriberCompdef::Subscriber>(
- subscriber_options);
+ auto subscriber = std::make_shared < subscriberCompdef::Subscriber
+ > (subscriber_options);
RCLCPP_INFO(subscriber->get_logger(), "Subscriber has been initialized");
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
index 3099f50..ad5d61d 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.cpp
@@ -26,7 +26,7 @@
*/
PeriodicPublisher::PeriodicPublisher(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("PeriodicPublisher", options) {
- pMap_pub_ = create_publisher < simple::msg::Map > ("pMap", 1);
+ pMap_pub_ = create_publisher<simple::msg::Map>("pMap", 1);
// directly activate a publisher
pMap_pub_->on_activate();
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.h b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.h
index 3e643cb..2e1b442 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.h
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher.h
@@ -45,7 +45,7 @@
/**
*
*/
- rclcpp::TimerBase::SharedPtr timer_;
+ rclcpp::TimerBase::SharedPtr timer_Activity1_;
/**
*
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp
index c7448e8..7dde710 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/periodicPublisherCompdef/PeriodicPublisher_main.cpp
@@ -21,7 +21,7 @@
periodicpublisher->register_on_activate(
[periodicpublisher](const rclcpp_lifecycle::State&) {
// periodic execution (250ms) using a wall timer
- periodicpublisher->timer_ =
+ periodicpublisher->timer_Activity1_ =
periodicpublisher->create_wall_timer(250ms,
std::bind(
&periodicPublisherCompdef::PeriodicPublisher_impl::fPublishing,
@@ -29,6 +29,20 @@
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
}
);
+ periodicpublisher->register_on_deactivate(
+ [periodicpublisher](const rclcpp_lifecycle::State&) {
+ // stop timer
+ periodicpublisher->timer_Activity1_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
+ periodicpublisher->register_on_shutdown(
+ [periodicpublisher](const rclcpp_lifecycle::State&) {
+ // stop timer
+ periodicpublisher->timer_Activity1_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
periodicpublisher->declareParameters();
periodicpublisher->initParameterVars();
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp
index 0a26510..1f0e5b0 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/publishSubscribe_extcode/src-gen/subscriberCompdef/Subscriber.cpp
@@ -31,11 +31,10 @@
*/
Subscriber::Subscriber(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("Subscriber", options) {
- rMap_sub_ =
- create_subscription < simple::msg::Map
- > ("rMap", rclcpp::QoS(rclcpp::KeepLast(100)).best_effort(), std::bind(
- &subscriberCompdef::Subscriber_impl::fListening,
- (Subscriber_impl*) this, std::placeholders::_1));
+ rMap_sub_ = create_subscription<simple::msg::Map>("rMap",
+ rclcpp::QoS(rclcpp::KeepLast(100)).best_effort(),
+ std::bind(&subscriberCompdef::Subscriber_impl::fListening,
+ (Subscriber_impl*) this, std::placeholders::_1));
}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.cpp
index 054295e..5e967b6 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.cpp
@@ -26,7 +26,7 @@
// Register the component with class_loader.
// This acts as a sort of entry point, allowing the component to be discoverable when its library
// is being loaded into a running process.
-RCLCPP_COMPONENTS_REGISTER_NODE (sendReceive::SendClient)
+RCLCPP_COMPONENTS_REGISTER_NODE(sendReceive::SendClient)
// End of Include declaration (body)
@@ -54,7 +54,7 @@
*/
SendClient::SendClient(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("SendClient", options) {
- map_send_ = create_publisher < simple::msg::Map > ("map", 1);
+ map_send_ = create_publisher<simple::msg::Map>("map", 1);
// directly activate a publisher
map_send_->on_activate();
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.h b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.h
index f23138f..e852bd3 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.h
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient.h
@@ -44,7 +44,7 @@
/**
*
*/
- rclcpp::TimerBase::SharedPtr timer_;
+ rclcpp::TimerBase::SharedPtr timer_Request_;
/**
*
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient_main.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient_main.cpp
index f69040e..83b01e1 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient_main.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendClient_main.cpp
@@ -11,20 +11,34 @@
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
- auto sendclient = std::make_shared<sendReceive::SendClient>(
- sendclient_options);
+ auto sendclient = std::make_shared < sendReceive::SendClient
+ > (sendclient_options);
RCLCPP_INFO(sendclient->get_logger(), "SendClient has been initialized");
sendclient->register_on_activate(
[sendclient](const rclcpp_lifecycle::State&) {
// periodic execution (1s) using a wall timer
- sendclient->timer_ = sendclient->create_wall_timer(1s,
+ sendclient->timer_Request_ = sendclient->create_wall_timer(1s,
std::bind(&sendReceive::SendClient::fSendMap,
sendclient));
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
}
);
+ sendclient->register_on_deactivate(
+ [sendclient](const rclcpp_lifecycle::State&) {
+ // stop timer
+ sendclient->timer_Request_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
+ sendclient->register_on_shutdown(
+ [sendclient](const rclcpp_lifecycle::State&) {
+ // stop timer
+ sendclient->timer_Request_->cancel();
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ );
rclcpp::executors::MultiThreadedExecutor executor;
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer.cpp
index aee7ea8..3e51a78 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer.cpp
@@ -21,7 +21,7 @@
// Register the component with class_loader.
// This acts as a sort of entry point, allowing the component to be discoverable when its library
// is being loaded into a running process.
-RCLCPP_COMPONENTS_REGISTER_NODE (sendReceive::SendServer)
+RCLCPP_COMPONENTS_REGISTER_NODE(sendReceive::SendServer)
// End of Include declaration (body)
@@ -46,11 +46,10 @@
*/
SendServer::SendServer(rclcpp::NodeOptions /*in*/options) :
rclcpp_lifecycle::LifecycleNode("SendServer", options) {
- map_recv_ =
- create_subscription < simple::msg::Map
- > ("map", rclcpp::QoS(rclcpp::KeepLast(100)).best_effort(), std::bind(
- &sendReceive::SendServer::fReceive,
- (SendServer*) this, std::placeholders::_1));
+ map_recv_ = create_subscription<simple::msg::Map>("map",
+ rclcpp::QoS(rclcpp::KeepLast(100)).best_effort(),
+ std::bind(&sendReceive::SendServer::fReceive, (SendServer*) this,
+ std::placeholders::_1));
}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer_main.cpp b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer_main.cpp
index dc38a40..5bb604a 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer_main.cpp
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/expectedResult/sendReceive/src-gen/sendReceive/SendServer_main.cpp
@@ -10,8 +10,8 @@
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
- auto sendserver = std::make_shared<sendReceive::SendServer>(
- sendserver_options);
+ auto sendserver = std::make_shared < sendReceive::SendServer
+ > (sendserver_options);
RCLCPP_INFO(sendserver->get_logger(), "SendServer has been initialized");
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/ros_out b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/ros_out
deleted file mode 100644
index 4e7bfb7..0000000
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen.tests/ros_out
+++ /dev/null
@@ -1,99 +0,0 @@
-$ ros2 node info /amcl
-/amcl
- Subscribers:
- /clock: rosgraph_msgs/msg/Clock
- /initialpose: geometry_msgs/msg/PoseWithCovarianceStamped
- /map: nav_msgs/msg/OccupancyGrid
- /parameter_events: rcl_interfaces/msg/ParameterEvent
- Publishers:
- /amcl/transition_event: lifecycle_msgs/msg/TransitionEvent
- /amcl_pose: geometry_msgs/msg/PoseWithCovarianceStamped
- /parameter_events: rcl_interfaces/msg/ParameterEvent
- /particlecloud: geometry_msgs/msg/PoseArray
- /rosout: rcl_interfaces/msg/Log
- Service Servers:
- /amcl/change_state: lifecycle_msgs/srv/ChangeState
- /amcl/describe_parameters: rcl_interfaces/srv/DescribeParameters
- /amcl/get_available_states: lifecycle_msgs/srv/GetAvailableStates
- /amcl/get_available_transitions: lifecycle_msgs/srv/GetAvailableTransitions
- /amcl/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
- /amcl/get_parameters: rcl_interfaces/srv/GetParameters
- /amcl/get_state: lifecycle_msgs/srv/GetState
- /amcl/get_transition_graph: lifecycle_msgs/srv/GetAvailableTransitions
- /amcl/list_parameters: rcl_interfaces/srv/ListParameters
- /amcl/set_parameters: rcl_interfaces/srv/SetParameters
- /amcl/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
- /reinitialize_global_localization: std_srvs/srv/Empty
- /request_nomotion_update: std_srvs/srv/Empty
- Service Clients:
-
- Action Servers:
-
- Action Clients:
-
-$ ros2 node info /bt_navigator
-/bt_navigator
- Subscribers:
- /clock: rosgraph_msgs/msg/Clock
- /goal_pose: geometry_msgs/msg/PoseStamped
- /parameter_events: rcl_interfaces/msg/ParameterEvent
- /tf: tf2_msgs/msg/TFMessage
- /tf_static: tf2_msgs/msg/TFMessage
- Publishers:
- /bt_navigator/transition_event: lifecycle_msgs/msg/TransitionEvent
- /parameter_events: rcl_interfaces/msg/ParameterEvent
- /rosout: rcl_interfaces/msg/Log
- Service Servers:
- /bt_navigator/change_state: lifecycle_msgs/srv/ChangeState
- /bt_navigator/describe_parameters: rcl_interfaces/srv/DescribeParameters
- /bt_navigator/get_available_states: lifecycle_msgs/srv/GetAvailableStates
- /bt_navigator/get_available_transitions: lifecycle_msgs/srv/GetAvailableTransitions
- /bt_navigator/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
- /bt_navigator/get_parameters: rcl_interfaces/srv/GetParameters
- /bt_navigator/get_state: lifecycle_msgs/srv/GetState
- /bt_navigator/get_transition_graph: lifecycle_msgs/srv/GetAvailableTransitions
- /bt_navigator/list_parameters: rcl_interfaces/srv/ListParameters
- /bt_navigator/set_parameters: rcl_interfaces/srv/SetParameters
- /bt_navigator/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
- Service Clients:
-
- Action Servers:
- /NavigateToPose: nav2_msgs/action/NavigateToPose
- Action Clients:
-
-$ ros2 node info /controller_server
-/controller_server
- Subscribers:
- /clock: rosgraph_msgs/msg/Clock
- /odom: nav_msgs/msg/Odometry
- /parameter_events: rcl_interfaces/msg/ParameterEvent
- Publishers:
- /cmd_vel: geometry_msgs/msg/Twist
- /controller_server/transition_event: lifecycle_msgs/msg/TransitionEvent
- /cost_cloud: sensor_msgs/msg/PointCloud
- /evaluation: dwb_msgs/msg/LocalPlanEvaluation
- /local_plan: nav_msgs/msg/Path
- /marker: visualization_msgs/msg/MarkerArray
- /parameter_events: rcl_interfaces/msg/ParameterEvent
- /received_global_plan: nav_msgs/msg/Path
- /rosout: rcl_interfaces/msg/Log
- /transformed_global_plan: nav_msgs/msg/Path
- Service Servers:
- /controller_server/change_state: lifecycle_msgs/srv/ChangeState
- /controller_server/describe_parameters: rcl_interfaces/srv/DescribeParameters
- /controller_server/get_available_states: lifecycle_msgs/srv/GetAvailableStates
- /controller_server/get_available_transitions: lifecycle_msgs/srv/GetAvailableTransitions
- /controller_server/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
- /controller_server/get_parameters: rcl_interfaces/srv/GetParameters
- /controller_server/get_state: lifecycle_msgs/srv/GetState
- /controller_server/get_transition_graph: lifecycle_msgs/srv/GetAvailableTransitions
- /controller_server/list_parameters: rcl_interfaces/srv/ListParameters
- /controller_server/set_parameters: rcl_interfaces/srv/SetParameters
- /controller_server/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
- Service Clients:
-
- Action Servers:
-
- Action Clients:
-
-
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/ComponentTransformations.xtend b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/ComponentTransformations.xtend
index 5238ad4..88e068a 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/ComponentTransformations.xtend
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/ComponentTransformations.xtend
@@ -23,7 +23,6 @@
import org.eclipse.papyrus.robotics.profile.robotics.components.Activity
import org.eclipse.papyrus.robotics.profile.robotics.components.ComponentDefinition
import org.eclipse.papyrus.robotics.profile.robotics.functions.Function
-import org.eclipse.papyrus.robotics.ros2.codegen.RosTransformations
import org.eclipse.papyrus.robotics.ros2.codegen.utils.ApplyProfiles
import org.eclipse.papyrus.robotics.ros2.codegen.utils.ProjectTools
import org.eclipse.papyrus.uml.tools.utils.StereotypeUtil
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/CreateMain.xtend b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/CreateMain.xtend
index c350464..ac40586 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/CreateMain.xtend
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/component/CreateMain.xtend
@@ -1,15 +1,15 @@
/*****************************************************************************
* Copyright (c) 2020 CEA LIST.
- *
- *
+ *
+ *
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
- *
+ *
* Contributors:
* Ansgar Radermacher ansgar.radermacher@cea.fr
- *
+ *
*****************************************************************************/
package org.eclipse.papyrus.robotics.ros2.codegen.component
@@ -17,7 +17,7 @@
import org.eclipse.uml2.uml.Class
import static extension org.eclipse.papyrus.robotics.core.utils.ParameterUtils.*
-import static extension org.eclipse.papyrus.robotics.core.utils.FunctionUtils.getFunction
+import static extension org.eclipse.papyrus.robotics.core.utils.FunctionUtils.getFunctions
import static extension org.eclipse.papyrus.robotics.ros2.codegen.utils.ActivityUtils.*
import static extension org.eclipse.papyrus.uml.tools.utils.StereotypeUtil.applyApp
import static extension org.eclipse.papyrus.uml.tools.utils.StereotypeUtil.apply
@@ -50,76 +50,151 @@
main.apply(ManualGeneration)
val include = main.applyApp(Include);
include.body = component.createMainCode.toString
- }
-
+ }
+
def static createMainCode(Class component) '''
«val instRef = component.instName + "->"»
+ «val onConfigure = component.onLifecycleEvent(instRef, FunctionKind.ON_CONFIGURE)»
«val onActivate = component.onActivate(instRef)»
+ «val onDeActivate = component.onQuitActive(instRef, FunctionKind.ON_DEACTIVATE)»
+ «val onShutdown = component.onQuitActive(instRef, FunctionKind.ON_SHUTDOWN)»
+ «val onCleanup = component.onLifecycleEvent(instRef, FunctionKind.ON_CLEANUP)»
«val compClassName = component.qualifiedName + component.postfix»
#include "«component.nearestPackage.name»/«component.name»«component.postfix».h"
-
+
«IF component.hasPeriodicActivities»
using namespace std::chrono_literals;
«ENDIF»
«component.createTimer»
// declare options
rclcpp::NodeOptions «component.instName»_options;
-
+
int main(int argc, char **argv) {
rclcpp::init(argc, argv);
-
+
auto «component.instName» = std::make_shared<«compClassName»>(«component.instName»_options);
-
+
RCLCPP_INFO(«instRef»get_logger(), "«component.name» has been initialized");
-
-««« «component.initializeParameters(component)»
+
+ «IF onConfigure.length > 0»
+ «instRef»register_on_configure(
+ «onConfigure»
+ );
+ «ENDIF»
«IF onActivate.length > 0»
«instRef»register_on_activate(
«onActivate»
);
«ENDIF»
- «IF component.allParameters.size > 0»
- «instRef»declareParameters();
- «instRef»initParameterVars();
+ «IF onDeActivate.length > 0»
+ «instRef»register_on_deactivate(
+ «onDeActivate»
+ );
«ENDIF»
-
+ «IF onShutdown.length > 0»
+ «instRef»register_on_shutdown(
+ «onShutdown»
+ );
+ «ENDIF»
+ «IF onCleanup.length > 0»
+ «instRef»register_on_cleanup(
+ «onCleanup»
+ );
+ «ENDIF»
+ «IF component.allParameters.size > 0»
+ «instRef»declareParameters();
+ «instRef»initParameterVars();
+ «ENDIF»
+
rclcpp::executors::MultiThreadedExecutor executor;
-
+
executor.add_node(«instRef»get_node_base_interface());
-
+
executor.spin();
rclcpp::shutdown();
}
'''
def static void createTimer(Class component) {
- if (component.functionsToActivate.size > 0) {
- val timerBase = ElementUtils.getQualifiedElementFromRS(component, "ros2Library::rclcpp::timer::TimerBase") as Type;
- val timer = component.createOwnedAttribute("timer_", timerBase);
- Helpers.useSharedPtr(timer)
+ for (activity : component.activities) {
+ val period = activity.period
+ if (period !== null) {
+ val timerBase = ElementUtils.getQualifiedElementFromRS(component,
+ "ros2Library::rclcpp::timer::TimerBase") as Type;
+ val timer = component.createOwnedAttribute('''timer_«activity.base_Class.name»_''', timerBase);
+ Helpers.useSharedPtr(timer)
+ }
}
}
/**
- * If an activity is associated with a port publishing port, call
- * this activity when the component (node) gets activated
+ * Create a function to call during the state transition towards a certain
+ * state. Calls the function with the passed "kind"
+ */
+ def static onLifecycleEvent(Class component, String instRef, FunctionKind kind) '''
+ «FOR activity : component.activities»
+ «val associatedFcts = activity.getFunctions(kind)»
+ «IF associatedFcts.size > 0»
+ [«component.instName»](const rclcpp_lifecycle::State&) {
+ «FOR associatedFct : associatedFcts»
+ «instRef»«associatedFct.name»();
+ «ENDFOR»
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ «ENDIF»
+ «ENDFOR»
+ '''
+
+ /**
+ * Create a function to call during the state transition towards activation.
+ * In particular, call the functions with "kind" ON_ACTIVATE and start periodic timers
*/
def static onActivate(Class component, String instRef) '''
- «FOR activity : component.functionsToActivate»
+ «FOR activity : component.activities»
+ «val activityCl = activity.base_Class»
«val period = activity.period»
- «val activateFct = activity.getFunction(FunctionKind.ON_ACTIVATE)»
- «val periodicFct = activity.getFunction(FunctionKind.PERIODIC)»
- [«component.instName»](const rclcpp_lifecycle::State&) {
- «IF activateFct !== null»
- «instRef»«activateFct.name»();
- «ENDIF»
- «IF period !== null && periodicFct !== null»
- // periodic execution («period») using a wall timer
- «instRef»timer_ = «instRef»create_wall_timer(«period»,
- std::bind(&«component.nearestPackage.name»::«component.name»«component.postfix»::«periodicFct.name», «component.instName»));
- «ENDIF»
- return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
- }
+ «val activateFcts = activity.getFunctions(FunctionKind.ON_ACTIVATE)»
+ «val periodicFcts = activity.getFunctions(FunctionKind.PERIODIC)»
+ «IF (period !== null && periodicFcts.size > 0) || activateFcts.size > 0»
+ [«component.instName»](const rclcpp_lifecycle::State&) {
+ «FOR activateFct : activateFcts»
+ «instRef»«activateFct.name»();
+ «ENDFOR»
+ «IF period !== null && periodicFcts.size > 0»
+ // periodic execution («period») using a wall timer
+ «FOR periodicFct : periodicFcts»
+ «instRef»timer_«activityCl.name»_ = «instRef»create_wall_timer(«period»,
+ std::bind(&«component.nearestPackage.name»::«component.name»«component.postfix»::«periodicFct.name», «component.instName»));
+ «ENDFOR»
+ «ENDIF»
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ «ENDIF»
+ «ENDFOR»
+ '''
+
+ /**
+ * Create a function to call during the state transition leaving the active state (either shutdown or deactivate).
+ * In particular, call the functions with "kind" ON_DEACTIVATE and stop periodic timers
+ */
+ def static onQuitActive(Class component, String instRef, FunctionKind kind) '''
+ «FOR activity : component.activities»
+ «val activityCl = activity.base_Class»
+ «val period = activity.period»
+ «val associatedFcts = activity.getFunctions(kind)»
+ «val periodicFcts = activity.getFunctions(FunctionKind.PERIODIC)»
+ «IF (period !== null && periodicFcts.size > 0) || associatedFcts.size > 0»
+ [«component.instName»](const rclcpp_lifecycle::State&) {
+ «FOR activateFct : associatedFcts»
+ «instRef»«activateFct.name»();
+ «ENDFOR»
+ «IF period !== null && periodicFcts.size > 0»
+ // stop timer
+ «instRef»timer_«activityCl.name»_->cancel();
+ «ENDIF»
+ return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
+ }
+ «ENDIF»
«ENDFOR»
'''
@@ -129,4 +204,4 @@
def static getInstName(Class component) {
return component.name.toLowerCase
}
-}
\ No newline at end of file
+}
diff --git a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/ActivityUtils.xtend b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/ActivityUtils.xtend
index 32af946..c42dcf9 100644
--- a/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/ActivityUtils.xtend
+++ b/plugins/ros2/org.eclipse.papyrus.robotics.ros2.codegen/src/org/eclipse/papyrus/robotics/ros2/codegen/utils/ActivityUtils.xtend
@@ -21,11 +21,10 @@
import org.eclipse.uml2.uml.util.UMLUtil
import org.eclipse.papyrus.robotics.profile.robotics.components.PeriodicTimer
import java.util.List
-import org.eclipse.emf.common.util.UniqueEList
import org.eclipse.papyrus.robotics.profile.robotics.functions.FunctionKind
import org.eclipse.papyrus.robotics.ros2.codegen.component.CodeSkeleton
import org.eclipse.papyrus.robotics.profile.robotics.components.ActivityPort
-import static extension org.eclipse.papyrus.robotics.core.utils.FunctionUtils.getFunction
+import static extension org.eclipse.papyrus.robotics.core.utils.FunctionUtils.getFunctions
class ActivityUtils {
@@ -95,36 +94,15 @@
return ""
}
- def static functionsToActivate(Class component) {
- val list = new UniqueEList<Activity>()
- for (activity : component.activities) {
- if (activity.getFunction(FunctionKind.ON_ACTIVATE) !== null ||
- activity.getFunction(FunctionKind.PERIODIC) !== null) {
- list.add(activity)
- }
- }
- return list
- }
-
def static hasPeriodicActivities(Class component) {
for (activity : component.activities) {
- if (activity.getFunction(FunctionKind.PERIODIC) !== null) {
+ if (activity.getFunctions(FunctionKind.PERIODIC).size > 0) {
return true;
}
}
return false
}
- def static activitesToDeActivate(Class component) {
- val list = new UniqueEList<Activity>()
- for (activity : component.activities) {
- if (activity.getFunction(FunctionKind.ON_DEACTIVATE) !== null) {
- list.add(activity)
- }
- }
- return list
- }
-
/**
* return period length of an activity or null, if non-specified
*/