Hello everyone. This is our teams first year in FTC and we have run into some problems getting started on the programming side. I have read quite of few of the guides and the problem I have run into is that no matter what I try the Jaguar motor controller blinks yellow which indicated that it is not initialized in the code. These are the steps that I have taken so far:
Connected everything as shown in the "Getting Started with the 2012 FRC Control System pdf. (There is a small problem with the document. On page 13 it shows the motor controller connected to the white PWM pins on the sidecar while on page 11 it shows it connected to the black pins which I believe are for sensors or spikes from what I’ve read.)
My setup has one difference. There is only one Jaguar motor controller connected. It is connected under PWM 1 on the sidecar.
Flashed the cRIO successfully and assigned it the correct IP address.
Compiled a program after downloading the WPIlib file that was missing.
(I was using the simple robot template for this.)
Uploaded it to the cRIO.
Power cycle.
Run autonomous and driver control from the driver station.
After modifying the code in countless ways I still have had no success. I have tried changing the class to iterativerobot as well as using the Jaguar class with no success.
I was wondering if anyone could shoot some code my way with a few examples of how to get this working. I’m sure its something simple I’m overlooking. I was also wondering if anyone could tell me or point me to a document that explains what CAN is and what the advantages and disadvantages of it are?
Solid Green Full-speed forward
Solid Red Full-speed reverse
Fault Conditions Slow Flashing Yellow Loss of CAN or servo link
Slow Flashing Red Fault
Calibration or CAN Conditions
Flashing Red and Green Calibration mode active
Flashing Red and Yellow Calibration mode failure
Flashing Green and Yellow Calibration mode success
Slow Flashing Green CAN ID assignment mode Fast Flashing Yellow Current CAN ID (count flashes to determine ID)
Flashing Yellow CAN ID invalid (that is, Set to 0) awaiting valid ID assignment
Flashing Yellow is almost always “no PWM input”. Make sure the wiring is correct from the Digital Sidecar - white is always signal.
^Hah if only there was a like button. And a thanks one to add to that.
EDIT: To clarify the thanks goes to Don for the information provided
I’ve seen that table but I’ve also seen someone say it happens when the code never references the controller. I was just wondering if someone could throw code that ran a motor at 50% in autonomous. Default module positions and PWM 1 connected.
As for checking connections. I have a few times and that is exactly why I am perplexed. I have read in one other thread that someone had this problem with 3 out of 4 of their Jaguars. Nonetheless I will check again on Tuesday when I am in front of the setup. Thank for the help. If anyone has additional ideas or code they could share I would really appreciate it.
You’ve done Step 1: make sure everything is plugged in. How about Step 0.5: make sure everything has power?
Your Jaguar has power; otherwise its light would not be blinking.
Your cRIO has power; otherwise you would not have communication.
What about your Digital Sidecar? What is its 12 volt power input wired to? Are the BATT, +5v, and +6v LEDs lit? Is the Robot Signal Light blinking, and if so, in what pattern?
There is a Like button.
In the upper right on the bar topping each post is an icon of a set of scales that will say “Add to Don’s reputation”.
You can click on that and add a thank you.
Don will get any note from you and it will tell him the post you Liked.
Is that the cable that’s reminiscent of floppy disk drive cables?
I have checked power just by looking at the lights but I suppose poking around with a multimeter would not hurt.
I have actually rewired the whole thing once so the wiring should not be the problem but I will make sure to triple check it. Maybe try another controller to make sure I don’t have a bad one.
I rechecked all the wiring and everything is correct. I’m not sure what the lights next to “RELAY” on the sidecar signify but they light up. Sometimes one of them is not lit up though. The motor controller continues to blink just as before. I will post my code here, perhaps someone can find something I did wrong.
The only other thing I can think of is possibly flashing the motor controllers but it did not say to do that unless you are using CAN.
EDIT: Just a note on the commented SetExpiration. I did have that in the code at one point. I commented it as it was unclear to me exactly what it did but I was just trying a few things.
I just ran the lab view demo program and the motor spins so I now know whatever I am doing wrong is in code or software configuration. I would appreciate it if someone could look at the code I posted and tell me what I am missing in there. Thank you for the link though, definitely something that could be very useful in the future.
Uhhh – If you just ran the LABVIEW demo program with no troubles, but your troubles are in C++, I gotta ask… have you RE-FLASHED your cRio in between? There are different images on the cRio for Java, C++, and Labview.
They are telling you that the Relay outputs are being enabled and commanded into one or the other state (red or green). A Relay is also known as a Spike, you have one in the KoP and it should be used to run your air compressor if you are using pneumatics.
That is worrisome, because if you are not deliberately commanding them on, why are they on? They shouldn’t be.
I did make sure to change the firmware back to the c++ firmware and I found an example that runs the motor. I will look into it more to see what it is that I did differently. I believe the code I wrote only references the PWM pins but it does not make the Jaguar react. This is definitely a fault in my code I’m just unsure of what exactly it is.
Ok – so I’ve taken a longer look at the code and there are a number of issues. Rather than going over each one individually, I’m going to ask why you don’t start with the “FRC SimpleRobot” template instead of trying to write from scratch. The program you have here uses things that the SimpleRobot class doesn’t use in the template. That’s not a bad thing if you’re experienced, but it appears you may be pretty new to this. One of the big items here, however, is that OperatorControl() is called ONCE and you need to have a “while isOperatorControl() { … }” loop or else it’ll call your code, you set a few things, and then a millisecond later, you’re no longer running your robot code. It is quite possible that your function calls work on the Jaguar itself, but since SimpleRobot is not being used properly, it appears to be unsuccessful.
I would suggest starting with the template and modifying from there. It’ll likely be much less problematic. Also, I’d suggest taking the SimpleRobot docs from the help file and print them out, STUDY them, and highlight/make-notes.
Then if it’s still a problem, send me a PM with your phone number and we’ll get on the phone and talk it through.
Thanks so much! The reason I wrote my own is since the simplerobot template did not do anything. I thought the wait would cause it to spin for 2 seconds and I intended it to be a quick linear run through the code that spun a motor for two seconds and exited. I really appreciate the help.
You’re welcome. I thought that the SimpleRobot demo example did do a drive forward for 2 seconds in autonomous and also did arcade drive during teleop though. Let me know how things turn out.
It’s so strange that I suspect you either have a broken Digital Sidecar or a faulty cable connecting it to the DIO module in the cRIO. Do you have access to any others to try swapping them out?
Unfortunately I do not. There is one little mark on the cable that looks funny so it isn’t impossible that the erratic behavior is caused by the cable however I have gotten it to run with another example program so if it is a problem it is a problem it should stop working if I run it a few times and wiggle the cable around. I will make sure to check that as well.
EDIT:
Simple robot does indeed do those things at least the code suggests it should but the last time I ran it absolutely nothing happened. I will try again. The main difference I have spotted between the example code that I ran and worked and simple robot is the working code use the “new” c++ keyword to allocate memory for a “RobotDrive” object instead of the way the simple robot and my code have it done. I should definitely see if that fixes it although it should not have any effect unless the code is doing something really weird behind the scenes.
If you are heading into “strange-land” possibly…I would suggest that you try the known-good labview program like 10 times in a row with moving a few things around … wiring etc… if you get rock solid consistent results there, then move to C++ simplerobot and re-test… this would help gain you some sanity if it help identify a hardware flakey issue.