From 5ae7653f0cfd552873a6da4ab71cfd5777819c3c Mon Sep 17 00:00:00 2001 From: 0marA Date: Wed, 11 May 2022 09:30:03 -0500 Subject: [PATCH 1/3] Cleaned up MotorControllers --- pages/Vendor/Motor Controllers.md | 11 +++++------ pages/Vendor/Pneumatics and Solenoids.md | 11 +++++++++++ pages/{Setup => Vendor}/Wifi Radio Configuration.md | 0 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 pages/Vendor/Pneumatics and Solenoids.md rename pages/{Setup => Vendor}/Wifi Radio Configuration.md (100%) diff --git a/pages/Vendor/Motor Controllers.md b/pages/Vendor/Motor Controllers.md index 1082acd..9ba9c0c 100644 --- a/pages/Vendor/Motor Controllers.md +++ b/pages/Vendor/Motor Controllers.md @@ -2,17 +2,17 @@ ### What are PWM Motor Controllers? -Let’s say that you were to run a motor without any kind of motor controller, voltage setter, or anything, just simply plugged into a power supply. The motor would continuously speed up and up as it continued to get power and would not stay at a continuous, constant speed. This is obviously not ideal for many applications and robotics is no exception. Try and imagine an autonomous robot sequence where the robot has to drive forward at a certain speed, without a motor controller for the drive train the robot would speed up much too fast and likely crash into something hurting other people or itself. +Let’s say that you were to run a motor without any kind of motor controller, voltage setter, or anything, just simply plugged into a power supply. The motor would continuously speed up and up as it continued to get power and would not stay at a continuous, constant speed. Try and imagine an autonomous robot sequence where the robot has to drive forward at a certain speed, without a motor controller for the drive train the robot would speed up much too fast and likely crash into something hurting other people or itself. -Now you should be able to see that running a motor without any kind of controller would be very dangerous and that controllers are absolutely vital to the operation of the robot or any other motor-based appliance. But how exactly does a motor controller actually manage to keep a constant speed? The answer is pulse width modulation or PWM for short. The basic function of a PWM motor controller is to send small pulses of power to the motor to keep it going at a constant speed. Try and imagine turning on a switch for a motor and then quickly turning it off. The motor would have begun to speed up, and when you turned off the power, it would’ve begun to slow down. However, being able to perfectly control a motor through this means would be nearly impossible for a human, but because the motor controller is based on a computer, it is able to calculate the perfect length and strength of the pulses to keep the motor at a consistent speed. The pulses are not powerful or long enough to make the motor go too fast, nor are they too weak and short to make the motor underperform. +How exactly does a motor controller actually manage to keep a constant speed? The answer is pulse width modulation or PWM for short. The basic function of a PWM motor controller is to send small pulses of power to the motor to keep it going at a constant speed. It is similair to turning on a switch for a motor and then quickly turning it off. Being able to perfectly control a motor through this means would be nearly impossible for a human, but because the motor controller is based on a computer, it is able to calculate the perfect length and strength of the pulses to keep the motor at a consistent speed. The pulses are not powerful or long enough to make the motor go too fast, nor are they too weak and short to make the motor underperform. ### Differences between motor controllers -What are the differences between different motor controllers? There are a wide variety of motor controllers that are used in different scenarios for different purposes. Here at Texas Torque, the motor controllers that are most commonly used are VictorSPX, Talon SRX, and RevRobotics SparkMax. The main practical difference between the three is the price and the electrical wiring between the controllers. Victors, SparkMaxs and Talons can be linked by CAN meaning that each motor controller is daisy-chained making the electrical debugging a bit more complex. On the programming side, CAN motors need PIDs, and you can take advantage of the “.addFollower” command for your motors. On the other hand, you can chose to not utilize CAN and instead directly link each controller to the RoboRIO, meaning that each motor has to be set individually when controlling/setting the speed. This method does not require any kind of PID to be used. +What are the differences between different motor controllers? There are a wide variety of motor controllers that are used in different scenarios for different purposes. The motor controllers that are most commonly used are CTRE VictorSPX, VictorSP, and Talon SRX, and RevRobotics SparkMax. The main practical difference between the three is the price and the electrical wiring between the controllers. VictorSPXs are smaller and lighter than SPs and support CAN. SparkMax's, and Talons can also be linked by CAN and support encoders. ### Code -Here at Texas Torque, we utilize submodules to handle our vendordeps, so we can write out TorqueSparkMax to define a SparkMax, VictorSPX for VictorSPX's, and TalonSRX for TalonSRX's. To add a follower for a motor, simply rewrite the motor name on a new line with the .addFollower command afterwards with the motor that you wish to have be a follower in parenthesis. It is not neccesary to define the follower motor, it will automatically be done. +Here at Texas Torque, we utilize wrapper classes for motor controllers to handle our vendordeps, so we can write out TorqueSparkMax to define a SparkMax, VictorSPX for VictorSPX's, and TalonSRX for TalonSRX's. But for other teams you can define your controller object class with either a PWMSparkMax, CANSparkMax, or TalonSRX, VictorSP, or VictorSPX. Torques wrapper classes allows us to add a follower to a motor, so simply rewrite the motor name on a new line with the .addFollower command afterwards with the motor that you wish to have be a follower in parenthesis. It is not neccesary to define the follower motor, it will automatically be done. ```java TorqueSparkMax leftDB1 = new TorqueSparkMax(Ports.LEFT_DB_1); @@ -21,10 +21,9 @@ leftDB1.addFollower(Ports.LEFT_DB_2); ### Problems and Solutions -* Problem: The motor is moving strangely (Rolling after input is false, stuttering, etc.) +- Problem: The motor is moving strangely (Rolling after input is false, stuttering, etc.) -Solution: Try to reconfigure the PID ## Credits Initially written by [Omar Afzal](https://github.com/0mara) in October 2021 - diff --git a/pages/Vendor/Pneumatics and Solenoids.md b/pages/Vendor/Pneumatics and Solenoids.md new file mode 100644 index 0000000..dd6468f --- /dev/null +++ b/pages/Vendor/Pneumatics and Solenoids.md @@ -0,0 +1,11 @@ +# Pneumatics and Solenoids + +Pneumatics are pressurized air cylinders that are controlled by solenoids to either extend or retract. They are powered by compressors and can be used all over a robot to perform a variety of tasks. The difference between the two is that a double solenoid can be left in an extended position + +## Programming + +To program a pneumatic cylinder, you control the solenoid which controls the pneumatic device. There are two types of solenoids, double or single. + +## Wiring + +To wire your pneumatics, you will first need to have a basic electronics setup. You can reference [this article](https://docs.wpilib.org/en/stable/docs/zero-to-robot/step-1/how-to-wire-a-robot.html). diff --git a/pages/Setup/Wifi Radio Configuration.md b/pages/Vendor/Wifi Radio Configuration.md similarity index 100% rename from pages/Setup/Wifi Radio Configuration.md rename to pages/Vendor/Wifi Radio Configuration.md From 93a6ea448c7072e4e45e2216a1bed5346589a080 Mon Sep 17 00:00:00 2001 From: 0marA Date: Thu, 12 May 2022 15:39:49 -0500 Subject: [PATCH 2/3] Pneumatics --- layout/static/imgs/pneumatics-subsystem.png | Bin 0 -> 56571 bytes pages/Vendor/Pneumatics and Solenoids.md | 48 ++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 layout/static/imgs/pneumatics-subsystem.png diff --git a/layout/static/imgs/pneumatics-subsystem.png b/layout/static/imgs/pneumatics-subsystem.png new file mode 100644 index 0000000000000000000000000000000000000000..1e901a7cd3d48c8d76096391b73fc34a99b3e3d0 GIT binary patch literal 56571 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 AKL7v# literal 0 HcmV?d00001 diff --git a/pages/Vendor/Pneumatics and Solenoids.md b/pages/Vendor/Pneumatics and Solenoids.md index dd6468f..980c4aa 100644 --- a/pages/Vendor/Pneumatics and Solenoids.md +++ b/pages/Vendor/Pneumatics and Solenoids.md @@ -1,11 +1,53 @@ # Pneumatics and Solenoids -Pneumatics are pressurized air cylinders that are controlled by solenoids to either extend or retract. They are powered by compressors and can be used all over a robot to perform a variety of tasks. The difference between the two is that a double solenoid can be left in an extended position +Pneumatics are pressurized air cylinders that are controlled by solenoids to either extend or retract. They are powered by compressors and can be used all over a robot to perform a variety of tasks. The difference between the two is that a double solenoid can be manually retracted from the extended position and also be set off, whereas a single solenoid will only be able to push out and when the solenoid is set to 0 it will retract. ## Programming -To program a pneumatic cylinder, you control the solenoid which controls the pneumatic device. There are two types of solenoids, double or single. +To program a pneumatic cylinder, you control the solenoid which controls the pneumatic device. + +```java +import edu.wpi.first.wpilibj.Solenoid; + +Solenoid solenoid = new Solenoid(PneumaticsModuleType.CTREPCM, Ports.SOLENOID); + +if (controller.getSolenoidButton()) solenoid.set(true); +else solenoid.set(false); +``` + +```java +import edu.wpi.first.wpilibj.DoubleSolenoid; +import edu.wpi.first.wpilibj.DoubleSolenoid.Value; + +DoubleSolenoid doubleSolenoid = new DoubleSolenoid(PneumaticsModuleType.CTREPCM, Ports.DOUBLE_SOLENOID_OUT, Ports.DOUBLE_SOLENOID_IN); + +if (controller.getSolenoidButton()) doubleSolenoid.set(Value.kForward); +else doubleSolenoid.set(Value.kReverse); +``` + +![SolenoidWiringDiagram](/static/imgs/pneumatics-subsystem.png) ## Wiring -To wire your pneumatics, you will first need to have a basic electronics setup. You can reference [this article](https://docs.wpilib.org/en/stable/docs/zero-to-robot/step-1/how-to-wire-a-robot.html). +To wire your pneumatics, you will first need to have a basic electronics setup including a PCM (Pneumatics Control Module). You can reference [this article](https://docs.wpilib.org/en/stable/docs/zero-to-robot/step-1/how-to-wire-a-robot.html). The PCM will be used to provide an output for the compressor, input for the pressure switch, and outputs for up to 8 solenoid channels (12V or 24V selectable). The PCM is connected to the roboRIO over the CAN bus and powered via 12V from the PDP. If there are not enough ports on the PCM for a robot, and additional one can be used. + +### Compressor + +The compressor can be wired from the Compressor Out port on the PCM and should use no higher than 18 gauge wire. + +### Pressure Switch + +The polarity of the terminals for the pressure switch are not important when connecting them to the input ports on the PCM. A pressure switch is required to compete in a FRC competition as it is what prevents a compressor from over compressing and causing a rupture. + +### Solenoids + +Each solenoid channel should be wired directly to a numbered pair of terminals on the PCM. A single acting solenoid will use one numbered terminal pair. A double acting solenoid will use two pairs. If your solenoid does not come with color coded wiring, check the datasheet to make sure to wire with the proper polarity. + +### Solenoid Voltage Jumper + +The PCM is capable of powering either 12V or 24V solenoids, but all solenoids connected to a single PCM must be the same voltage. The PCM ships with the jumper in the 12V position. To use 24V solenoids move the jumper from the left two pins to the right two pins. You may need to use a tool such as a small screwdriver, small pair of pliers, or a pair of tweezers to remove the jumper. + +## Problems and solutions + +- Problem: The solenoid light is turning on when the controller sends the signal, but the cylinder is not actuating. + Solution: Did you change the Voltage Jumper to the correct voltage? From 0cd4c9f25a7705ef63a5125f2ccf08efde38126e Mon Sep 17 00:00:00 2001 From: 0marA Date: Sat, 13 Aug 2022 11:34:09 -0500 Subject: [PATCH 3/3] Wrote It --- pages/Coding/Raspberry Pi NetworkTables.md | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 pages/Coding/Raspberry Pi NetworkTables.md diff --git a/pages/Coding/Raspberry Pi NetworkTables.md b/pages/Coding/Raspberry Pi NetworkTables.md new file mode 100644 index 0000000..5d2bcbb --- /dev/null +++ b/pages/Coding/Raspberry Pi NetworkTables.md @@ -0,0 +1,68 @@ +# Raspberry Pi NetworkTables + +A Raspberry Pi is often used on a robot for onboard vision processing. In order to communicate the values that your vision algorithm detects back to your robot code, you can upload the values to NetworkTables and then read them from the robot code. + +## WPILib Raspberry Pi OS + +While most articles on the internet will tell you to use the WPILib OS for a Raspberry Pi, in my finding its best to avoid it. This is because WPILib disabled WiFi and pip installing because they didn't want there to accidentally be a WiFi connection left enabled on a robot that could interfere with other robots in a competition. However, being unable to pip install will mean that you have to manually upload your libraries through the website interface. In my testing, I ran into a bug that wouldn't let me unzip the tar.gz file that I uplaoded to the pi. This left me with having to download the libary, transfer the library to a flash drive, connect the drive to the pi, mount the drive, move the files, unzip the files, move the files to the python library directory, and even through all of this work we ran into version compatability errors that made it a colossal headache and waste of time. I strongly recommend to just use a stock Raspbian Desktop OS (The GUI will come in handy more than you think). This way you can pip install and not worry about library installation. All that you need to remember to do is setup crontab and disable WiFi (Just click the WiFi icon on the desktop and turn it off!). + + +### Setting Up Crontab + +In order for your code to automatically run on startup, you will need to setup crontab to run the script whenever the pi boots up. To do this, first type +```python +crontab -e +``` +You will then be prompted for the editor of your choice. For beginners, I would recommend nano, so type 1. Now, you should see a file at /tmp/crontab.jaPtgW/crontab with a bunch of comments. Go to the very bottom of the file and then type: +```python +@reboot python3 /home/pi/Desktop/script.py +``` + +replacing your path and filename accordingly. + + +## Python NetworkTables + +```python +print("About to Connect to Network Tables") + team = 1477 + ip = "10.14.77.2" + notified = False + condition = threading.Condition() + + # notify as soon as connection is made + def connection_listener(connected, info): + with condition: + notified = False + condition.notify() + + NetworkTables.initialize(server=ip) + NetworkTables.addConnectionListener(connection_listener, immediateNotify=True) + with condition: + if not notified: + condition.wait() + + print("Connected to Network Tables") + ntinst = NetworkTablesInstance.getDefault() + tb = ntinst.getTable("cube_detection") + tb.getEntry("yawResidual").forceSetValue(1477) +``` + + +## Java NetworkTables +To read a value: + +```java +private NetworkTableInstance nTInstance = NetworkTableInstance.getDefault(); +private NetworkTable nTTable = nTInstance.getTable("cube_table"); +private Double entry = nTTable.getEntry("yawResidual").getDouble(9999); +``` + +To push a value: + +```java +private NetworkTableInstance nTInstance = NetworkTableInstance.getDefault(); +private NetworkTable nTTable = nTInstance.getTable("cube_table"); +private Double entry = nTTable.getEntry("yawResidual").getDouble(9999); +entry.forceSetNumber(1234) +``` \ No newline at end of file