Description
Hello :)
In my workspace, I updated the BehaviorTree.CPP library from version 4.0.2 to 4.2.0 and this error appeared when using ReactiveSequence:
what(): [ReactiveSequence]: only a single child can return RUNNING
This is the tree:
<ReactiveSequence name="LocalizationSequence">
<CheckSensorQuality>
<RetryUntilSuccessful name="SensorRecoveryLoop" num_attempts="5">
<RestartSensor/>
</RetryUntilSuccessful>
</CheckPoseQuality>
<PerformActionA/>
</ReactiveSequence>
We have a node CheckSensorQuality
that checks a value and a node PerformActionA
.They are two children of a ReactiveSequence.
CheckSensorQuality
returns SUCCESS unless some sensor data is bad, then it returns RUNNING and it starts its child SensorRecoveryLoop
(which is a RetryUntilSuccessful
node) that has a child RestartSensor
.
PerformActionA
return always RUNNING.
The expected behavior is that CheckSensorQuality
going to RUNNING should halt PerformActionA
. This seems to happen, but then the tree crashes with the above-mentioned error. What could I have done wrong in the logic of my nodes? I didn't get this error with version 4.0.2.
`[1685687135.585]: ReactiveSequence IDLE -> RUNNING
[1685687135.585]: CheckSensorQuality IDLE -> SUCCESS
[1685687135.585]: PerformActionA IDLE -> RUNNING
[1685687157.844]: CheckPoseQuality SUCCESS -> RUNNING
[1685687157.844]: SensorRecoveryLoop IDLE -> RUNNING
[1685687157.844]: RestartSensor IDLE -> RUNNING
[1685687157.845]: PerformActionA RUNNING -> IDLE
terminate called after throwing an instance of 'BT::LogicError'
what(): [ReactiveSequence]: only a single child can return RUNNING
================================================================================REQUIRED process [sequential_control-1] has died!`
Thank you in advance for your time and support!