-
Notifications
You must be signed in to change notification settings - Fork 158
feat: add coding guideline about topic message handling #543
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ohsawa1204
merged 229 commits into
autowarefoundation:main
from
ohsawa1204:test-add-callback-reduction-guidelines
May 17, 2024
Merged
Changes from 224 commits
Commits
Show all changes
229 commits
Select commit
Hold shift + click to select a range
2131301
doc:change 1
ohsawa1204 093bfa7
doc:change 2
ohsawa1204 6e0f248
doc:change 3
ohsawa1204 ff3014d
doc:change 4
ohsawa1204 2609785
style(pre-commit): autofix
pre-commit-ci[bot] 54f31e8
doc:change 5
ohsawa1204 cde9abf
Merge branch 'main' into test-add-callback-reduction-guidelines
ohsawa1204 cabe89b
docs(topic-message-handling): create page structure using .pages
takam5f2 13bd800
docs(topic-message-handling): fix missing links
takam5f2 418c2fa
Merge pull request #1 from takam5f2/create-page-structure-using-.pages
ohsawa1204 f38d7a0
docs(topic-message-handling): index -> index.md in 02-supp-waitset.md
ohsawa1204 7b36ae0
docs(topic-message-handling): correct misspelled words
ohsawa1204 136ab2d
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8fa4990
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 554b359
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 cba9ec8
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 564901a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 30ddb45
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9658b88
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 64ae6cd
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 81dbcf7
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 b7a9d76
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 b94b519
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 353badd
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2d289f1
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f7ce39b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8588e50
style(pre-commit): autofix
pre-commit-ci[bot] 98c9769
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 1c49fa3
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2521119
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 3bb54a7
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 aa01ec7
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 22f5b2f
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 3056fd8
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 753cd0c
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5de0f78
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 7cf816e
style(pre-commit): autofix
pre-commit-ci[bot] adc814a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 fe96888
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 b786713
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a9a53e6
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 99c8db4
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a7fca6e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 3241515
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 bb1b0be
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 537f252
style(pre-commit): autofix
pre-commit-ci[bot] 72cd561
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5e9f690
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f631391
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f81d2f9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2e85fe9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 b5f2443
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c0b3b39
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 84c293d
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 1887c69
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8e6bacf
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 508cc74
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f69cdb6
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 72a2260
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 4cf1879
style(pre-commit): autofix
pre-commit-ci[bot] 0d4d245
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 ddd6ebb
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 70bf2b4
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a82036d
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 92c51cb
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 e287933
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 1e9eeb9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9a32617
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 55f482a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 0cfdee9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 77d5d03
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 89b3e47
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 b72e848
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 6d0898d
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 ab8615b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9ca747b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8bb54f5
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 d48b903
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 6929da8
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9d345b9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 49fc574
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 dc01618
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c1ad1bc
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a7f359f
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 634bc92
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c41be37
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 0138c58
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 6627ff3
docs(topic-message-handling): some corrections related to Akamine-san…
ohsawa1204 09c6cda
Merge branch 'main' into test-add-callback-reduction-guidelines
ohsawa1204 b5a1df1
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5613357
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 4d32ce2
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 e7ca6a8
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2855734
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 d483f9e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 d93fcfe
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 cf82e96
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5ab6de1
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a0b8c88
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 fdbfafa
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f6aa4cd
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 710a15b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 7cd7f0b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9487a4a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 025acb4
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 592fec9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 1191372
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9d00a72
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8c82a8d
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c25e351
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 1f5889b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 4dffcab
docs(topic-message-handling): rename 02-supp-waitset.md
ohsawa1204 d00fb2e
docs(topic-message-handling): correct typo
ohsawa1204 5355a25
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 7c782d9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 038f09f
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 bc49c9e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 4aa951b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 94b8495
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 36c6dd5
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c0e897b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 3e2fb08
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 af5afdd
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 6ef44d4
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 4ea3d5b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a7143bb
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c8a779c
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 106a7e1
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 76792bb
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 6ee7031
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f71dd91
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 7937d6b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 aba3834
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8e9bf27
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a2ab1d2
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9abdaa5
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 39e3c97
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 72123f5
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 9b5f07e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 fb478d2
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5337eb4
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 1cd1d4a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 161623f
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 eb27439
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 b909de6
style(pre-commit): autofix
pre-commit-ci[bot] 29a6dd3
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 348f753
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 11754e2
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8043884
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 86a0891
style(pre-commit): autofix
pre-commit-ci[bot] ce33caf
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 e21c35e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 3f5873e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 06d1bf3
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f957d55
style(pre-commit): autofix
pre-commit-ci[bot] fb13ce0
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 41f9f19
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 29e0b33
style(pre-commit): autofix
pre-commit-ci[bot] aa50c53
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 1d082e5
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5f4faae
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 e4d4f79
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 56a0e07
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a9a84ba
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 a0410cd
style(pre-commit): autofix
pre-commit-ci[bot] e056f69
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 37a3d0a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 23606b3
style(pre-commit): autofix
pre-commit-ci[bot] e514b8a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 d644f5a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 412aaf1
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 bdc80a0
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 acc1931
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 551ade2
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 b7fc45c
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5efdab1
style(pre-commit): autofix
pre-commit-ci[bot] 1abf20f
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 060c914
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 aac9166
style(pre-commit): autofix
pre-commit-ci[bot] 9cdd072
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 6be6160
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8977a7e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 93b8d69
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 7f15ca2
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 8c1bcb6
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 0210c99
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 51c1a66
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 817caa2
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 7bb4253
style(pre-commit): autofix
pre-commit-ci[bot] 0475034
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 426507d
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 caff81e
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 160adda
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c4b3428
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 22e9ac8
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 c639722
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 24563bb
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2c1589a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 aec2781
style(pre-commit): autofix
pre-commit-ci[bot] 7924922
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 d9e8972
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 66b4380
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5bac419
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 d16ccc7
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f93307a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2e6a6ba
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 e07e307
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f6dfe4b
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 04063eb
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 57d3427
style(pre-commit): autofix
pre-commit-ci[bot] 0eda179
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2b2100d
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 196ff01
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 71d093a
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f9a9333
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 5c5cab1
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 2ba7162
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 f30f5d8
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 fd035ab
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 78609e0
style(pre-commit): autofix
pre-commit-ci[bot] 08865bc
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 16c064b
style(pre-commit): autofix
pre-commit-ci[bot] 1740112
docs(topic-message-handling): some fixes
ohsawa1204 f7b6b0e
Merge branch 'main' into test-add-callback-reduction-guidelines
ohsawa1204 a9381c9
Update docs/contributing/coding-guidelines/ros-nodes/topic-message-ha…
ohsawa1204 7b98baa
docs(topic-message-handling): corrected as noted by mitsudome-r
ohsawa1204 d42c75e
style(pre-commit): autofix
pre-commit-ci[bot] a7bf42d
docs(topic-message-handling): minor change
ohsawa1204 47eaf3e
style(pre-commit): autofix
pre-commit-ci[bot] File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,3 +8,4 @@ nav: | |
- parameters.md | ||
- task-scheduling.md | ||
- topic-namespaces.md | ||
- topic-message-handling |
4 changes: 4 additions & 0 deletions
4
docs/contributing/coding-guidelines/ros-nodes/topic-message-handling/.pages
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
nav: | ||
- index.md | ||
- supp-intra-process-comm.md | ||
- supp-wait_set.md |
200 changes: 200 additions & 0 deletions
200
docs/contributing/coding-guidelines/ros-nodes/topic-message-handling/index.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,200 @@ | ||
# Topic message handling guideline | ||
|
||
## Introduction | ||
|
||
Here is coding guideline for topic message handling in Autoware. It includes the recommended manner than conventional one, which is roughly explained in [_Discussions page_](https://github.com/orgs/autowarefoundation/discussions/4612). Refer to the page to understand the basic concept of the recommended manner. | ||
You can find sample source code in [_ros2_subscription_examples_](https://github.com/takam5f2/ros2_subscription_examples) referred from this document. | ||
|
||
## Conventional message handling manner typically used | ||
|
||
At first, let us see a conventional manner of handling messages that is commonly used. | ||
[_ROS 2 Tutorials_](https://docs.ros.org/en/rolling/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.html#write-the-subscriber-node) is one of the most cited references for ROS 2 applications, including Autoware. | ||
It implicitly recommends that each of messages received by subscriptions should be referred to and processed by a dedicated callback function. Autoware follows that manner thoroughly. | ||
|
||
```c++ | ||
steer_sub_ = create_subscription<SteeringReport>( | ||
"input/steering", 1, | ||
[this](SteeringReport::SharedPtr msg) { current_steer_ = msg->steering_tire_angle; }); | ||
``` | ||
|
||
In the code above, when a topic message whose name is `input/steering` is received, an anonymous function whose description is `{current_steer_ = msg->steering_tier_angle;}` is executed as a callback in a thread. The callback function is always executed when the message is received, which leads to waste computing resource if the message is not always necessary. Besides, waking up a thread costs computational overhead. | ||
|
||
## Recommended manner | ||
|
||
This section introduces a recommended manner to take a message using `Subscription->take()` method only when the message is needed. | ||
The sample code given below shows that `Subscription->take()` method is called during execution of any callback function. In most cases, `Subscription->take()` method is called before a received message is consumed by a main logic. | ||
In this case, a topic message is retrieved from the subscription queue, the queue embedded in the subscription object, instead of using a callback function. To be precise, you have to program your code so that a callback function is not automatically called. | ||
|
||
```c++ | ||
SteeringReport::SharedPtr msg; | ||
rclcpp::MessageInfo msg_info; | ||
if (sub_->take(msg, msg_info)) { | ||
// processing and publishing after this | ||
``` | ||
|
||
Using this manner has the following benefits. | ||
|
||
- It can reduce the number of calls to subscription callback functions | ||
- There is no need to take a topic message from a subscription that a main logic does not consume | ||
- There is no mandatory thread waking for the callback function, which leads to multi-threaded programming, data races and exclusive locking | ||
|
||
## Manners to handle topic message data | ||
|
||
This section introduces four manners, including the recommended ones. | ||
|
||
### 1. Obtain data by calling `Subscription->take()` | ||
|
||
To use the recommended manner using `Subscription->take()`, you basically need to do two things below. | ||
|
||
1. Prevent a callback function from being called when a topic message is received | ||
2. Call `take()` method of a subscription object when a topic message is needed | ||
|
||
You can see an example of the typical use of `take()` method in [_ros2_subscription_examples/simple_examples/src/timer_listener.cpp_](https://github.com/takam5f2/ros2_subscription_examples/blob/main/simple_examples/src/timer_listener.cpp). | ||
|
||
#### Prevent calling a callback function | ||
|
||
To prevent a callback function from being called automatically, the callback function has to belong a callback group whose callback functions are not added to any executor. | ||
According to the [_API specification of `create_subscription`_](http://docs.ros.org/en/iron/p/rclcpp/generated/classrclcpp_1_1Node.html), registering a callback function to a `rclcpp::Subscription` based object is mandatory even if the callback function has no operation. | ||
Here is a sample code snippet from [_ros2_subscription_examples/simple_examples/src/timer_listener.cpp_](https://github.com/takam5f2/ros2_subscription_examples/blob/main/simple_examples/src/timer_listener.cpp). | ||
|
||
```c++ | ||
rclcpp::CallbackGroup::SharedPtr cb_group_not_executed = this->create_callback_group( | ||
rclcpp::CallbackGroupType::MutuallyExclusive, false); | ||
auto subscription_options = rclcpp::SubscriptionOptions(); | ||
subscription_options.callback_group = cb_group_not_executed; | ||
|
||
rclcpp::QoS qos(rclcpp::KeepLast(10)); | ||
if (use_transient_local) { | ||
qos = qos.transient_local(); | ||
} | ||
|
||
sub_ = create_subscription<std_msgs::msg::String>("chatter", qos, not_executed_callback, subscription_options); | ||
``` | ||
|
||
In the code above, `cb_group_not_executed` is created by calling `create_callback_group` with the second argument `false`. Any callback function which belongs to the callback group will not be called by an executor. | ||
If the `callback_group` member of `subscription_options` is set to `cb_group_not_executed`, then `not_executed_callback` will not be called when a corresponding topic message `chatter` is received. | ||
The second argument to `create_callback_group` is defined as follows. | ||
|
||
```c++ | ||
rclcpp::CallbackGroup::SharedPtr create_callback_group(rclcpp::CallbackGroupType group_type, \ | ||
bool automatically_add_to_executor_with_node = true) | ||
``` | ||
|
||
When `automatically_add_to_executor_with_node` is set to `true`, callback functions included in a node that is added to an executor will be automatically called by the executor. | ||
|
||
#### Call `take()` method of Subscription object | ||
|
||
To take a topic message from the `Subscription` based object, the `take()` method is called at the expected time. | ||
Here is a sample code snippet from [_ros2_subscription_examples/simple_examples/src/timer_listener.cpp_](https://github.com/takam5f2/ros2_subscription_examples/blob/main/simple_examples/src/timer_listener.cpp) using `take()` method. | ||
|
||
```c++ | ||
std_msgs::msg::String msg; | ||
rclcpp::MessageInfo msg_info; | ||
if (sub_->take(msg, msg_info)) { | ||
RCLCPP_INFO(this->get_logger(), "Catch message"); | ||
RCLCPP_INFO(this->get_logger(), "I heard: [%s]", msg.data.c_str()); | ||
``` | ||
|
||
In the code above, `take(msg, msg_info)` is called by `sub_` object instantiated from the `rclcpp::Subscription` class. It is called in a timer driven callback function. `msg` and `msg_info` indicate a message body and its metadata respectively. If there is a message in the subscription queue when `take(msg, msg_info)` is called, then the message is copied to `msg`. | ||
`take(msg, msg_info)` returns `true` if a message is successfully taken from the subscription. In this case, the above code prints out a string data of the message from `RCLCPP_INFO`. | ||
`take(msg, msg_info)` returns `false` if a message is not taken from the subscription. | ||
When `take(msg, msg_info)` is called, if the size of the subscription queue is greater than one and there are two or more messages in the queue, then the oldest message is copied to `msg`. If the size of the queue is one, the latest message is always obtained. | ||
|
||
!!! note | ||
|
||
You can check the presence of incoming message with the returned value of `take()` method. However, you have to take care of the destructive nature of the take() method. The `take()` method modifies the subscription queue. Also, the `take()` method is irreversible and there is no undo operation against the `take()` method. Checking the incoming message with only the `take()` method always changes the subscription queue. If you want to check without changing the subscription queue, rclcpp::WaitSet is recommended. Refer to [_[supplement] Use rclcpp::WaitSet_](./supp-wait_set.md) for more detail. | ||
|
||
!!! note | ||
|
||
The `take()` method is supported to only obtain a message which is passed through DDS as an inter-process communication. You must not use it for an intra-process communication because intra-process communication is based on another software stack of `rclcpp`. Refer to [_[supplement] Obtain a received message through intra-process communication_](./supp-intra-process-comm.md) in case of intra-process communication. | ||
|
||
#### 1.1 Obtain Serialized Message from Subscription | ||
|
||
ROS 2 provides Serialized Message function which supports communication with arbitrary message types as described in [_Class SerializedMessage_](http://docs.ros.org/en/humble/p/rclcpp/generated/classrclcpp_1_1SerializedMessage.html). It is used by `topic_state_monitor` in Autoware. | ||
You have to use the `take_serialized()` method instead of the `take()` method to obtain a `rclcpp::SerializedMessage` based message from a subscription. | ||
|
||
Here is a sample code snippet from [_ros2_subscription_examples/simple_examples/src/timer_listener_serialized_message.cpp_](https://github.com/takam5f2/ros2_subscription_examples/blob/main/simple_examples/src/timer_listener_serialized_message.cpp). | ||
|
||
```c++ | ||
// receive the serialized message. | ||
rclcpp::MessageInfo msg_info; | ||
auto msg = sub_->create_serialized_message(); | ||
|
||
if (sub_->take_serialized(*msg, msg_info) == false) { | ||
return; | ||
} | ||
``` | ||
|
||
In the code above, `msg` is created by `create_serialized_message()` to store a received message, whose type is `std::shared_ptr<rclcpp::SerializedMessage>`. You can obtain a message of type `rclcpp::SerializedMessage` using the `take_serialized()` method. Note that the `take_serialized()` method needs reference type data as its first argument. Since `msg` is a pointer, `*msg` should be passed as the first argument to the `take_serialized(). | ||
|
||
!!! note | ||
|
||
ROS 2's `rclcpp` supports both `rclcpp::LoanedMessage` and `rclcpp::SerializedMessage`. If [_zero copy communication via loaned messages_](https://design.ros2.org/articles/zero_copy.html) is introduced to Autoware, `take_loaned()` method should be used for communication via loaned messages instead. In this document, the explanation of the `take_loaned()` method is omitted because it is not used for Autoware in this time (May. 2024). | ||
|
||
ohsawa1204 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
### 2. Obtain multiple data stored in Subscription Queue | ||
|
||
A subscription object can hold multiple messages in its queue if multiple queue size is configured with the QoS setting. The conventional manner using callback function forces a callback function to be executed per message. In other words, there is a constraint; a single cycle of callback function processes a single message . Note that with the conventional manner, if there are one or more messages in the subscription queue, the oldest one is taken and a thread is assigned to execute a callback function, which continues until the queue is empty. | ||
The `take()` method would alleviate this limitation. The `take()` method can be called in multiple iterations, so that a single cycle of the callback function processes multiple messages taken by `take()` methods. | ||
|
||
Here is a sample code, taken from [_ros2_subscription_examples/simple_examples/src/timer_batch_listener.cpp_](https://github.com/takam5f2/ros2_subscription_examples/blob/main/simple_examples/src/timer_batch_listener.cpp) which calls the `take()` method in a single cycle of a callback function. | ||
|
||
```c++ | ||
std_msgs::msg::String msg; | ||
rclcpp::MessageInfo msg_info; | ||
while (sub_->take(msg, msg_info)) | ||
{ | ||
RCLCPP_INFO(this->get_logger(), "Catch message"); | ||
RCLCPP_INFO(this->get_logger(), "I heard: [%s]", msg.data.c_str()); | ||
``` | ||
|
||
In the code above, `while(sub->take(msg, msg_info))` continues to take messages from the subscription queue until the queue is empty. Each message taken is processed per iteration. | ||
Note that you must determine size of a subscription queue by considering both frequency of a callback function and frequency of a message reception. For example, if a callback function is invoked at 10Hz and topic messages are received at 50Hz, the size of the subscription queue must be at least 5 to avoid losing received messages. | ||
|
||
Assigning a thread to execute a callback function per message will cause performance overhead. You can use the manner introduced in this section to avoid the unexpected overhead. | ||
The manner will be effective when there is a large difference between reception frequency and consumption frequency. For example, even if a message, such as a CAN message, is received at higher than 100 Hz, a user logic consumes messages at slower frequency such as 10 Hz. In such a case, the user logic should retrieve the required number of messages with the `take()` method to avoid the unexpected overhead. | ||
|
||
### 3. Obtain data by calling `Subscription->take` and then call a callback function | ||
|
||
You can combine the `take()` (strictly `take_type_erased()`) method and the callback function to process received messages in a consistent way. Using this combination does not require waking up a thread. | ||
Here is a sample code snippet from [_ros2_subscription_examples/simple_examples/src/timer_listener_using_callback.cpp_](https://github.com/takam5f2/ros2_subscription_examples/blob/main/simple_examples/src/timer_listener_using_callback.cpp). | ||
|
||
```c++ | ||
auto msg = sub_->create_message(); | ||
rclcpp::MessageInfo msg_info; | ||
if (sub_->take_type_erased(msg.get(), msg_info)) { | ||
sub_->handle_message(msg, msg_info); | ||
|
||
``` | ||
|
||
In the code above, a message is taken by the `take_type_erased()` method before a registered callback function is called via the `handle_message()` method. Note that you must use `take_type_erased()` instead of `take()`. `take_type_erased()` needs `void` type data as its first argument. You must use the `get()` method to convert `msg` whose type is `shared_ptr<void>` to `void` type. Then the `handle_message()` method is called with the obtained message. A registered callback function is called within `handle_message()`. | ||
You don't need to take care of message type which is passed to `take_type_erased()` and `handle_message()`. You can define the message variable as `auto msg = sub_->create_message();`. | ||
You can also refer to [_the API document_](http://docs.ros.org/en/humble/p/rclcpp/generated/classrclcpp_1_1SubscriptionBase.html#_CPPv4N6rclcpp16SubscriptionBase16take_type_erasedEPvRN6rclcpp11MessageInfoE) as for `create_message()`, `take_type_erased()` and `handle_message()`. | ||
|
||
### 4. Obtain data by a callback function | ||
|
||
A conventional manner, typically used in ROS 2 application, is a message reference using a callback function, is available. If you don't use a callback group with `automatically_add_to_executor_with_node = false`, a registered callback function will be called automatically by an executor when a topic message is received. | ||
One of the advantages of this manner is that you don't have to take care whether a topic message is passed through inter-process or intra-process. Remember that `take()` can only be used for inter-process communication via DDS, while another manner provided by `rclcpp` can be used for intra-process communication via `rclcpp`. | ||
|
||
## Appendix | ||
mitsudome-r marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
A callback function is used to obtain a topic message in many of ROS 2 applications. It is as like a rule or a custom. As this document page explains, you can use the `Subscription->take()` method to obtain a topic message without calling a subscription callback function. | ||
This manner is also documented in [_Template Class Subscription — rclcpp 16.0.8 documentation_](https://docs.ros.org/en/humble/p/rclcpp/generated/classrclcpp_1_1Subscription.html#_CPPv4N6rclcpp12Subscription4takeER14ROSMessageTypeRN6rclcpp11MessageInfoE). | ||
|
||
Many of ROS 2 users may be afraid to use the `take()` method because they may not be so familiar with it and there is a lack of documentation about `take()`, but it is widely used in the `rclcpp::Executor` implementation as shown in [_rclcpp/executor.cpp_](https://github.com/ros2/rclcpp/blob/47c977d1bc82fc76dd21f870bcd3ea473eca2f59/rclcpp/src/rclcpp/executor.cpp#L643-L648) shown below. So it turns out that you are indirectly using the `take()` method, whether you know it or not. | ||
|
||
```c++ | ||
std::shared_ptr<void> message = subscription->create_message(); | ||
take_and_do_error_handling( | ||
"taking a message from topic", | ||
subscription->get_topic_name(), | ||
[&]() {return subscription->take_type_erased(message.get(), message_info);}, | ||
[&]() {subscription->handle_message(message, message_info);}); | ||
``` | ||
|
||
!!!note | ||
|
||
Strictly speaking, the `take_type_erased()` method is called in the executor, but not the `take()` method. | ||
|
||
But `take_type_erased()` is the embodiment of `take()`, while `take()` internally calls `take_type_erased()`. | ||
|
||
If `rclcpp::Executor` based object, an executor, is programmed to call a callback function, the executor itself determines when to do it. Because the executor is essentially calling a best-effort callback function, the message is not guaranteed to be necessarily referenced or processed even though it is received. Therefore it is desirable to call the `take()` method directly to ensure that a message is referenced or processed at the intended time. |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.