WIP: backport message flow tracing to foxy
This commit is contained in:
parent
1ed67d4a7d
commit
bd2620ef8d
34 changed files with 221 additions and 53 deletions
|
@ -13,6 +13,7 @@ endif()
|
|||
|
||||
# Find dependencies
|
||||
find_package(ament_cmake REQUIRED)
|
||||
find_package(tracetools REQUIRED)
|
||||
find_package(rclcpp REQUIRED)
|
||||
find_package(priority_executor REQUIRED)
|
||||
find_package(simple_timer REQUIRED)
|
||||
|
@ -39,6 +40,7 @@ function(new_experiment experiment_name)
|
|||
|
||||
# Add dependencies with ament
|
||||
ament_target_dependencies(${experiment_name}
|
||||
tracetools
|
||||
simple_timer
|
||||
casestudy_tools
|
||||
rclcpp
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
<buildtool_depend>ament_cmake</buildtool_depend>
|
||||
|
||||
<!-- Build Dependencies -->
|
||||
<depend>tracetools</depend>
|
||||
<depend>rclcpp</depend>
|
||||
<depend>priority_executor</depend>
|
||||
<depend>simple_timer</depend>
|
||||
|
|
|
@ -13,6 +13,7 @@ endif()
|
|||
|
||||
# Find dependencies
|
||||
find_package(ament_cmake REQUIRED)
|
||||
find_package(tracetools REQUIRED)
|
||||
find_package(rclcpp REQUIRED)
|
||||
find_package(priority_executor REQUIRED)
|
||||
find_package(simple_timer REQUIRED)
|
||||
|
@ -26,6 +27,7 @@ target_include_directories(primes_workload PUBLIC
|
|||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
ament_target_dependencies(primes_workload
|
||||
tracetools
|
||||
simple_timer
|
||||
rclcpp
|
||||
priority_executor
|
||||
|
@ -38,6 +40,7 @@ target_include_directories(test_nodes PUBLIC
|
|||
)
|
||||
target_link_libraries(test_nodes primes_workload)
|
||||
ament_target_dependencies(test_nodes
|
||||
tracetools
|
||||
rclcpp
|
||||
simple_timer
|
||||
)
|
||||
|
@ -53,6 +56,7 @@ target_link_libraries(experiment_host
|
|||
test_nodes
|
||||
)
|
||||
ament_target_dependencies(experiment_host
|
||||
tracetools
|
||||
rclcpp
|
||||
simple_timer
|
||||
priority_executor
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
<buildtool_depend>ament_cmake</buildtool_depend>
|
||||
|
||||
<depend>tracetools</depend>
|
||||
<depend>rclcpp</depend>
|
||||
<depend>priority_executor</depend>
|
||||
<depend>simple_timer</depend>
|
||||
|
|
|
@ -16,7 +16,10 @@ find_package(ament_cmake REQUIRED)
|
|||
find_package(rclcpp REQUIRED)
|
||||
find_package(std_msgs REQUIRED)
|
||||
|
||||
add_compile_definitions(RCLCPP_ENABLE_TRACEPOINTS)
|
||||
|
||||
add_executable(${PROJECT_NAME} src/full_topology.cpp)
|
||||
#add_executable(${PROJECT_NAME} src/test.cpp)
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
|
@ -26,6 +29,7 @@ target_include_directories(${PROJECT_NAME} PUBLIC
|
|||
ament_target_dependencies(${PROJECT_NAME}
|
||||
rclcpp
|
||||
std_msgs
|
||||
tracetools
|
||||
)
|
||||
|
||||
# Installation
|
||||
|
|
|
@ -1,22 +1,60 @@
|
|||
from launch import LaunchDescription
|
||||
import os
|
||||
import launch
|
||||
from pathlib import Path
|
||||
from launch_ros.actions import Node
|
||||
from tracetools_launch.action import Trace
|
||||
|
||||
def generate_launch_description():
|
||||
return LaunchDescription([
|
||||
length_arg = launch.actions.DeclareLaunchArgument(
|
||||
'length',
|
||||
default_value='60.0',
|
||||
description='length of execution in seconds',
|
||||
)
|
||||
|
||||
file_dir = Path(__file__).resolve().parent
|
||||
target_path = file_dir.parents[2] / 'analysis' / 'tracing'
|
||||
|
||||
return launch.LaunchDescription([
|
||||
length_arg,
|
||||
Trace(
|
||||
session_name='full_topology_tracing',
|
||||
append_timestamp=True,
|
||||
base_path=target_path,
|
||||
events_ust=[
|
||||
'rclcpp:*', 'rcl:*', 'rmw:*', 'ros2:*', 'rclcpp:*callback*', 'rclcpp:*executor*'
|
||||
'dds:*',
|
||||
'ros2:*',
|
||||
'rcl:*',
|
||||
'rmw:*',
|
||||
'rclcpp:*',
|
||||
'rclcpp:*callback*',
|
||||
'rclcpp:*executor*',
|
||||
'rmw_cyclonedds:*',
|
||||
# explicit list of message‑flow events
|
||||
'ros2:rclcpp_publish',
|
||||
'ros2:rclcpp_subscription_callback',
|
||||
'ros2:rclcpp_timer_callback',
|
||||
'ros2:rclcpp_executor_execute',
|
||||
'ros2:rclcpp_intra_publish',
|
||||
'ros2:rmw_take',
|
||||
'ros2:callback_start',
|
||||
'ros2:callback_end',
|
||||
# ---- (optional) add whatever else you like ----
|
||||
# scheduling / executor / memory events:
|
||||
'ros2:rclcpp_executor_*',
|
||||
'ros2:*callback_added',
|
||||
],
|
||||
events_kernel=[
|
||||
'sched_switch', 'sched_wakeup'
|
||||
],
|
||||
),
|
||||
|
||||
Node(
|
||||
package='full_topology',
|
||||
executable='full_topology',
|
||||
output='screen',
|
||||
),
|
||||
# Shut down after some time, otherwise the system would run indefinitely
|
||||
launch.actions.TimerAction(
|
||||
period=launch.substitutions.LaunchConfiguration(length_arg.name),
|
||||
actions=[launch.actions.Shutdown(reason='stopping system')],
|
||||
),
|
||||
])
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
<!-- Build Dependencies -->
|
||||
<depend>rclcpp</depend>
|
||||
<depend>std_msgs</depend>
|
||||
<depend>tracetools</depend>
|
||||
|
||||
<test_depend>ament_copyright</test_depend>
|
||||
<test_depend>ament_flake8</test_depend>
|
||||
|
|
|
@ -5,12 +5,14 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
#include "rclcpp/rclcpp.hpp"
|
||||
// the order here matters
|
||||
#include "tracetools/utils.hpp"
|
||||
|
||||
#include <rclcpp/rclcpp.hpp>
|
||||
#include "std_msgs/msg/string.hpp"
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
constexpr int RUN_DURATION_SECONDS = 20;
|
||||
constexpr bool DEBUG = false;
|
||||
|
||||
// A generic sensor node that publishes at a given rate
|
||||
|
@ -138,12 +140,13 @@ public:
|
|||
RCLCPP_INFO(get_logger(), "%s received: %s", name.c_str(), msg->data.c_str());
|
||||
}
|
||||
|
||||
/* TODO
|
||||
// random: 1 in 5 it will be 10s instead of delay_ms
|
||||
if (rand() % 5 == 0) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(10000));
|
||||
} else {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(delay_ms));
|
||||
}
|
||||
}*/
|
||||
|
||||
// Custom transformation of data
|
||||
auto out = std_msgs::msg::String();
|
||||
|
@ -255,6 +258,7 @@ int main(int argc, char **argv)
|
|||
auto fusion = std::make_shared<FusionNode>(
|
||||
"sensor_fusion_node", std::vector<std::string>{"/gps/fix", "/imu/data", "/baro/alt"}, "/sensors/fused", 10);
|
||||
auto lidar = std::make_shared<LidarNode>("lidar_node", "/lidar/scan", 15);
|
||||
// TODO: operator or autonomous flight plan
|
||||
auto cmd = std::make_shared<CommandNode>("operator_cmd_node", "/operator/commands", 1);
|
||||
auto mgmt = std::make_shared<FlightManagementNode>(
|
||||
"flight_mgmt_node", std::vector<std::string>{"/sensors/fused", "/lidar/scan", "/operator/commands"}, "/flight/plan", 20);
|
||||
|
@ -283,13 +287,7 @@ int main(int argc, char **argv)
|
|||
executor.add_node(telemetry);
|
||||
executor.add_node(radio);
|
||||
|
||||
// ToDo: find a better way to handle time limited executions
|
||||
auto start_time = std::chrono::steady_clock::now();
|
||||
while (rclcpp::ok() && (std::chrono::steady_clock::now() - start_time) < std::chrono::seconds(RUN_DURATION_SECONDS))
|
||||
{
|
||||
executor.spin_some();
|
||||
std::this_thread::sleep_for(1ms);
|
||||
}
|
||||
executor.spin();
|
||||
|
||||
rclcpp::shutdown();
|
||||
return 0;
|
||||
|
|
9
src/full_topology/src/test.cpp
Normal file
9
src/full_topology/src/test.cpp
Normal file
|
@ -0,0 +1,9 @@
|
|||
#include "tracetools/utils.hpp"
|
||||
#include <rclcpp/rclcpp.hpp>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
rclcpp::init(argc, argv);
|
||||
auto node = std::make_shared<rclcpp::Node>("test_node");
|
||||
rclcpp::shutdown();
|
||||
return 0;
|
||||
}
|
1
src/rcl
Submodule
1
src/rcl
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 5da7e193371c25cf1ebd2489978768327c382c04
|
1
src/rclcpp
Submodule
1
src/rclcpp
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit e57a3a393e46f0c0e0e5cc64090ac34e5cef32bc
|
1
src/rmw_cyclonedds
Submodule
1
src/rmw_cyclonedds
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 79e07924d66b205838d28da4c9df6a941df6795c
|
1
src/ros2_tracing
Submodule
1
src/ros2_tracing
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit c0a5cf2d1dc8706a62bae59123e2c71a6707ac33
|
|
@ -1 +0,0 @@
|
|||
tools/ros2_tracing/ros2trace
|
|
@ -1 +0,0 @@
|
|||
tools/tracetools_analysis/ros2trace_analysis
|
|
@ -1 +1 @@
|
|||
Subproject commit d7ecdf0108d8decdda33b6dd7fb1bbc5f1d3ac43
|
||||
Subproject commit c44b7b8c3c527a8d16739349b50340a7de9b6f51
|
|
@ -13,6 +13,7 @@ endif()
|
|||
|
||||
# find dependencies
|
||||
find_package(ament_cmake REQUIRED)
|
||||
find_package(tracetools REQUIRED)
|
||||
find_package(rclcpp REQUIRED)
|
||||
find_package(std_msgs REQUIRED)
|
||||
|
||||
|
@ -24,6 +25,7 @@ target_include_directories(${PROJECT_NAME} PUBLIC
|
|||
|
||||
# Add dependencies with ament
|
||||
ament_target_dependencies(${PROJECT_NAME}
|
||||
tracetools
|
||||
rclcpp
|
||||
std_msgs
|
||||
)
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
<depend>launch</depend>
|
||||
<depend>launch_ros</depend>
|
||||
<depend>tracetools</depend>
|
||||
<depend>tracetools_trace</depend>
|
||||
<depend>tracetools_launch</depend>
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 449a0123fd12032519ca6bea2209cc0505304771
|
|
@ -1 +0,0 @@
|
|||
Subproject commit d99bb4041665d77d6f9502d614af498d31d7b6de
|
|
@ -1 +0,0 @@
|
|||
tools/ros2_tracing/tracetools
|
|
@ -1 +0,0 @@
|
|||
tools/tracetools_analysis/tracetools_analysis
|
1
src/tracetools_analysis
Submodule
1
src/tracetools_analysis
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 0feb705d5bf8e3578a28a6a5f9397695228c2f26
|
|
@ -1 +0,0 @@
|
|||
tools/ros2_tracing/tracetools_launch
|
|
@ -1 +0,0 @@
|
|||
tools/ros2_tracing/tracetools_read
|
|
@ -1 +0,0 @@
|
|||
tools/ros2_tracing/tracetools_test
|
|
@ -1 +0,0 @@
|
|||
tools/ros2_tracing/tracetools_trace
|
Loading…
Add table
Add a link
Reference in a new issue