Files
Arborflow/test_rmul_2025.xml

145 lines
6.0 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8"?>
<root BTCPP_format="4">
<BehaviorTree ID="check_game_start">
<Fallback>
<IsGameStatus name="IsGameStart"
max_remain_time="420"
min_remain_time="0"
expected_game_progress="4"
key_port="{@referee_gameStatus}"/>
<ForceFailure>
<Sequence>
<PublishSpinSpeed spin_speed="0.0"
duration="0.0"
topic_name="cmd_spin"/>
<PublishTwist v_y="0.0"
v_yaw="0.0"
v_x="0.0"
duration="0.0"
topic_name="cmd_vel"/>
</Sequence>
</ForceFailure>
</Fallback>
</BehaviorTree>
<BehaviorTree ID="check_robot_status">
<Fallback>
<IsStatusOK ammo_min="0"
heat_max="350"
hp_min="200"
key_port="{@referee_robotStatus}"/>
<ForceFailure>
<Fallback>
<IsRfidDetected friendly_supply_zone_exchange="false"
friendly_supply_zone_non_exchange="true"
center_gain_point="false"
friendly_fortress_gain_point="false"
key_port="{@referee_rfidStatus}"/>
<PubNav2Goal goal="0;0;0"
topic_name="goal_pose"/>
</Fallback>
</ForceFailure>
</Fallback>
</BehaviorTree>
<BehaviorTree ID="rmul_2025">
<KeepRunningUntilFailure>
<ForceSuccess>
<ReactiveSequence>
<SubTree ID="check_game_start"/>
<PublishSpinSpeed spin_speed="7.0"
duration="0.0"
topic_name="cmd_spin"/>
<SubTree ID="check_robot_status"/>
<PubNav2Goal goal="4.65;-3.5;0"
topic_name="goal_pose"/>
</ReactiveSequence>
</ForceSuccess>
</KeepRunningUntilFailure>
</BehaviorTree>
<!-- Description of Node Models (used by Groot) -->
<TreeNodesModel>
<Condition ID="IsGameStatus">
<input_port name="max_remain_time"
default="420"
type="int">Maximum remaining time (s)</input_port>
<input_port name="min_remain_time"
default="0"
type="int">Minimum remaining time (s)</input_port>
<input_port name="expected_game_progress"
default="4"
type="int">Expected game progress stage</input_port>
<input_port name="key_port"
default="{@referee_gameStatus}"
type="pb_rm_interfaces::msg::GameStatus_&lt;std::allocator&lt;void&gt; &gt;">GameStatus port on blackboard</input_port>
</Condition>
<Condition ID="IsRfidDetected">
<input_port name="friendly_supply_zone_exchange"
default="false"
type="bool">己方与兑换区重叠的补给区</input_port>
<input_port name="friendly_supply_zone_non_exchange"
default="false"
type="bool">己方与兑换区不重叠的补给区 / RMUL 补给区</input_port>
<input_port name="center_gain_point"
default="false"
type="bool">中心增益点(仅 RMUL 适用)</input_port>
<input_port name="friendly_fortress_gain_point"
default="false"
type="bool">己方堡垒增益点</input_port>
<input_port name="key_port"
default="{@referee_rfidStatus}"
type="pb_rm_interfaces::msg::RfidStatus_&lt;std::allocator&lt;void&gt; &gt;">RfidStatus port on blackboard</input_port>
</Condition>
<Condition ID="IsStatusOK">
<input_port name="ammo_min"
default="0"
type="int">Lower then minimum ammo will return FAILURE</input_port>
<input_port name="heat_max"
default="350"
type="int">Maximum heat. NOTE: Sentry heat limit is 400</input_port>
<input_port name="hp_min"
default="300"
type="int">Minimum HP. NOTE: Sentry init/max HP is 400</input_port>
<input_port name="key_port"
default="{@referee_robotStatus}"
type="pb_rm_interfaces::msg::RobotStatus_&lt;std::allocator&lt;void&gt; &gt;">RobotStatus port on blackboard</input_port>
</Condition>
<Condition ID="PubNav2Goal">
<input_port name="goal"
default="0;0;0"
type="geometry_msgs::msg::PoseStamped_&lt;std::allocator&lt;void&gt; &gt;">Expected goal pose that send to nav2. Fill with format `x;y;yaw`</input_port>
<input_port name="topic_name"
default="__default__placeholder__"
type="std::string">Topic name</input_port>
</Condition>
<Action ID="PublishSpinSpeed">
<input_port name="spin_speed"
default="0.000000"
type="double">Angular Z velocity (rad/s)</input_port>
<input_port name="duration"
type="std::chrono::milliseconds">Publish then sleep duration in milliseconds</input_port>
<input_port name="topic_name"
default="__default__placeholder__"
type="std::string">Topic name</input_port>
</Action>
<Action ID="PublishTwist">
<input_port name="v_y"
default="0.000000"
type="double">Linear Y velocity (m/s)</input_port>
<input_port name="v_yaw"
default="0.000000"
type="double">Angular Z velocity (rad/s)</input_port>
<input_port name="v_x"
default="0.000000"
type="double">Linear X velocity (m/s)</input_port>
<input_port name="duration"
type="std::chrono::milliseconds">Publish then sleep duration in milliseconds</input_port>
<input_port name="topic_name"
default="__default__placeholder__"
type="std::string">Topic name</input_port>
</Action>
</TreeNodesModel>
</root>