Skip to content

Commit 1d6f37b

Browse files
authored
Adding Trick sim examples of simple ROS2 publisher and subscriber functionality (#2010)
1 parent a5cdaf8 commit 1d6f37b

File tree

10 files changed

+296
-0
lines changed

10 files changed

+296
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
trick.real_time_enable()
2+
trick.exec_set_software_frame(0.1)
3+
trick.itimer_enable()
4+
5+
simControlPanel = trick.SimControlPanel()
6+
trick.add_external_application(simControlPanel)
7+
8+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include "sim_objects/default_trick_sys.sm"
2+
##include "trick_publisher/include/PubNode.hh"
3+
4+
class TrickPublisherSimObject : public Trick::SimObject
5+
{
6+
public:
7+
PubNode publish_node;
8+
9+
TrickPublisherSimObject()
10+
{
11+
("default_data") publish_node.defaults();
12+
("initialization") publish_node.init_ros();
13+
(1.0, "scheduled") publish_node.yellIntoTheVoid();
14+
("shutdown") publish_node.shutItDown();
15+
}
16+
};
17+
18+
TrickPublisherSimObject TrickPublisher;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
TRICK_CXXFLAGS += -g -I./
2+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/
3+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rclcpp
4+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcl
5+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcutils
6+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rmw
7+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcl_yaml_param_parser
8+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rosidl_runtime_c
9+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rosidl_typesupport_interface
10+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcpputils
11+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/builtin_interfaces
12+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rosidl_runtime_cpp
13+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/tracetools
14+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcl_interfaces
15+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/libstatistics_collector
16+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/statistics_msgs
17+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/std_msgs
18+
19+
TRICK_CFLAGS=${TRICK_CXXFLAGS}
20+
TRICK_USER_LINK_LIBS += -L/opt/ros/humble/lib -L/opt/ros/humble/share
21+
TRICK_USER_LINK_LIBS += -lrclcpp
22+
TRICK_USER_LINK_LIBS += -lrcl
23+
TRICK_USER_LINK_LIBS += -lrmw
24+
TRICK_USER_LINK_LIBS += -lrcutils
25+
TRICK_USER_LINK_LIBS += -lrcpputils
26+
TRICK_USER_LINK_LIBS += -lstd_msgs__rosidl_typesupport_cpp
27+
TRICK_USER_LINK_LIBS += -lrmw_fastrtps_cpp
28+
TRICK_USER_LINK_LIBS += -lrmw_fastrtps_dynamic_cpp
29+
TRICK_USER_LINK_LIBS += -ltracetools
30+
31+
TRICK_EXCLUDE += /opt/ros/humble/include/
32+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#ifndef __PUBNODE_HH_
2+
#define __PUBNODE_HH_
3+
/*******************************************
4+
PURPOSE: Trick model for ROS2 publisher node
5+
LIBRARY DEPENDENCY:
6+
(
7+
(trick_publisher/src/PubNode.cc)
8+
)
9+
*******************************************/
10+
11+
#include "rclcpp/rclcpp.hpp"
12+
#include "std_msgs/msg/string.hpp"
13+
#include <iostream>
14+
15+
class PubNode
16+
{
17+
public:
18+
std::string whatToYell;
19+
20+
std::string nodeName;
21+
std::string publicationName;
22+
23+
rclcpp::Node::SharedPtr node;
24+
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub;
25+
26+
void defaults();
27+
void init_ros();
28+
void yellIntoTheVoid();
29+
void shutItDown();
30+
31+
};
32+
33+
34+
#endif
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include "trick_publisher/include/PubNode.hh"
2+
3+
4+
void SubNode::defaults()
5+
{
6+
nodeName = "trick_publisher_node";
7+
publicationName = "Trick_says";
8+
}
9+
10+
void PubNode::init_ros()
11+
{
12+
13+
whatToYell = "Trick is screaming.";
14+
15+
int argc=0;
16+
char **argv = 0x0;
17+
18+
rclcpp::init(argc,argv);
19+
node = std::make_shared<rclcpp::Node>(nodeName);
20+
pub = node->create_publisher<std_msgs::msg::String>(publicationName,10);
21+
22+
}
23+
24+
25+
void PubNode::yellIntoTheVoid()
26+
{
27+
28+
if(!pub)
29+
{
30+
std::cout << "No publisher detected.\n" << std::endl;
31+
return;
32+
}
33+
else if(!node)
34+
{
35+
std::cout << "No node detected.\n" << std::endl;
36+
return;
37+
}
38+
else
39+
{
40+
std_msgs::msg::String msg;
41+
msg.data = whatToYell;
42+
43+
pub->publish(msg);
44+
}
45+
46+
if(node)
47+
{
48+
rclcpp::spin_some(node);
49+
}
50+
}
51+
52+
void PubNode::shutItDown()
53+
{
54+
55+
pub.reset();
56+
node.reset();
57+
rclcpp::shutdown();
58+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
trick.real_time_enable()
2+
trick.exec_set_software_frame(0.1)
3+
trick.itimer_enable()
4+
5+
simControlPanel = trick.SimControlPanel()
6+
trick.add_external_application(simControlPanel)
7+
8+
#TrickSubscriber.subscribe_node.subscriptionName = "topic"
9+
TrickSubscriber.subscribe_node.subscriptionName = "chatter"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include "sim_objects/default_trick_sys.sm"
2+
##include "trick_subscriber/include/SubNode.hh"
3+
4+
class TrickSubscriberSimObject : public Trick::SimObject
5+
{
6+
public:
7+
SubNode subscribe_node;
8+
9+
TrickSubscriberSimObject()
10+
{
11+
("default_data") subscribe_node.defaults();
12+
("initialization") subscribe_node.init_ros();
13+
(0.5, "scheduled") subscribe_node.earToTheVoid();
14+
("shutdown") subscribe_node.shutItDown();
15+
}
16+
};
17+
18+
TrickSubscriberSimObject TrickSubscriber;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
TRICK_CXXFLAGS += -g -I./
2+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/
3+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rclcpp
4+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcl
5+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcutils
6+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rmw
7+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcl_yaml_param_parser
8+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rosidl_runtime_c
9+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rosidl_typesupport_interface
10+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcpputils
11+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/builtin_interfaces
12+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rosidl_runtime_cpp
13+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/tracetools
14+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/rcl_interfaces
15+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/libstatistics_collector
16+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/statistics_msgs
17+
TRICK_CXXFLAGS += -I/opt/ros/humble/include/std_msgs
18+
19+
TRICK_CFLAGS=${TRICK_CXXFLAGS}
20+
TRICK_USER_LINK_LIBS += -L/opt/ros/humble/lib -L/opt/ros/humble/share
21+
TRICK_USER_LINK_LIBS += -lrclcpp
22+
TRICK_USER_LINK_LIBS += -lrcl
23+
TRICK_USER_LINK_LIBS += -lrmw
24+
TRICK_USER_LINK_LIBS += -lrcutils
25+
TRICK_USER_LINK_LIBS += -lrcpputils
26+
TRICK_USER_LINK_LIBS += -lstd_msgs__rosidl_typesupport_cpp
27+
TRICK_USER_LINK_LIBS += -lrmw_fastrtps_cpp
28+
TRICK_USER_LINK_LIBS += -lrmw_fastrtps_dynamic_cpp
29+
TRICK_USER_LINK_LIBS += -ltracetools
30+
TRICK_USER_LINK_LIBS += -llibstatistics_collector
31+
TRICK_USER_LINK_LIBS += -lstatistics_msgs__rosidl_typesupport_cpp
32+
33+
TRICK_EXCLUDE += /opt/ros/humble/include/
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#ifndef __SUBNODE_HH_
2+
#define __SUBNODE_HH_
3+
/*******************************************
4+
PURPOSE: Trick model for ROS2 subscriber node
5+
LIBRARY DEPENDENCY:
6+
(
7+
(trick_subscriber/src/SubNode.cc)
8+
)
9+
*******************************************/
10+
11+
#include "rclcpp/rclcpp.hpp"
12+
#include "std_msgs/msg/string.hpp"
13+
#include <iostream>
14+
15+
class SubNode
16+
{
17+
public:
18+
std::string darkEchoes;
19+
20+
std::string nodeName;
21+
std::string subscriptionName;
22+
23+
rclcpp::Node::SharedPtr node;
24+
rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub;
25+
26+
void defaults();
27+
void init_ros();
28+
void earToTheVoid();
29+
void shutItDown();
30+
31+
};
32+
33+
34+
#endif
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#include "trick_subscriber/include/SubNode.hh"
2+
3+
void SubNode::defaults()
4+
{
5+
nodeName = "trick_subscriber_node";
6+
subscriptionName = "Trick_says";
7+
}
8+
9+
void SubNode::init_ros()
10+
{
11+
12+
int argc=0;
13+
char **argv = 0x0;
14+
15+
rclcpp::init(argc,argv);
16+
node = std::make_shared<rclcpp::Node>(nodeName);
17+
sub = node->create_subscription<std_msgs::msg::String>(
18+
subscriptionName, 10,
19+
[this](std_msgs::msg::String::ConstSharedPtr msg) {
20+
std::cout << "The void speaks: " << msg->data << std::endl;
21+
}
22+
);
23+
}
24+
25+
26+
void SubNode::earToTheVoid()
27+
{
28+
29+
if(!sub)
30+
{
31+
std::cout << "No subscriber detected.\n" << std::endl;
32+
return;
33+
}
34+
else if(!node)
35+
{
36+
std::cout << "No subscription node detected.\n" << std::endl;
37+
return;
38+
}
39+
else
40+
{
41+
rclcpp::spin_some(node);
42+
}
43+
44+
}
45+
46+
void SubNode::shutItDown()
47+
{
48+
49+
sub.reset();
50+
node.reset();
51+
rclcpp::shutdown();
52+
}

0 commit comments

Comments
 (0)