Skip to content

Commit 641aa2b

Browse files
author
Javier Moreno
committed
Refs #3637 - Translate demo to rclcpp. Traslate string and complex_msg pub/sub demos.
1 parent 58d5667 commit 641aa2b

15 files changed

Lines changed: 477 additions & 0 deletions

File tree

Cpp/RAD0_control/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ find_package(ament_cmake REQUIRED)
1515
find_package(rclcpp QUIET)
1616
find_package(std_msgs REQUIRED)
1717

18+
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
19+
find_package (Threads REQUIRED)
1820

1921
# Do not compile package if rclcpp is not found
2022
if (NOT rclcpp_FOUND)
@@ -27,6 +29,8 @@ endif()
2729
add_executable(${PROJECT_NAME} main.cpp)
2830
ament_target_dependencies(${PROJECT_NAME} rclcpp std_msgs)
2931

32+
target_link_libraries(${PROJECT_NAME} Threads::Threads)
33+
3034
install(TARGETS
3135
${PROJECT_NAME}
3236
DESTINATION lib/${PROJECT_NAME}

Cpp/RAD0_control/COLCON_IGNORE

Whitespace-only changes.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*)
3+
project(complex_msg_publisher_cpp)
4+
5+
# Default to C++14
6+
if(NOT CMAKE_CXX_STANDARD)
7+
set(CMAKE_CXX_STANDARD 14)
8+
endif()
9+
10+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
11+
add_compile_options(-Wall -Wextra -Wpedantic)
12+
endif()
13+
14+
find_package(ament_cmake REQUIRED)
15+
find_package(rclcpp QUIET)
16+
find_package(complex_msgs REQUIRED)
17+
18+
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
19+
find_package (Threads REQUIRED)
20+
21+
22+
# Do not compile package if rclcpp is not found
23+
if (NOT rclcpp_FOUND)
24+
message(WARNING "${PROJECT_NAME} will be ignored due to rclcpp is not installed")
25+
ament_package()
26+
return()
27+
endif()
28+
29+
30+
add_executable(${PROJECT_NAME} main.cpp)
31+
ament_target_dependencies(${PROJECT_NAME} rclcpp complex_msgs)
32+
33+
target_link_libraries(${PROJECT_NAME} Threads::Threads)
34+
35+
install(TARGETS
36+
${PROJECT_NAME}
37+
DESTINATION lib/${PROJECT_NAME}
38+
)
39+
40+
ament_package()

