Watchdog Not Fed!

Although this might seem like those classic “Watchdog” problems, this problem is special…

We use “Iterative Robot” system to program out robot, and we implemented things like solenoids, compressors, and camera, etc… When it got kinda complicated, the watchdog lost its appetite.

The robot boot fine, but whenever we enable it, the driver station immediately says “Watchdog Not Fed”.

I don’t think that the robot even initiated the Teleop Init function right… We fed the watchdog function plenty of times, but it still won’t feed…:ahh:

The most typical mistake is if you have a Wait somewhere in your code that is longer than the watchdog expiration. Wait is blocking. So while you are waiting, the watchdog starves. We don’t use Wait in our code at all. We wrote our own timer callback using the Notifier class. We also implemented a state machine so that we do non-blocking wait using the timer callback to advance the state machine to the next state.

We did not have any

Wait()

's either, but the thing is that the watchdog IMMEDIATELY does not get fed, so it is some problem with the initialization of our robot…

I think it might be the camera’s

camera = AxisCamera::GetImage()

or something like that, OR it might be PID…

Has anyone ever have this problem before?

Are you disabling the watchdog during autonomous and during the constructor? The watchdog could be expiring before the teleop function sets it up properly

I don’t understand your code. Did you mean:


camera = AxisCamera::GetInstance();
or
HSLImage *image = camera.GetImage();

If it is really the first one, then it means the code failed to communicate with the camera. There are a number of reasons for that.

Make sure the ethernet cable is a cross over cable.

Make sure the camera is configured correctly with the correct IP address and acct/password

Although I haven’t verified it myself other threads said the subnet mask of the camera should be 255.0.0.0.

We had a similar problem. Discovered that the accelerometer was plugged into to the duplicate I2C OUT ports. The accelerator initialization in the robot constructor was simply hanging, so our robot class never made it out of its constructor. So, as soon as the robot was enabled, the watchdog went hungry because our code hadn’t started feeding it yet.

I guess the lesson from that is: make sure your code is getting to where you think it is, and check everything.