Ideas for Control classes project

Hello everyone!

First, thanks for putting together this amazing autopilot system! I am impressed with the simplicity and power of this environment, which is a great tool for researchers and robotics enthusiasts!

Now, I am currently engaged in some control classes for my graduate specialization, and I am looking for ideas for my final project that we are going to develop over the next semester. I saw that the new ROS2 implementation of ROSplane has two controllers (Successive Loop Closure and Total Energy Controller). I thought that one idea would be to design a new controller and test it against the existing ones as a baseline. Do you guys have any resources that I can look at to get ideas for controllers that are not too complex to implement?

I saw that there is an RViz launch file to visualize the plane trajectory given the waypoints it should navigate to. Are there any other tools that I can use to provide a comparison of those controllers on aspects other than the trajectory of the plane itself?

Thanks!

The total energy controller and successive loop closure controllers were based on the book Small Unmanned Aircraft: Theory and Practice by Dr. Beard and McLain. In that book there is also a LQR controller, which is known to perform better than those other two methods and is commonly used in industry on many large aircraft. Maybe you could look at implementing that? The math has all been worked out, so it shouldn’t be too hard to implement. You can find a PDF download of the latest version here: https://github.com/byu-magicc/mavsim_public. You could also try something else like MPC, but I’m not sure what the best resource for that would be.

For comparing the performance of different controllers, we typically use plotjuggler for live plotting bugging purposes and matplotlib plots for nicer presentation plots. Plotjuggler can export ros2 bags to csv for importing into python. Both of these plot ros topics published by some portion of rosplane, which will give you a much clearer idea of how your autopilot is performing.

Hey @bsutherland333!

Thanks for all the advice! I will try to implement the LQR controller as you suggested. One question, tho: I saw that the ROSPlane repo has a branch for an LQR controller with a skeleton of what the module would look like. Is @Ian_Reid already working on this? I would love to get some ideas and advice from both of you on what you think would be needed to implement that controller.

I am working on a LQR controller for ROSplane. We are doing it as a tutorial/example on how to integrate Python code into the C++ code base, since a good chunk of researchers do their development in Python. This would just be showing how you can directly plug in your Python code into our code if you still wanted some of the bells and whistles that our controller or estimator have (state machine for the controller, gps initialization for the estimator etc.).

The point is that this will be just a very bare bones proof of concept for LQR to demonstrate this capability. It’s main purpose is not in the development of LQR, it would simply be a direct implementation of the Beard and McLain’s LQR in their book.

Hopefully this gives you context so you can move forward/ask us questions!