Skip to content

Commit 9ae3531

Browse files
Merge pull request #1 from microROS/develop
Develop
2 parents 87852ad + fce5d1a commit 9ae3531

File tree

53 files changed

+2078
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+2078
-0
lines changed

C/RAD0_actuator/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*)
3+
project(rad0_actuator_c)
4+
5+
find_package(ament_cmake REQUIRED)
6+
find_package(rclc QUIET)
7+
find_package(std_msgs REQUIRED)
8+
9+
# Do not compile package if rclcpp is not found
10+
if (NOT rclc_FOUND)
11+
message(WARNING "${PROJECT_NAME} will be ignored due to rclc is not installed")
12+
ament_package()
13+
return()
14+
endif()
15+
16+
add_executable(${PROJECT_NAME} main.c)
17+
ament_target_dependencies(${PROJECT_NAME} rclc std_msgs)
18+
19+
install(TARGETS
20+
${PROJECT_NAME}
21+
DESTINATION lib/${PROJECT_NAME}
22+
)
23+
24+
ament_package()

C/RAD0_actuator/main.c

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include <rclc/rclc.h>
2+
#include <std_msgs/msg/string.h>
3+
#include <std_msgs/msg/int32.h>
4+
#include <std_msgs/msg/u_int32.h>
5+
6+
#include <stdio.h>
7+
8+
#define ASSERT(ptr) if (ptr == NULL) return -1;
9+
10+
static rclc_publisher_t* engine_pub;
11+
static uint32_t engine_power = 100;
12+
13+
void engine_on_message(const void* msgin)
14+
{
15+
16+
const std_msgs__msg__Int32* msg = (const std_msgs__msg__Int32*)msgin;
17+
18+
if (msg->data + engine_power > 0)
19+
{
20+
engine_power += msg->data;
21+
}
22+
else
23+
{
24+
engine_power = 0;
25+
}
26+
27+
// Publish new altitude
28+
std_msgs__msg__UInt32 msg_out;
29+
msg_out.data = engine_power;
30+
rclc_publish(engine_pub, (const void*)&msg_out);
31+
}
32+
33+
int main(int argc, char* argv[])
34+
{
35+
(void)argc;
36+
(void)argv;
37+
38+
rclc_node_t* node = NULL;
39+
rclc_subscription_t* engine_sub = NULL;
40+
41+
42+
43+
rclc_init(0, NULL);
44+
node = rclc_create_node("rad0_actuator_c", "");
45+
ASSERT(node);
46+
engine_sub = rclc_create_subscription(node, RCLC_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32), "std_msgs_msg_Int32", engine_on_message, 1, false);
47+
ASSERT(engine_sub);
48+
engine_pub = rclc_create_publisher(node, RCLC_GET_MSG_TYPE_SUPPORT(std_msgs, msg, UInt32), "std_msgs_msg_UInt32", 1);
49+
ASSERT(engine_pub);
50+
51+
// Publish new altitude
52+
std_msgs__msg__UInt32 msg_out;
53+
msg_out.data = engine_power;
54+
rclc_publish(engine_pub, (const void*)&msg_out);
55+
56+
rclc_spin_node(node);
57+
58+
//if (altitude_sub) rclc_destroy_subscription(altitude_sub);
59+
if (engine_sub) rclc_destroy_subscription(engine_sub);
60+
if (engine_pub) rclc_destroy_publisher(engine_pub);
61+
if (node) rclc_destroy_node(node);
62+
63+
printf("Actuator node closed.\n");
64+
65+
return 0;
66+
}

C/RAD0_actuator/package.xml

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>rad0_actuator_c</name>
5+
<version>0.0.1</version>
6+
<description>Real apliacion demostration. Actuator node</description>
7+
<maintainer email="javiermoreno@eprosima.com">Javier Moreno</maintainer>
8+
<license>Apache License 2.0</license>
9+
<buildtool_depend>ament_cmake</buildtool_depend>
10+
<build_depend>rclc</build_depend>
11+
<build_depend>std_msgs</build_depend>
12+
<export>
13+
<build_type>ament_cmake</build_type>
14+
</export>
15+
</package>
16+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*)
3+
project(rad0_altitude_sensor_c)
4+
5+
find_package(ament_cmake REQUIRED)
6+
find_package(rclc QUIET)
7+
find_package(std_msgs REQUIRED)
8+
9+
# Do not compile package if rclcpp is not found
10+
if (NOT rclc_FOUND)
11+
message(WARNING "${PROJECT_NAME} will be ignored due to rclc is not installed")
12+
ament_package()
13+
return()
14+
endif()
15+
16+
add_executable(${PROJECT_NAME} main.c)
17+
ament_target_dependencies(${PROJECT_NAME} rclc std_msgs)
18+
19+
target_link_libraries(${PROJECT_NAME} m)
20+
21+
install(TARGETS
22+
${PROJECT_NAME}
23+
DESTINATION lib/${PROJECT_NAME}
24+
)
25+
26+
ament_package()

