====== Lab 10 ====== ===== Planning ===== * During this lab, you should get a bit deeper understanding of the planning concepts presented during the lectures. * We will work with simple sampling-based planner, the code is not connected to ROS, as our main goal is to play with the planner itself, not with all the robotic infrastructure * Students do not necessarily need to code in this lab, but it's welcome to look at provided source codes to see connection between theory and (programming) reality ===== Prepare your computer ===== * Download {{courses:aro:tutorials:lab10-planning.zip | ZIP}}, unpack to some working directory * Since it need several Python libraties, it is good to create virtual environment for it cd go_to_your_folder_with_unzipped_file python3 -m venv venv . venv/bin/activate && pip install -r requirements.txt requirements.txt contourpy cycler fonttools importlib-resources kiwisolver matplotlib numpy packaging pillow pyparsing python-dateutil scipy shapely six zipp ==== Planner structure ==== * ''rrtPlanner.py'' contains basic implementation of RRT planner * ''polygonalMap.py'' environment (map) where obstacles are represented as polygons (using Shapely library) * ''pointRobot.py'' basic holonomic robot without shape * ''shapeRobot.py'' basic holonomic robot with a polygonal (arbirtary) shape * ''carLikeRobot.py'' implementation of CarLike robot of rectangular shape * ''planningExample.py'' our main working file which creates planning instances, you can run it within venv: (venv) > python3 planningExample.py ===== Holonomic planning ===== * In ''planningExample.py'', set up the holonomic planner in the main block: if __name__ == "__main__": setup = prepareStraightLinePlanner #or setup = prepareStraightLinePlannerShapeRobot * Run the script, it will plot the test scenario and results of planning ===== Non-holonomic planning ===== * In non-holonomic planning, robot cannot move arbitrarily in the space, but its motion is limited by internal 'kinematics' * In ''planningExample.py'', set up the holonomic planner in the main block: setup = prepareCarLikePlanner * Run the script, it will plot scneario and result of planning * Investigate how the kinematic expansion is planner, look at robot's method 'expand' ===== Path optimization ===== * You are provided with a non-optimal planner. * Discuss how to get 'better' plans even with non-optimal planners. * How are your suggestions compatible with holonomic or non-holonomic movements? * Discuss pros/cons of using optimal vs. non-optimal planners for certain tasks ===== Planner testing ===== * We will create success rate graphs and discuss how different planning settings influene performance, for example: * how size of the sampling-space (c-space) changes behavior * the presence of 'hard' obstacles * is planning with convex/non-cnvex obstacles same? ===== Troubleshooting ===== - How to test new (uknown) planner, which mistakes to avoid