Cpp/complex_msg_publisher/main.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Copyright 2018 Proyectos y Sistemas de Mantenimiento SL (eProsima).
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#include <chrono>
16+
#include <cstdio>
17+
#include <complex_msgs/msg/nested_msg_test.hpp>
18+
#include "rclcpp/rclcpp.hpp"
19+
using namespace std::chrono_literals;
20+
21+
class complex_msg_publisher_cpp_node : public rclcpp::Node
22+
{
23+
public:
24+
complex_msg_publisher_cpp_node() : Node("complex_msg_publisher_cpp")
25+
{
26+
publisher_ = this->create_publisher<complex_msgs::msg::NestedMsgTest>("complex_msgs_msg_NestedMsgTest");
27+
timer_ = this->create_wall_timer(
28+
500ms, std::bind(&complex_msg_publisher_cpp_node::timer_callback, this));
29+
}
30+
31+
private:
32+
void timer_callback()
33+
{
34+
msg.data1 = (bool)(num & 0x01);
35+
msg.data2 = (uint8_t)num;
36+
msg.data3 = (signed char)num;
37+
msg.data4 = (float)num;
38+
msg.data5 = (double)num;
39+
msg.data6 = (int8_t)num;
40+
msg.data7 = (uint8_t)num;
41+
msg.data8 = (int16_t)num;
42+
msg.data9 = (uint16_t)num;
43+
msg.data10 = (int32_t)num;
44+
msg.data11 = (uint32_t)num;
45+
msg.data12 = (int64_t)num;
46+
msg.data13 = (uint64_t)num;
47+
msg.data14.data1 = "Msg A - " + std::to_string(num);
48+
msg.data14.data2 = "Msg B - " + std::to_string(num);
49+
msg.data14.data3 = "Msg C - " + std::to_string(num);
50+
msg.data14.data4 = "Msg D - " + std::to_string(num);
51+
num++;
52+
53+
publisher_->publish(msg);
54+
55+
std::cout << "I send:" << std::endl;
56+
std::cout << "\tBool: " << std::to_string(msg.data1) << std::endl;
57+
std::cout << "\tuint8_t: " << std::to_string(msg.data2) << std::endl;
58+
std::cout << "\tsigned char: " << std::to_string(msg.data3) << std::endl;
59+
std::cout << "\tfloat: " << std::to_string(msg.data4) << std::endl;
60+
std::cout << "\tdouble: " << std::to_string(msg.data5) << std::endl;
61+
std::cout << "\tint8_t: " << std::to_string(msg.data6) << std::endl;
62+
std::cout << "\tuint8_t: " << std::to_string(msg.data7) << std::endl;
63+
std::cout << "\tint16_t: " << std::to_string(msg.data8) << std::endl;
64+
std::cout << "\tuint16_t: " << std::to_string(msg.data9) << std::endl;
65+
std::cout << "\tint32_t: " << std::to_string(msg.data10) << std::endl;
66+
std::cout << "\tuint32_t: " << std::to_string(msg.data11) << std::endl;
67+
std::cout << "\tint64_t: " << std::to_string(msg.data12) << std::endl;
68+
std::cout << "\tuint64_t: " << std::to_string(msg.data13) << std::endl;
69+
70+
std::cout << "\tstring 1: " << msg.data14.data1 << std::endl;
71+
std::cout << "\tstring 2: " << msg.data14.data2 << std::endl;
72+
std::cout << "\tstring 3: " << msg.data14.data3 << std::endl;
73+
std::cout << "\tstring 4: " << msg.data14.data4 << std::endl;
74+
std::cout << "\n" << std::endl;
75+
}
76+
77+
rclcpp::Publisher<complex_msgs::msg::NestedMsgTest>::SharedPtr publisher_;
78+
rclcpp::TimerBase::SharedPtr timer_;
79+
complex_msgs::msg::NestedMsgTest msg;
80+
size_t num = 0;
81+
};
82+
83+
84+
int main(int argc, char * argv[])
85+
{
86+
rclcpp::init(argc, argv);
87+
rclcpp::spin(std::make_shared<complex_msg_publisher_cpp_node>());
88+
rclcpp::shutdown();
89+
return 0;
90+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
4+
<name>complex_msg_publisher_cpp</name>
5+
<version>0.0.1</version>
6+
<description>Example of a complex msg publisher</description>
7+
<maintainer email="javiermoreno@eproxima.com">Javier Moreno</maintainer>
8+
<license>Apache License 2.0</license>
9+
<buildtool_depend>ament_cmake</buildtool_depend>
10+
<build_depend>rclcpp</build_depend>
11+
<build_depend>complex_msgs</build_depend>
12+
<export>
13+
<build_type>ament_cmake</build_type>
14+
</export>
15+
</package>
16+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*)
3+
project(complex_msg_subscriber_cpp)
4+
5+
# Default to C++14
6+
if(NOT CMAKE_CXX_STANDARD)
7+
set(CMAKE_CXX_STANDARD 14)
8+
endif()
9+
10+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
11+
add_compile_options(-Wall -Wextra -Wpedantic)
12+
endif()
13+
14+
find_package(ament_cmake REQUIRED)
15+
find_package(rclcpp QUIET)
16+
find_package(complex_msgs REQUIRED)
17+
18+
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
19+
find_package (Threads REQUIRED)
20+
21+
22+
# Do not compile package if rclcpp is not found
23+
if (NOT rclcpp_FOUND)
24+
message(WARNING "${PROJECT_NAME} will be ignored due to rclcpp is not installed")
25+
ament_package()
26+
return()
27+
endif()
28+
29+
30+
add_executable(${PROJECT_NAME} main.cpp)
31+
ament_target_dependencies(${PROJECT_NAME} rclcpp complex_msgs)
32+
33+
target_link_libraries(${PROJECT_NAME} Threads::Threads)
34+
35+
install(TARGETS
36+
${PROJECT_NAME}
37+
DESTINATION lib/${PROJECT_NAME}
38+
)
39+
40+
ament_package()
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright 2018 Proyectos y Sistemas de Mantenimiento SL (eProsima).
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#include <cstdio>
16+
#include <complex_msgs/msg/nested_msg_test.hpp>
17+
#include "rclcpp/rclcpp.hpp"
18+
using std::placeholders::_1;
19+
20+
class complex_msg_subscriber_cpp_node : public rclcpp::Node
21+
{
22+
public:
23+
complex_msg_subscriber_cpp_node() : Node("complex_msg_subscriber_cpp")
24+
{
25+
subscription_ = this->create_subscription<complex_msgs::msg::NestedMsgTest>("complex_msgs_msg_NestedMsgTest",
26+
std::bind(&complex_msg_subscriber_cpp_node::topic_callback, this, _1));
27+
}
28+
29+
private:
30+
rclcpp::Subscription<complex_msgs::msg::NestedMsgTest>::SharedPtr subscription_;
31+
32+
void topic_callback(const complex_msgs::msg::NestedMsgTest::SharedPtr msg)
33+
{
34+
std::cout << "I heard: " << std::endl;
35+
std::cout << "\tBool: " << std::to_string(msg->data1) << std::endl;
36+
std::cout << "\tuint8_t: " << std::to_string(msg->data2) << std::endl;
37+
std::cout << "\tsigned char: " << std::to_string(msg->data3) << std::endl;
38+
std::cout << "\tfloat: " << std::to_string(msg->data4) << std::endl;
39+
std::cout << "\tdouble: " << std::to_string(msg->data5) << std::endl;
40+
std::cout << "\tint8_t: " << std::to_string(msg->data6) << std::endl;
41+
std::cout << "\tuint8_t: " << std::to_string(msg->data7) << std::endl;
42+
std::cout << "\tint16_t: " << std::to_string(msg->data8) << std::endl;
43+
std::cout << "\tuint16_t: " << std::to_string(msg->data9) << std::endl;
44+
std::cout << "\tint32_t: " << std::to_string(msg->data10) << std::endl;
45+
std::cout << "\tuint32_t: " << std::to_string(msg->data11) << std::endl;
46+
std::cout << "\tint64_t: " << std::to_string(msg->data12) << std::endl;
47+
std::cout << "\tuint64_t: " << std::to_string(msg->data13) << std::endl;
48+
49+
std::cout << "\tstring 1: " << msg->data14.data1 << std::endl;
50+
std::cout << "\tstring 2: " << msg->data14.data2 << std::endl;
51+
std::cout << "\tstring 3: " << msg->data14.data3 << std::endl;
52+
std::cout << "\tstring 4: " << msg->data14.data4 << std::endl;
53+
std::cout << "\n" << std::endl;
54+
}
55+
};
56+
57+
int main(int argc, char * argv[])
58+
{
59+
rclcpp::init(argc, argv);
60+
rclcpp::spin(std::make_shared<complex_msg_subscriber_cpp_node>());
61+
rclcpp::shutdown();
62+
return 0;
63+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
4+
<name>complex_msg_subscriber_cpp</name>
5+
<version>0.0.1</version>
6+
<description>Example of a complex smg subcriber</description>
7+
<maintainer email="javiermoreno@eproxima.com">Javier Moreno</maintainer>
8+
<license>Apache License 2.0</license>
9+
<buildtool_depend>ament_cmake</buildtool_depend>
10+
<build_depend>rclcpp</build_depend>
11+
<build_depend>complex_msgs</build_depend>
12+
<export>
13+
<build_type>ament_cmake</build_type>
14+
</export>
15+
</package>
16+

Cpp/int32_publisher/README.md

Whitespace-only changes.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*)
3+
project(string_publisher_cpp)
4+
5+
# Default to C++14
6+
if(NOT CMAKE_CXX_STANDARD)
7+
set(CMAKE_CXX_STANDARD 14)
8+
endif()
9+
10+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
11+
add_compile_options(-Wall -Wextra -Wpedantic)
12+
endif()
13+
14+
find_package(ament_cmake REQUIRED)
15+
find_package(rclcpp QUIET)
16+
find_package(std_msgs REQUIRED)
17+
18+
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
19+
find_package (Threads REQUIRED)
20+
21+
22+
# Do not compile package if rclcpp is not found
23+
if (NOT rclcpp_FOUND)
24+
message(WARNING "${PROJECT_NAME} will be ignored due to rclcpp is not installed")
25+
ament_package()
26+
return()
27+
endif()
28+
29+
30+
add_executable(${PROJECT_NAME} main.cpp)
31+
ament_target_dependencies(${PROJECT_NAME} rclcpp std_msgs)
32+
33+
target_link_libraries(${PROJECT_NAME} Threads::Threads)
34+
35+
install(TARGETS
36+
${PROJECT_NAME}
37+
DESTINATION lib/${PROJECT_NAME}
38+
)
39+
40+
ament_package()

0 commit comments

Comments
 (0)