mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 16:57:46 +08:00
Updated patrol.py: either the goal is reached or the plan has failed, send next waypoint. Node labels can be also set as waypoints
This commit is contained in:
+20
-11
@@ -11,40 +11,49 @@ currentIndex = 0
|
|||||||
def callback(data):
|
def callback(data):
|
||||||
global currentIndex
|
global currentIndex
|
||||||
if data.data:
|
if data.data:
|
||||||
rospy.loginfo(rospy.get_caller_id() + "Goal %d reached! Publishing next goal in 1 sec...", int(waypoints[currentIndex]))
|
rospy.loginfo(rospy.get_caller_id() + "Goal '%s' reached! Publishing next goal in 1 sec...", waypoints[currentIndex])
|
||||||
currentIndex = (currentIndex+1) % len(waypoints)
|
|
||||||
else:
|
else:
|
||||||
rospy.loginfo(rospy.get_caller_id() + "Goal %d failed! Retrying in 1 sec...", int(waypoints[currentIndex]))
|
rospy.loginfo(rospy.get_caller_id() + "Goal '%s' failed! Publishing next goal in 1 sec...", waypoints[currentIndex])
|
||||||
|
|
||||||
|
currentIndex = (currentIndex+1) % len(waypoints)
|
||||||
|
|
||||||
rospy.sleep(1.)
|
rospy.sleep(1.)
|
||||||
|
|
||||||
msg = Goal()
|
msg = Goal()
|
||||||
msg.node_id = int(waypoints[currentIndex])
|
if waypoints[currentIndex].isdigit():
|
||||||
msg.node_label = ""
|
msg.node_id = int(waypoints[currentIndex])
|
||||||
|
msg.node_label = ""
|
||||||
|
else:
|
||||||
|
msg.node_id = 0
|
||||||
|
msg.node_label = waypoints[currentIndex]
|
||||||
msg.header.stamp = rospy.get_rostime()
|
msg.header.stamp = rospy.get_rostime()
|
||||||
rospy.loginfo("Publishing goal %d! (%d/%d)", msg.node_id, currentIndex+1, len(waypoints))
|
rospy.loginfo("Publishing goal '%s'! (%d/%d)", waypoints[currentIndex], currentIndex+1, len(waypoints))
|
||||||
pub.publish(msg)
|
pub.publish(msg)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
rospy.init_node('patrol', anonymous=True)
|
rospy.init_node('patrol', anonymous=False)
|
||||||
rospy.Subscriber("/rtabmap/goal_reached", Bool, callback)
|
rospy.Subscriber("/rtabmap/goal_reached", Bool, callback)
|
||||||
rospy.sleep(1.) # make sure that subscribers have seen this node before sending a goal
|
rospy.sleep(1.) # make sure that subscribers have seen this node before sending a goal
|
||||||
|
|
||||||
# send the first goal
|
# send the first goal
|
||||||
msg = Goal()
|
msg = Goal()
|
||||||
msg.node_id = int(waypoints[currentIndex])
|
if waypoints[currentIndex].isdigit():
|
||||||
msg.node_label = ""
|
msg.node_id = int(waypoints[currentIndex])
|
||||||
|
msg.node_label = ""
|
||||||
|
else:
|
||||||
|
msg.node_id = 0
|
||||||
|
msg.node_label = waypoints[currentIndex]
|
||||||
while rospy.Time.now().secs == 0:
|
while rospy.Time.now().secs == 0:
|
||||||
rospy.loginfo("Waiting clock...")
|
rospy.loginfo("Waiting clock...")
|
||||||
rospy.sleep(.1)
|
rospy.sleep(.1)
|
||||||
msg.header.stamp = rospy.Time.now()
|
msg.header.stamp = rospy.Time.now()
|
||||||
rospy.loginfo("Publishing goal %d! (%d/%d)", msg.node_id, currentIndex+1, len(waypoints))
|
rospy.loginfo("Publishing goal '%s'! (%d/%d)", waypoints[currentIndex], currentIndex+1, len(waypoints))
|
||||||
pub.publish(msg)
|
pub.publish(msg)
|
||||||
rospy.spin()
|
rospy.spin()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if len(sys.argv) < 3:
|
if len(sys.argv) < 3:
|
||||||
print("usage: patrol.py waypointA waypointB waypointC ... (at least 2 waypoints)")
|
print("usage: patrol.py waypointA waypointB waypointC ... (at least 2 waypoints, can be node id or label)")
|
||||||
else:
|
else:
|
||||||
waypoints = sys.argv[1:]
|
waypoints = sys.argv[1:]
|
||||||
rospy.loginfo("Waypoints: [%s]", str(waypoints).strip('[]'))
|
rospy.loginfo("Waypoints: [%s]", str(waypoints).strip('[]'))
|
||||||
|
|||||||
Reference in New Issue
Block a user