aerostack2 / aerostack2/project_gazebo

mission_behavior_tree.py doesn't start the behavior reliably

オープン
#10 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
4
フォーク
15
PR マージ指標
30日以内にマージされた PR はありません

説明

When running mission_behavior_tree.py, I run into the issue that the actual behavior won't reliably start. In order to fix this, I modified the script like this

```
import rclpy
from rclpy.node import Node
from rclpy.qos import QoSProfile, ReliabilityPolicy, HistoryPolicy
from std_msgs.msg import String
import time

class StartBehaviorTree(Node):
"""Drone interface base node"""
def __init__(self, namespace):
super().__init__('start_bt', namespace=namespace)

# Create a reliable QoS profile
qos_profile = QoSProfile(
reliability=ReliabilityPolicy.RELIABLE,
history=HistoryPolicy.KEEP_ALL,
depth=10
)

self.start_pub = self.create_publisher(
String, "start", qos_profile)

# Wait for publisher to be ready
while self.start_pub.get_subscription_count() == 0:
self.get_logger().info('Waiting for subscribers...')
time.sleep(0.1)

# Publish message
msg = String()
msg.data = "Start behavior tree"
self.start_pub.publish(msg)
self.get_logger().info('Published start message')

# Ensure message is sent before shutting down
time.sleep(0.5)

# Initiate shutdown
self.get_logger().info('Initiating node shutdown')
self.destroy_node()

if __name__ == "__main__":
rclpy.init()
start_bt = StartBehaviorTree(namespace="drone0")
rclpy.spin_once(start_bt)
rclpy.shutdown()
```

This makes the behavior launch every time. The one downside is that this node won't shutdown properly.

It seems that the publisher's message to /drone0/start in the original script isn't broadcasting properly. This might be due to the node shutting down too fast, or because of a lack of connection to subscribers. Whenever I publish manually using the ROS2 CLI, the behavior always launches, so I'm assuming there is some kind of timing issue going on.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。