C/RAD0_altitude_sensor/main.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#include <rclc/rclc.h>
2+
#include <std_msgs/msg/float64.h>
3+
#include <std_msgs/msg/int32.h>
4+
5+
#include <stdio.h>
6+
#include <math.h>
7+
#include <time.h>
8+
9+
#define ASSERT(ptr) if (ptr == NULL) return -1;
10+
11+
/**
12+
* @brief
13+
*
14+
* @param argc
15+
* @param argv
16+
* @return int
17+
*/
18+
int main(int argc, char *argv[])
19+
{
20+
(void)argc;
21+
(void)argv;
22+
rclc_init(0, NULL);
23+
24+
rclc_node_t* node = NULL;
25+
rclc_publisher_t* publisher = NULL;
26+
27+
node = rclc_create_node("rad0_altitude_sensor_c", "");
28+
ASSERT(node);
29+
publisher = rclc_create_publisher(node, RCLC_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Float64), "std_msgs_msg_Float64", 1);
30+
ASSERT(publisher);
31+
32+
33+
double A = 0;
34+
35+
36+
while (rclc_ok())
37+
{
38+
A += 0.0001;
39+
40+
// Publish new altitude
41+
std_msgs__msg__Float64 msg;
42+
msg.data = 500 * sin(A) + 950;
43+
rclc_publish(publisher, (const void*)&msg);
44+
45+
46+
// Spin node
47+
rclc_spin_node_once(node, 0);
48+
}
49+
50+
if (publisher) rclc_destroy_publisher(publisher);
51+
if (node) rclc_destroy_node(node);
52+
53+
printf("altitude sendor closed.\n");
54+
return 0;
55+
}

C/RAD0_altitude_sensor/package.xml

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>rad0_altitude_sensor_c</name>
5+
<version>0.0.1</version>
6+
<description>Real apliacion demostration. Position sensor node</description>
7+
<maintainer email="javiermoreno@eprosima.com">Javier Moreno</maintainer>
8+
<license>Apache License 2.0</license>
9+
<buildtool_depend>ament_cmake</buildtool_depend>
10+
<build_depend>rclc</build_depend>
11+
<build_depend>std_msgs</build_depend>
12+
<export>
13+
<build_type>ament_cmake</build_type>
14+
</export>
15+
</package>
16+

C/RAD0_display/CMakeLists.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
set(CMAKE_CXX_CLANG_TIDY clang-tidy -checks=*)
3+
project(rad0_display_c)
4+
5+
find_package(ament_cmake REQUIRED)
6+
find_package(rclc QUIET)
7+
find_package(std_msgs REQUIRED)
8+
9+
# Do not compile package if rclcpp is not found
10+
if (NOT rclc_FOUND)
11+
message(WARNING "${PROJECT_NAME} will be ignored due to rclc is not installed")
12+
ament_package()
13+
return()
14+
endif()
15+
16+
add_executable(${PROJECT_NAME} main.c)
17+
ament_target_dependencies(${PROJECT_NAME} rclc std_msgs)
18+
19+
install(TARGETS
20+
${PROJECT_NAME}
21+
DESTINATION lib/${PROJECT_NAME}
22+
)
23+
24+
ament_package()

