# Resources

#### Java

---

Java is the programming language we use to write the code that enables the robot to do anything useful or interesting. You have know how to write software in Java to be able to program our robots.

If you don't have any experience programming, it can feel daunting. You have to learn how to think in a specific way using a language that you don't know yet. Fortunately, there are many resources available. The [free Java course on CodeAcademy](https://www.codecademy.com/learn/learn-java) is a great way to learn Java at your own pace. You'll start from the basics and learn everything you need to know to program effectively.

#### Git

---

Git is a version control system for tracking changes across files in a project (aka repository). It is what enables collaborative software development and is used by every programmer. Github is a website that hosts git repositories. There a lots of programs and apps to manage git for you, but my preferred way is the command line. [CodeAcademy has a good course on git as well](https://www.codecademy.com/resources/docs/git).

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" height="315" src="https://www.youtube.com/embed/hwP7WQkmECE?si=onkfGbzHPzW0qgIt" title="YouTube video player" width="560"></iframe>

You can access all of the code YETI has ever written on our [GitHub page](https://github.com/Yeti-Robotics).

Some repositories worth looking at:

- [2024 robot code](https://github.com/Yeti-Robotics/crescendo-java-2024)
- [Scouting site](https://github.com/Yeti-Robotics/polar-edge-analytics)
- [The YETI Wiki you're reading this on!](https://github.com/Yeti-Robotics/yeti-docs)

#### WPILib

---

- [What is WPILib?](https://docs.wpilib.org/en/stable/docs/software/what-is-wpilib.html)
    - [the same content but in pdf ](https://docs.wpilib.org/_/downloads/en/stable/pdf/)
- [WPILib Java API](https://github.wpilib.org/allwpilib/docs/release/java/index.html)

Also highly recommended is the [Command-Based Programming](https://docs.wpilib.org/en/stable/docs/software/commandbased/index.html) for getting familiar with the concepts and APIs. Specifically these pages;

- [Commands](https://docs.wpilib.org/en/stable/docs/software/commandbased/commands.html)
- [Command Compositions](https://docs.wpilib.org/en/stable/docs/software/commandbased/command-compositions.html)
- [Organizing Command-Based Robot Projects](https://docs.wpilib.org/en/stable/docs/software/commandbased/command-compositions.html)

My presentation on some basic WPILib concepts

<iframe allowfullscreen="allowfullscreen" frameborder="0" height="382" src="https://docs.google.com/presentation/d/e/2PACX-1vQHv12VjQukWaEph05e_Ryhjbq6v4ZU79GA-_P60fFq4LH5808uwoAI8UUQM522h4Owv_rYOrwGswhq/embed?start=false&loop=false&delayms=600000000" style="width: 646px; height: 382px;" width="646"></iframe>

[A textbook on robot development](https://docs.google.com/document/d/1lXQHJq2dun6-6_NBmgQbvAUGaf32TEzS3tWzN8O4e_s/edit#heading=h.72hzf3vxxwae) by team TER3M Robotics

##### Control Theory

---

[Teaching Rocks to Think](https://trickingrockstothink.com) is a great blog about [Programming applied to FRC.](https://trickingrockstothink.com/blog_posts/2019/09/07/systems_and_controls.html)

There are five blog posts pertaining to control theory.

- [Systems &amp; Control Engineering](https://trickingrockstothink.com/blog_posts/2019/09/07/systems_and_controls.html)
- [Mathematical Models of the World](https://trickingrockstothink.com/blog_posts/2019/09/20/math_models.html)
- [PID &amp; Controller Design](https://trickingrockstothink.com/blog_posts/2019/10/07/pid_ctrl_design.html)
- [Tuning PID](https://trickingrockstothink.com/blog_posts/2019/10/19/tuning_pid.html) - This one is really cool! It has an interactive guide to tuning a PID loop
- [Supplemental - Vertical Arm](https://trickingrockstothink.com/blog_posts/2019/10/26/controls_supp_arm.html)