### Introduction * This final programming assignment pulls together what we've learned up to now * You will practice detecting fiducials and using them to do simple navigation * You will have to make sure the camera sees the fiducial and then navigates to it * The task seems quite simple but it requires mastery of several aspects of Robotics at once * What you learn here will very likely be directly applicable to your projects. * Note that this assignment will only be done IRL.
### Expected preparation * Remember that the Platform and BranBot robots are preconfigured for fiducials where as the turtlebots will need some packages installed. * Before tackling the full assignment, experiment with the fiducials IRL interactively * You have to write a test program that prints out information of the fiducial it sees * You can choose to use OpenCV's fiducial algorithms by themselves or use the aruco_detect layer * Re-read PRR Chapter 2 to refresh your memory of coordinates and tfs/
### Additional references and resources * [Ubiquity Robotics Fiducial Follow](https://github.com/UbiquityRobotics/demos/tree/master/fiducial_follow) * [Ubiquity Robotics Fiducials](https://learn.ubiquityrobotics.com/fiducials) * More generic CV: [OpenCV aruco detection](https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html) * ROS Oriented: [aruco_detect](http://wiki.ros.org/aruco_detect) * [ROS Wiki tutorials on the tf2 package](http://wiki.ros.org/tf2/Tutorials). * [This](https://www.rosroboticslearning.com/rigid-body-transformations) may help you understand transforms better. * The [tf cheatsheet in the labnotebook](https://campusrover.github.io/labnotebook2/faq/tf/tf_cheatsheet/?h=cheat)
### Requirements for the PA * Setup * Four red blocks in a square with about 2m edges (you can tweak this if you need to) * Fiducial taped to each of the blocks, facing inwards * Robot in the center of the square * roslaunch your package * The robot spins in place until it seems one (or more) fiducials * It drives slowly up to one, and returns to the center * And does it for the other three `
### Steps 1. Study and understand the `mapper.py` file. 2. Change the `fid_ids` parameter of the `mapper.py` file to match the ids of your fiducials. 3. Complete the `nav_real.py` file such that the robot: 1. rotates in place to scan all the target fiducials; and 2. moves to each target fiducial in turn. 4. Complete the `nav_sim.py` file such that the robot: 1. rotates in place to scan all the target fiducials; and 2. moves to each target fiducial in turn.
### The Skeleton Code (Real) 1. `bringup` (onboard the robot) 2. `roslaunch fiducial_nav fiducials_real.launch` (on your vnc) 3. `rosrun rviz rviz` (on your vnc. Tune the RViz to visualize what you want.) 4. `rosrun fiducial_nav nav_real.py` * [Sample Solution - IRL](https://www.youtube.com/watch?v=3K-Q4WguUSE&list=PLWp7_Yk4l1aPcMGxCCvqKCSwnkTBBInI3&index=78)
### What to submit * A correctly structured ROS package including * Nicely commented python source files * Readme how to run it * Appropriate launch file * Video of your program running * IRL * Best to put the video on youtube and give the link * In your own voice, explain how the code works