# Software

- [Odometry](https://wiki.purduesigbots.com/software/odometry.md): Originally written by Team 5225A, the E-Bots PiLons. Thanks!
- [Path Planning](https://wiki.purduesigbots.com/software/path-planning.md): Motion Profiles and S-shaped driving paths.
- [Robotics Basics](https://wiki.purduesigbots.com/software/robotics-basics.md)
- [Arcade Drive](https://wiki.purduesigbots.com/software/robotics-basics/arcade-drive.md)
- [Tank Drive](https://wiki.purduesigbots.com/software/robotics-basics/tank-drive.md)
- [Joystick Deadzones](https://wiki.purduesigbots.com/software/robotics-basics/joystick-deadzones.md): D R I F T
- [Curvature (Cheesy) Drive](https://wiki.purduesigbots.com/software/robotics-basics/curvature-cheesy-drive.md): Fancy Arcade Drive for better robot control
- [Subsystem Toggling](https://wiki.purduesigbots.com/software/robotics-basics/subsystem-toggling.md)
- [Organizing Code](https://wiki.purduesigbots.com/software/organizing-code.md)
- [Code Style](https://wiki.purduesigbots.com/software/organizing-code/code-style.md): Style == Success
- [Code Styling Guide](https://wiki.purduesigbots.com/software/organizing-code/code-styling-guide.md): This guide exists to help your team standardize the look of code to prevent unnecessary merge conflicts and make code easier to read and understand. It's a sample code styleguide that was used by BLRS
- [Writing Good Comments](https://wiki.purduesigbots.com/software/organizing-code/writing-good-comments.md): // Good (Comments)
- [Version Control](https://wiki.purduesigbots.com/software/organizing-code/version-control.md): A component of software configuration management, version control, also known as revision control or source control, is the management of changes to documents, computer programs, and more.
- [Control Algorithms](https://wiki.purduesigbots.com/software/control-algorithms.md): Control algorithms help to keep robot performance consistent and accurate between matches.
- [Bang Bang](https://wiki.purduesigbots.com/software/control-algorithms/bang-bang.md): This article discusses the control scheme. For information about digital communication emulation, see Bit-bang.
- [PID Controller](https://wiki.purduesigbots.com/software/control-algorithms/pid-controller.md): A bang-bang control only uses the current value, a PID control schemes also may utilize information about the past values and predicted future values to optimize control
- [Basic Pure Pursuit](https://wiki.purduesigbots.com/software/control-algorithms/basic-pure-pursuit.md): Originally written by Sarah Xiang from VRC team 97963A and VEXU team ILLINI
- [Flywheel Velocity Control](https://wiki.purduesigbots.com/software/control-algorithms/flywheel-velocity-control.md): Methods for getting an accurate and robust velocity output for high speed mechanisms, such as flywheels.
- [Kalman Filter](https://wiki.purduesigbots.com/software/control-algorithms/kalman-filter.md)
- [Take Back Half (TBH) Controller](https://wiki.purduesigbots.com/software/control-algorithms/take-back-half-tbh-controller.md)
- [RAMSETE Controller](https://wiki.purduesigbots.com/software/control-algorithms/ramsete.md): A nonlinear feedback controller for correcting robot position in the global coordinate system.
- [Competition Specific](https://wiki.purduesigbots.com/software/competition-specific.md): This section is still WIP, more articles should be added here.
- [Operator Control](https://wiki.purduesigbots.com/software/competition-specific/operator-control.md)
- [Autonomous Control](https://wiki.purduesigbots.com/software/competition-specific/autonomous-control.md)
- [C++ Basics for VEX Robotics](https://wiki.purduesigbots.com/software/c++-basics-for-vex-robotics.md)
- [Basic Control Flow](https://wiki.purduesigbots.com/software/c++-basics-for-vex-robotics/basic-control-flow.md): if (starting\_to\_code) read\_this\_article();
- [Enumerations](https://wiki.purduesigbots.com/software/c++-basics-for-vex-robotics/enumerations.md)
- [Namespaces (::)](https://wiki.purduesigbots.com/software/c++-basics-for-vex-robotics/namespaces.md): namespace::feature()
- [Multiple Files (C/C++)](https://wiki.purduesigbots.com/software/c++-basics-for-vex-robotics/multiple-files-c-c++.md)
- [VEX Programming Software](https://wiki.purduesigbots.com/software/vex-programming-software.md): VEX Programming Software vary in complexity, platform, and supported VEX Competition micro controllers.
- [PROS](https://wiki.purduesigbots.com/software/vex-programming-software/pros.md): PROS Robotics Operating System (Yes it's recursive)
- [OkapiLib](https://wiki.purduesigbots.com/software/vex-programming-software/pros/okapilib.md): OkapiLib is a PROS library for programming VEX V5 robots. This library is intended to raise the floor for teams with all levels of experience.
- [vexide](https://wiki.purduesigbots.com/software/vex-programming-software/vexide.md): Open-source Rust runtime for VEX V5 robots.
- [Robot Mesh Studio (RMS)](https://wiki.purduesigbots.com/software/vex-programming-software/robot-mesh-studios.md): Flowol, Blockly, Python, C++ programming for VEX IQ, VEX Cortex and VEX V5
- [EasyC](https://wiki.purduesigbots.com/software/vex-programming-software/easyc.md): EasyC is a programming language for the VEX Cortex.
- [RobotC](https://wiki.purduesigbots.com/software/vex-programming-software/robotc.md): RobotC is an interpreted C-like programming language available for the VEX PIC and VEX Cortex.
- [VEXcode](https://wiki.purduesigbots.com/software/vex-programming-software/vex-coding-studio-vcs.md): VEXcode is VEX's software for programming V5 and VEX IQ products.
- [Midnight C](https://wiki.purduesigbots.com/software/vex-programming-software/midnight-c.md): The Midnight C platform, often referred to in the past as the "Makefile", is a cross-platform method of compiling native C code for the VEX Cortex.
- [General](https://wiki.purduesigbots.com/software/general.md): Topics more pertinent to general concepts, not restricted to vex.
- [Stall Detection](https://wiki.purduesigbots.com/software/general/stall-detection.md): Stall detection aims to prevent VEX Motors from overheating or tripping a Resettable Fuse by detecting high-current stall conditions in software.
- [Register Programming](https://wiki.purduesigbots.com/software/general/register-programming.md)
- [Sensors and Odometry in Autonomous](https://wiki.purduesigbots.com/software/general/sensors-and-odometry-in-autonomous.md): You can't really have good software without sensors, and the quality of the readings from your sensors is often the determining factor in having competitive code.
- [Embedded Programming Tips](https://wiki.purduesigbots.com/software/general/embedded-programming-tips.md)
- [Debugging](https://wiki.purduesigbots.com/software/general/debugging.md)
- [Bit Shift](https://wiki.purduesigbots.com/software/general/bit-shift.md): A bit shift is an operation which moves the bits in the binary representation of a number a specified number of locations left or right.
- [Bit Mask](https://wiki.purduesigbots.com/software/general/bit-mask.md): A bit mask is an operation which selects certain bits to be manipulated (or not manipulated) from a binary number.
- [Autoformatting](https://wiki.purduesigbots.com/software/general/autoformatting.md): Autoformating C/C++ code can be done with clang-format. The appropriate files to use this are below:
- [Finite State Machine](https://wiki.purduesigbots.com/software/general/finite-state-machine.md): A finite state machine, typically abbreviated simply as a "state machine", is a simple system to implement more intelligent scripted control to robot programs, particularly in autonomous code.
- [Data Logging](https://wiki.purduesigbots.com/software/general/data-logging.md)
- [Object Recognition](https://wiki.purduesigbots.com/software/object-recognition.md)
- [Red Green Buoy](https://wiki.purduesigbots.com/software/object-recognition/red-green-buoy.md)
- [AMS](https://wiki.purduesigbots.com/software/object-recognition/ams.md)
- [OpenCV](https://wiki.purduesigbots.com/software/object-recognition/opencv.md)
- [OpenNI](https://wiki.purduesigbots.com/software/object-recognition/openni.md)
- [AI in VRC: Pac-Man Pete](https://wiki.purduesigbots.com/software/ai-in-vrc-pac-man-pete.md): Pac-Man Pete: An extensible framework for building AI in VEX Robotics


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.purduesigbots.com/software.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
