Hello,
We are having some issues with are chassis in our teleop. Our control hub and expansion hub are connected. Until last night, the chassis motors, which are connected to the control hub, were working. Since I powered them on this morning, they are not receiving power. I have all 4 of them connected to the 4 slots on the control hub, as well as their encoders. The telemetry shows that the motors are being powered, but nothing is physically happening. The same motors plugged into the expansion hub are working, but we don’t have any available slots on the expansion hub. Can anyone help us with this? We have a competition in a few days and our chassis is not working at all.
This is very likely a REV customer support question. One thing I would recommend is unplugging everything from the control hub, and trying to plug a single motor into a single slot. It’s possible that somewhere there’s a short and the control hub is detecting that short (in the form of a current overload) and preventing the motor ports from passing power. It’s also possible that something has failed, like the motor port power supply or the motor controller chip, and so none of the motors are getting power because of that. REV would be the best at troubleshooting these kinds of hardware problems.
-Danny
I tried unplugging everything from the Control hub, including the expansion hub. I tried to test just one single motor running in one direction but nothing worked. I think its a good idea to call REV customer support. I’ll contact them and see what they say.
Thanks so much for your help.
-Amey
When you tested the motor, did you set its mode to “RUN_WITHOUT_ENCODER”? I’ve seen instances where the encoders are fine, but “RUN_WITH_ENCODER” just seems to fight with itself and the motor never moves. Just a quick thought while you’re testing.
-Danny
I am not using encoders, the run without encoder command is there for all 4 motors. I even tried just disconnecting the encourage to see if the motors individually would respond to any commands, but nothing works so I have contacted rev support and am waiting to hear back from them. The thing that surprised me the most is that it was working fine then suddenly stopped working. Thanks for trying to help though.
Hello,
During further testing of the motors, i tried the FR.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);. I was able to notice that this created resistance in the motors when the teleopn was run, even though they continued to not move. This leads me to believe that the motors are indeed receiving power. However, i am not sure what else I can try to make the motors run. The motors also work when commanded to go to a certain position in autonomous mode.
If I recall correctly, the DcMotor.ZeroPowerBehavior.BRAKE merely connects the pins together when power is not being applied, so that electricity generated by the motor is fed back into the motor to create a feedback loop that provides some minimal amount of braking action. The resistance provided, as such, is not an indication that the motors are receiving power but that the electrical connection works. The problem could still be a number of electrical failures in the power delivery system (power supply, power regulator, PTC, etc…).
-Danny
@amey.mishra2020 Wait, did you really mean to say that you can control the motors in RUN_TO_POSITION mode?
Can you share your robot code with us? And have you tried running a very very very simple program to move a motor using RUN_WITHOUT_ENCODERS?
-Danny
Oh ok, thanks for the explanation of the brake command. Yeah, I was using the RUN_TO_POSITION command, and it was working. I also tried a very simple code, but it did not work. This led me to investigate different causes since it meant that the motors were being supplied with power. My robot code for my chassis: Initially, i was using a different technique for controlling my chassis. Also, it seems like my controller was damaged so it was sending varying values. After changing the controller and changing the control system to this above, i reset my hub and reupdated the software. I am able to control my chassis now. I believe that it was mainly an issue with either my code or my controller sending incorrect values. I am able to control my robot now and it seems like the issue has been resolved.
Thank you for all your help. Me and my team appreciate it a lot.
Chassis code:
package org.firstinspires.ftc.teamcode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
import com.qualcomm.robotcore.hardware.DcMotor;
@TeleOp(name = “Strafetest”, group = “TeleOp”)
public class Strafetest extends LinearOpMode {
private DcMotor FL;
private DcMotor FR;
private DcMotor BL;
private DcMotor BR;
@Override
public void runOpMode() {
initializeHardware();
telemetry.addData("Status", "Initialized");
telemetry.update();
waitForStart();
while (opModeIsActive()) {
double r = Math.hypot(-gamepad1.right_stick_x, gamepad1.right_stick_y);
double robotAngle = Math.atan2(gamepad1.right_stick_y, -gamepad1.right_stick_x) - Math.PI / 4;
double leftX = -gamepad1.left_stick_x / 1.5;
final double v1 = r * Math.cos(robotAngle) + leftX;
final double v2 = r * Math.sin(robotAngle) - leftX;
final double v3 = r * Math.sin(robotAngle) + leftX;
final double v4 = r * Math.cos(robotAngle) - leftX;
FL.setPower(v1 * 0.9);
FR.setPower(v2 * 0.9);
BL.setPower(v3 * 0.9);
BR.setPower(v4 * 0.9);
telemetry.addData("Front Left Power", FL.getPower());
telemetry.addData("Front Right Power", FR.getPower());
telemetry.addData("Rear Left Power", BL.getPower());
telemetry.addData("Rear Right Power", BR.getPower());
telemetry.update();
}
}
private void initializeHardware() {
FL = hardwareMap.dcMotor.get("frontLeft");
FR = hardwareMap.dcMotor.get("frontRight");
BL = hardwareMap.dcMotor.get("rearLeft");
BR = hardwareMap.dcMotor.get("rearRight");
FR.setDirection(DcMotor.Direction.FORWARD);
BR.setDirection(DcMotor.Direction.REVERSE);
FL.setDirection(DcMotor.Direction.FORWARD);
BL.setDirection(DcMotor.Direction.FORWARD);
FL.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
FR.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
BL.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
BR.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
FL.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
BL.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
BR.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
FR.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
}
}