Problem Loading Java Code

I’m experimenting with Java as a potential platform for programming in '10, but I’ve run into a block. Here’s where I got:

Re-imaged my cRIO - however during re-imaging I just realized that I did NOT check “Format Controller” - anyone know if this is potentially the source of my problems?

Tried to load code. What happens when I load code is that it goes through the first few dozen steps, then gets to “rebooting your cRIO” and seems to get stuck (I’ve left it for 20+ minutes, came back, found no difference).

The “Getting Started With Java” pdf doesn’t really give any troubleshooting - it just says press the run button to load code.

Any ideas?

(Yes I will be following several other routes to get this fixed including contacting a local beta team; I wanted to get this post out there to see what came up.)

I did the same thing. Re-run the new imaging tool and select Fromat controller.

The other issue I had was that I needed to set the team number in netbeans. You can find it in the Tools>Options>Misc.>FRC tab.

I still haven’t gotten the debugger working, but I have our 2009 ported to Java and running perfectly on our old robot.

When you say you did the same thing - do you mean that you had the same problem and that selecting “Format Controller” fixed it?

-P

I didn’t select Format Controller, had the exact same issue, and re-imaging with Format Controller checked fixed it.

Thanks, awesome, I’ll definitely do that then. It was my next step. Shame I couldn’t get Chief Delphi and be on site at the same time =(.

Does any one know if their is a place to download the 2009 Crio Imaging tool?( I Am not sure where our teams copy of the 2009 software CD’s are). Any help would be appropriated!

I’m not aware of a standalone installer for the imaging tool. Why do you need to old version?

According to the Getting Started With Java pdf you need the old software

“Choose a Windows installation that has the 2009 FRC Software already installed on it. If you do not have one, then follow the instructions from last year’s set of DVDs to create one.”

I personally do not care if I have the old software installed or not just as long as I can Image the Crio for Java.

We have also been running into errors when we try to load code onto the cRIO. We have made attempts on two different platforms, both of which have resulted in error.
On a mac, we run through rebooting and to the point where the cRIO is starting up again but the deployment hangs indefinitely on the line “in static method #3 of com.sun.squawk.VM(bci=6)”.
Additionally, on a windows computer, we do not make it to the point in which the code is downloaded. Here are the last few lines before the error:

Connecting FTP @10.23.74.2
Remote OTA server matches local, no upgrade needed
Remote VM matches local, no upgrade needed
Remote Java suite matches local, no upgrade needed
C:\Documents and Settings\robotics\sunspotfrcsdk\build.xml:98: The following error occurred while executing this line:
C:\Documents and Settings\robotics\sunspotfrcsdk\ant\upgrade.xml:38: java.net.SocketException: Connection reset
BUILD FAILED (total time: 25 seconds)

Any help on either platform would be much appreciated.

On a side note, we are fairly sure we have reimaged the cRIO correctly as we have done it multiple times with the format controller button selected. Also, someone previously mentioned that they had forgotten to set their team number in tools/options/frc configuration, but we have done so correctly.

What version of the imaging tool are you using?
Is it set to Java Technology?

What firewall(s) are you using?
Can you try with them disabled?

What version of the imaging tool are you using?
Is it set to Java Technology?

What firewall(s) are you using?
Can you try with them disabled?

For the imaging tool, we have installed the update released with the Java prerelease. There is an option for Java in our imaging tool, and we have successfully reimaged with that option and the “format controller” button selected. For all we know, the reimaging process has gone swimmingly.

As far as the firewalls go, I know that on the Windows computer (the one that did not make it as far as the mac in the code deployment), we were asked by XP during one of the deployment attempts to verify that we wanted netbeans to have permission to do whatever it was doing at the time. We said to allow netbeans to continue.

My suggestion is disable the firewall, and connect firectly from the PC to the robot using a cressover cable. This should eliminate any network issues.

Firewall issues can definitely affect code downloading on both Mac and Windows. The SDK uses a Java-based ftp client that most firewalls don’t know about. It may be possible to set up a firewall permission for the Java.exe application.

New update:

Of note: though I disabled WatchDog in the code, it still says

“System: Watchdog”

below the team number.

I’m starting to get pretty stumped.

EDIT: It also tells me when I’m loading code:

[cRIO] Information: No user-supplied RobotMain()

Is this possibly a problem?

OK so, now I have a slightly different problem:

I fixed the aforementioned issue (thanks to all who confirmed that that’s what it was) and have (as far as I know) successfully loaded code onto the robot. However, there’s a minor issue: nothing happens.

I’m still working on troubleshooting this issue, and I’m not by any means tapped out, but if anyone has any suggestions, I would very much appreciate them. A few facts:

  1. I have communication established between robot and DS.
  2. The code is supposed to be tank-drive - I essentially copied the code in the doc.
  3. Nothing happens when I activate the joysticks.

EDIT: One problem was that I had two projects running. One was blank and selected as the main project; the other had the code in it and was NOT selected as the main project. However fixing this did NOT solve the problem (frowny face).

Here’s my code:


/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2008. All Rights Reserved.                             */
/* Open Source Software - may be modified and shared by FRC teams. The code   */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project.                                                               */
/*----------------------------------------------------------------------------*/

package edu.wpi.first.wpilibj.templates;

import edu.wpi.first.wpilibj.*;
import edu.wpi.first.wpilibj.DriverStation.*;
import edu.wpi.first.wpilibj.camera.*;


/**
 * The VM is configured to automatically run this class, and to call the
 * functions corresponding to each mode, as described in the SimpleRobot
 * documentation. If you change the name of this class or the package after
 * creating this project, you must also update the manifest file in the resource
 * directory.
 */
public class RobotTemplate extends SimpleRobot
{
    //This is all SANDBOX code.
    public static final boolean PRESSED = true;
    public static final boolean UNPRESSED = false;

    Joystick j1;
    Joystick j2;
    RobotDrive drivetrain;
    Compressor comp;
    DriverStation ds;

    Accelerometer a;
    DigitalInput bump;
    AxisCamera cam;
    Timer t;
    Gyro robotHeadingGyro;



    public RobotTemplate()
    {
        comp = new Compressor(1, 1);
        j1 = new Joystick (1);
        j2 = new Joystick (2);
        drivetrain = new RobotDrive (1, 2);
        this.getWatchdog().setEnabled(false);
        
        ds = DriverStation.getInstance();
        /*
        robotHeadingGyro = new Gyro (1);
        a = new Accelerometer(2);
        bump = new DigitalInput(1);

        if (bump.get())
        {
            System.out.println("oh no cap'n we've been bumped");
        }
         */
    }


    
    /**
     * This function is called once each time the robot enters autonomous mode.
     */
    public void autonomous()
    {
        Alliance a = ds.getAlliance();
        if (a.equals(Alliance.kBlue))
        {
            System.out.println("we're blue");

        }
        else
        {
            System.out.println("we're red");
        }

        while (this.isAutonomous() && this.isEnabled())
        {
            double voltage = ds.getBatteryVoltage();
            System.out.println(voltage);
            if (voltage < 10.0)
            {
                break;
            }
        }
    }

    /**
     * This function is called once each time the robot enters operator control.
     */
    public void operatorControl() 
    {
        while (this.isEnabled() && this.isOperatorControl())
        {
            drivetrain.tankDrive(j1, j2);
            Timer.delay(0.005);
        }
    }

    private void driveStraight(double speed, Gyro g)
    {
        double d = g.getAngle();
        d = d / 360.0;
        if (d > 1.0)
        {
            d = 1.0;
        }
        if (d < -1.0)
        {
            d = -1.0;
        }
        drivetrain.drive (speed, d);
    }

I’m not sure if that’s an issue, but make sure the file “[project directory]\resources\META-INF\MANIFEST.MF” refers to the correct class.

If the manifest file is accurate then I would close all projects, create a new Default Code project (found under samples>FRC Java), and, without modifing it, see if it runs.

EDIT: The next step would be to zip up the entire project directory, and post a complete copy of the build output. Maybe then we’ll find something that’s causing your issue.

From your post I believe it is that your tela operated function is not being called/running correctly, so why don’t you try a line of code that does not require feedback, to see if that is the problem, you could just have the robot drive strait for a few seconds to test the function

for instance you could try

 
 public void operatorControl() 
    {
        
            drivetrain.Drive(1, 0);
            Timer.delay(0.005);
 
    }

I know that we declare what port to use for the power distribution block thru out our code for example

 drivetrain = new RobotDrive(1, 2);

But where do we declare what port to use for the Crio, is their a way to use a different port? In case something where to happen to the normal port.

Nowhere in code do you specify the power source for the motors. You specify the PWM outputs (from the digital sidecar) which the motor controllers are connected to.

The code you posted is creating a RobotDrive using Jaguar controllers on PWMs 1 and 2 on the default digital sidecar (CRIO slot 4).

If you want to use different PWM outputs you could modify it like so:


drivetrain = new RobotDrive(3, 4); //Uses PWM outputs 3 and 4.
drivetrain = new RobotDrive(1, 2, 3, 4); //Used PWMs 1 and 2 for the left drives, and 3 and 4 for the right drives. 

Trevor,

Your solution trouble-shoots the joystick/jaguar issue, not whether operatorControl() is being called. I might give that a try, but I’m reasonably certain I don’t have 2 joysticks failing spontaneously, or 2 jaguars etc.

Ehaskins,

Got a reply on official FIRST forums (this does not mean it’s correct of course) that the RobotMain() function is not the problem (and boy do I hate the casing of that method name - why did they make it look like a constructor?)

At the moment I’m most interested in examining the WatchDog angle - does anyone fully understand this and could explain to the unenlightened?

Are you getting any text output at all to indicate that the autonomous() or operatorControl() methods are being called? Some more print statements can help here…