C/RAD0_display/main.c

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include <rclc/rclc.h>
2+
#include <std_msgs/msg/string.h>
3+
#include <std_msgs/msg/float64.h>
4+
#include <std_msgs/msg/int32.h>
5+
#include <std_msgs/msg/u_int32.h>
6+
7+
#include <stdio.h>
8+
9+
#define ASSERT(ptr) if (ptr == NULL) return -1;
10+
11+
static float altitude;
12+
static uint32_t engine_power;
13+
static unsigned it;
14+
static char Alert[200];
15+
16+
/**
17+
* @brief Update screen
18+
*
19+
*/
20+
void UpdateDisplay()
21+
{
22+
printf("\r[received messages: %7u] [Altitude: %8.2f] [Engine power: %8u] [Status: %10s]", it++, altitude, engine_power, Alert);
23+
}
24+
25+
26+
/**
27+
* @brief new alert callback
28+
*
29+
* @param msgin
30+
*/
31+
void on_alert_message(const void* msgin)
32+
{
33+
const std_msgs__msg__String* msg = (const std_msgs__msg__String*)msgin;
34+
strcpy(Alert, msg->data.data);
35+
36+
UpdateDisplay();
37+
}
38+
39+
40+
/**
41+
* @brief new altitude calback
42+
*
43+
* @param msgin
44+
*/
45+
void on_altitude_message(const void* msgin)
46+
{
47+
std_msgs__msg__Float64* msg = (std_msgs__msg__Float64*)msgin;
48+
49+
altitude = msg->data;
50+
UpdateDisplay();
51+
}
52+
53+
/**
54+
* @brief
55+
*
56+
* @param msgin
57+
*/
58+
void on_power_message(const void* msgin)
59+
{
60+
std_msgs__msg__UInt32* msg = (std_msgs__msg__UInt32*)msgin;
61+
62+
engine_power = msg->data;
63+
UpdateDisplay();
64+
}
65+
66+
67+
/**
68+
* @brief Main
69+
*
70+
* @param argc
71+
* @param argv
72+
* @return int
73+
*/
74+
int main(int argc, char *argv[])
75+
{
76+
(void)argc;
77+
(void)argv;
78+
79+
rclc_node_t* node = NULL;
80+
rclc_subscription_t* alert_subscription = NULL;
81+
rclc_subscription_t* altitude_subscription = NULL;
82+
rclc_subscription_t* power_subscription = NULL;
83+
84+
85+
rclc_init(0, NULL);
86+
87+
node = rclc_create_node("rad0_display_c", "");
88+
ASSERT(node);
89+
alert_subscription = rclc_create_subscription(node, RCLC_GET_MSG_TYPE_SUPPORT(std_msgs, msg, String), "std_msgs_msg_String", on_alert_message, 1, false);
90+
ASSERT(alert_subscription);
91+
altitude_subscription = rclc_create_subscription(node, RCLC_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Float64), "std_msgs_msg_Float64", on_altitude_message, 1, false);
92+
ASSERT(altitude_subscription);
93+
power_subscription = rclc_create_subscription(node, RCLC_GET_MSG_TYPE_SUPPORT(std_msgs, msg, UInt32), "std_msgs_msg_UInt32", on_power_message, 1, false);
94+
ASSERT(power_subscription);
95+
96+
rclc_spin_node(node);
97+
98+
if (alert_subscription) rclc_destroy_subscription(alert_subscription);
99+
if (altitude_subscription) rclc_destroy_subscription(altitude_subscription);
100+
if (node) rclc_destroy_node(node);
101+
102+
printf("Display node closed.");
103+
104+
}

C/RAD0_display/package.xml

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>rad0_display_c</name>
5+
<version>0.0.1</version>
6+
<description>Real apliacion demostration. Display on screen any message</description>
7+
<maintainer email="javiermoreno@eprosima.com">Javier Moreno</maintainer>
8+
<license>Apache License 2.0</license>
9+
<buildtool_depend>ament_cmake</buildtool_depend>
10+
<build_depend>rclc</build_depend>
11+
<build_depend>std_msgs</build_depend>
12+
<export>
13+
<build_type>ament_cmake</build_type>
14+
</export>
15+
</package>
16+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
set(CMAKE_C_CLANG_TIDY clang-tidy -checks=*)
3+
project(complex_msg_publisher_c)
4+
5+
find_package(ament_cmake REQUIRED)
6+
find_package(rclc QUIET)
7+
find_package(complex_msgs REQUIRED)
8+
9+
# Do not compile package if rclcpp is not found
10+
if (NOT rclc_FOUND)
11+
message(WARNING "${PROJECT_NAME} will be ignored due to rclc is not installed")
12+
ament_package()
13+
return()
14+
endif()
15+
16+
add_executable(${PROJECT_NAME} main.c)
17+
ament_target_dependencies(${PROJECT_NAME} rclc complex_msgs)
18+
19+
install(TARGETS
20+
${PROJECT_NAME}
21+
DESTINATION lib/${PROJECT_NAME}
22+
)
23+
24+
ament_package()

0 commit comments

Comments
 (0)