-Controlling the Iterative Execution .3.1
Posted zhangrelay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了-Controlling the Iterative Execution .3.1相关的知识,希望对你有一定的参考价值。
2.3 ANALYZING THE BR2 BASICS PACKAGE 这一节内容有些多……
前一篇:
ROS2机器人编程简述humble-第二章-DEVELOPING THE FIRST NODE .2
里面只有节点,没有任何实际功能。
logger.cpp代码如下所示:
#include "rclcpp/rclcpp.hpp"
using namespace std::chrono_literals;
int main(int argc, char * argv[])
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("logger_node");
rclcpp::Rate loop_rate(500ms);
int counter = 0;
while (rclcpp::ok())
RCLCPP_INFO(node->get_logger(), "Hello %d", counter++);
rclcpp::spin_some(node);
loop_rate.sleep();
rclcpp::shutdown();
return 0;
这是一段代码“实现在固定时间执行任务“
周期:rclcpp::Rate loop_rate(500ms);
消息:RCLCPP_INFO(node->get_logger(), "Hello %d", counter++);
ROS消息通常具备时间戳!
rclcpp::spin_some(node);
参考官方文档如下:
rclcpp::spin
Create a default single-threaded executor and spin the specified node.
创建默认的单线程执行器并跳转指定的节点。
rclcpp::spin_some
Create a default single-threaded executor and execute any immediately available work.
创建默认的单线程执行器并执行任何立即可用的工作。
rclcpp::spin_until_future_complete
rcl_interfaces/msg/Log.msg
# Debug is for pedantic information, which is useful when debugging issues.
byte DEBUG=10
# Info is the standard informational level and is used to report expected
# information.
byte INFO=20
# Warning is for information that may potentially cause issues or possibly unexpected
# behavior.
byte WARN=30
# Error is for information that this node cannot resolve.
byte ERROR=40
# Information about a impending node shutdown.
byte FATAL=50
#
# Fields
#
# Timestamp when this message was generated by the node.
builtin_interfaces/Time stamp
# Corresponding log level, see above definitions.
uint8 level
# The name representing the logger this message came from.
string name
# The full log message.
string msg
# The file the message came from.
string file
# The function the message came from.
string function
# The line in the file the message came from.
uint32 line
重要图示:
ros2 run br2_basics logger
ros2 topic echo /rosout
ros2 interface show rcl_interfaces/msg/Log
另一种实现方法:
#include "rclcpp/rclcpp.hpp"
using namespace std::chrono_literals;
class LoggerNode : public rclcpp::Node
public:
LoggerNode()
: Node("logger_node")
counter_ = 0;
timer_ = create_wall_timer(
500ms, std::bind(&LoggerNode::timer_callback, this));
void timer_callback()
RCLCPP_INFO(get_logger(), "Hello %d", counter_++);
private:
rclcpp::TimerBase::SharedPtr timer_;
int counter_;
;
int main(int argc, char * argv[])
rclcpp::init(argc, argv);
auto node = std::make_shared<LoggerNode>();
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
计时器控制控制回路。该计时器以所需频率产生事件。当发生此事件时,它调用处理它的回调。优点是节点在内部调整执行频率,而不将此决定委托给外部代码。安排节点以了解它们的运行频率。
timer_ = create_wall_timer(
500ms, std::bind(&LoggerNode::timer_callback, this));
rclcpp: ROS Client Library for C++
rclcpp provides the canonical C++ API for interacting with ROS. It consists of these main components:
Node
rclcpp::Node
rclcpp/node.hpp
Publisher
rclcpp::Node::create_publisher()
rclcpp::Publisher
rclcpp::Publisher::publish()
rclcpp/publisher.hpp
Subscription
rclcpp::Node::create_subscription()
rclcpp::Subscription
rclcpp/subscription.hpp
Service Client
rclcpp::Node::create_client()
rclcpp::Client
rclcpp/client.hpp
Service Server
rclcpp::Node::create_service()
rclcpp::Service
rclcpp/service.hpp
Timer
rclcpp::Node::create_wall_timer()
rclcpp::WallTimer
rclcpp::TimerBase
rclcpp/timer.hpp
Parameters:
rclcpp::Node::set_parameters()
rclcpp::Node::get_parameters()
rclcpp::Node::get_parameter()
rclcpp::Node::describe_parameters()
rclcpp::Node::list_parameters()
rclcpp::Node::add_on_set_parameters_callback()
rclcpp::Node::remove_on_set_parameters_callback()
rclcpp::Parameter
rclcpp::ParameterValue
rclcpp::AsyncParametersClient
rclcpp::SyncParametersClient
rclcpp/parameter.hpp
rclcpp/parameter_value.hpp
rclcpp/parameter_client.hpp
rclcpp/parameter_service.hpp
Rate:
rclcpp::Rate
rclcpp::WallRate
rclcpp/rate.hpp
There are also some components which help control the execution of callbacks:
Executors (responsible for execution of callbacks through a blocking spin):
rclcpp::spin()
rclcpp::spin_some()
rclcpp::spin_until_future_complete()
rclcpp::executors::SingleThreadedExecutor
rclcpp::executors::SingleThreadedExecutor::add_node()
rclcpp::executors::SingleThreadedExecutor::spin()
rclcpp::executors::MultiThreadedExecutor
rclcpp::executors::MultiThreadedExecutor::add_node()
rclcpp::executors::MultiThreadedExecutor::spin()
rclcpp/executor.hpp
rclcpp/executors.hpp
rclcpp/executors/single_threaded_executor.hpp
rclcpp/executors/multi_threaded_executor.hpp
CallbackGroups (mechanism for enforcing concurrency rules for callbacks):
rclcpp::Node::create_callback_group()
rclcpp::CallbackGroup
rclcpp/callback_group.hpp
Additionally, there are some methods for introspecting the ROS graph:
Graph Events (a waitable event object that wakes up when the graph changes):
rclcpp::Node::get_graph_event()
rclcpp::Node::wait_for_graph_change()
rclcpp::Event
List topic names and types:
rclcpp::Node::get_topic_names_and_types()
Get the number of publishers or subscribers on a topic:
rclcpp::Node::count_publishers()
rclcpp::Node::count_subscribers()
And components related to logging:
Logging macros:
Some examples (not exhaustive):
RCLCPP_DEBUG()
RCLCPP_INFO()
RCLCPP_WARN_ONCE()
RCLCPP_ERROR_SKIPFIRST()
rclcpp/logging.hpp
Logger:
rclcpp::Logger
rclcpp/logger.hpp
rclcpp::Node::get_logger()
Finally, there are many internal API's and utilities:
Exceptions:
rclcpp/exceptions.hpp
Allocator related items:
rclcpp/allocator/allocator_common.hpp
rclcpp/allocator/allocator_deleter.hpp
Memory management tools:
rclcpp/memory_strategies.hpp
rclcpp/memory_strategy.hpp
rclcpp/message_memory_strategy.hpp
rclcpp/strategies/allocator_memory_strategy.hpp
rclcpp/strategies/message_pool_memory_strategy.hpp
Context object which is shared amongst multiple Nodes:
rclcpp::Context
rclcpp/context.hpp
rclcpp/contexts/default_context.hpp
Various utilities:
rclcpp/duration.hpp
rclcpp/function_traits.hpp
rclcpp/macros.hpp
rclcpp/scope_exit.hpp
rclcpp/time.hpp
rclcpp/utilities.hpp
rclcpp/visibility_control.hpp
以上是关于-Controlling the Iterative Execution .3.1的主要内容,如果未能解决你的问题,请参考以下文章
The goddess, the bird, the bell, the temptation of the house
Read the ads,Match the titles with the
simplify the design of the hardware forming the interface between the processor and thememory system
Word2010 Error:The name in the end tag of the element must match the element type in the start tag.
Word2010 Error:The name in the end tag of the element must match the element type in the start tag.