04: Discover objects in enviroment - Interbotix/turtlebot2i GitHub Wiki

Find objects, capture locations and navigate between locations

01. Follow previous guides from this wiki:

The previous wiki documents will help with this guide:

Getting-Started

Teleoperation-and-Navigation

02. Print and place signs:

https://github.com/Interbotix/turtlebot2i/tree/master/turtlebot2i_misc/zoning_demo_signs

Example signs are pre-trained in the find_object_2d database. The find_object_2d package is used as part of the turtlebot_zoning_demo. It uses OpenCV feature matching to find objects and estimate angle and rotation. In conjunction with the depth data and the robot's position in the world we are given an accurate estimation of an object's position in 3D space.

03. Bringup robot:

For best results, first use the robot to build a map of the environment. Then start the robot in localization mode:

roslaunch turtlebot2i_bringup turtlebot2i_demo1.launch localization:=true

04. Find objects:

As the robot moves around it is continuously checking for the presence of the trained objects in the sensor's view. When an object is found a transform frame is generated by the find_object package. These transform frames are monitored by the zone_detection_node and when available their position and orientation information is stored.

While monitoring in RViz you can subscribe to zone_visualization_marker to visualize the marker array signifying the location of the detected objects.

05. Navigate to discovered objects:

Once the signs have been discovered it is easy to navigate between their locations in the map. The zone_destination_node listens for messages published to the zone_destination_request topic. If the requested zone has been identified the move_base action client will receive a goal and the navigation stack will attempt to bring the robot to the destination safely.

rostopic pub /zone_destination_request std_msgs/String "charging_zone" --once

rostopic pub /zone_destination_request std_msgs/String "pickup_zone" --once

rostopic pub /zone_destination_request std_msgs/String "sorting_zone" --once

References: