micro-ROS / micro-ROS/system_modes
[FEA] Allow deactivating nodes when system is activated.
未關閉
還沒有人認領這個 Issue。
- 主要語言
- C++
- 星號
- 45
- 分支
- 13
- PR 合併指標
- 30 天內沒有已合併 PR
描述
There is a need to selectively disable the function of a node, that's say deactivating a node in a certain system mode.
Should the following config work? Thanks!
SHM file
---
# system modes example
---
actuation:
ros__parameters:
type: system
parts:
drive_base
left/manipulator
right/manipulator
modes:
__DEFAULT__:
drive_base: active.__DEFAULT__
left/manipulator: inactive.__DEFAULT__
right/manipulator: inactive.__DEFAULT__
LEFT:
# drive_base: active.__DEFAULT__
left/manipulator: active.__DEFAULT__
right/manipulsator: inactive.__DEFAULT__
RIGHT:
# drive_base: active.__DEFAULT__
left/manipulator: inactive.__DEFAULT__
right/manipulator: active.__DEFAULT__
left/manipulator:
ros__parameters:
type: node
modes:
__DEFAULT__:
ros__parameters:
max_torque: 0.1
drive_base:
ros__parameters:
type: node
modes:
__DEFAULT__:
ros__parameters:
max_speed: 0.1
controller: PID
right/manipulator:
ros__parameters:
type: node
modes:
__DEFAULT__:
ros__parameters:
max_torque: 0.11
step to reproduce
zs@zs-vm-2204:~/zs_ws/ga_ros$ ros2 service call /actuation/change_state lifecycle_msgs/ChangeState "{transition: {id: 1, label: configure}}"
waiting for service to become available...
requester: making request: lifecycle_msgs.srv.ChangeState_Request(transition=lifecycle_msgs.msg.Transition(id=1, label='configure'))
response:
lifecycle_msgs.srv.ChangeState_Response(success=True)
after this ,all nodes become OK
zs@zs-vm-2204:~/zs_ws/ga_ros$ ros2 service call /actuation/change_state lifecycle_msgs/ChangeState "{transition: {id: 3, label: activate}}"
requester: making request: lifecycle_msgs.srv.ChangeState_Request(transition=lifecycle_msgs.msg.Transition(id=3, label='activate'))
response:
lifecycle_msgs.srv.ChangeState_Response(success=True)
after this , every thing OK
zs@zs-vm-2204:~/zs_ws/ga_ros$ time ros2 service call /actuation/change_mode system_modes_msgs/ChangeMode "{mode_name: 'LEFT'}"
waiting for service to become available...
requester: making request: system_modes_msgs.srv.ChangeMode_Request(mode_name='LEFT')
after this, the mode_manager died with a segfault.

EDIT: @ralph-lange
the step of reproduce is updated in 2022-11-12.
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 SHM YAML 設定開始,並使用列出的 Lifecycle 與 /actuation/change_mode 服務呼叫重現問題。檢查切換至 LEFT 時 mode_manager 的行為,特別是節點停用項目;當模式切換在沒有 segfault 的情況下完成,且選取的節點依設定處於非作用中狀態時,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- cpp
- 領域
- robotics
- Issue 類型
- 功能
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100