2010 Camera and vision problems.

After working most of last build season trying to get the camera working, and ultimately failing. We are hoping to get the camera set up and working this year.

The problem is that it doesn’t. The camera works when plugged in to the laptop, both through the NI vision assistant and the web interface. However, when plugged into the cRIO, nothing works. Running the default code that came with this years kit (C++ in windriver) there is no response. Also, the link light on the port that the camera is plugged into on the cRIO doesn’t light up.

So far I have tried everything I can think of and I have hit a dead end. Has anyone here had any luck getting the camera working? Any suggestions?

Thanks in advance,
-Luke (675)

Are you using a crossover cable when you plug it into the cRIO?

Eric

Eric,
Yes, we are using a crossover cable to connect. Are we supposed to be using something else? The crossover cable that attaches it to the cRIO is the same as the one we used when attaching it to the PC.

-Luke

Many (most?) modern laptops are smart enough to compensate if you use / don’t use a cross over cable by switching internally. It is possible that your laptop is tricking you by this method.

Try plugging a hub or switch into ethernet port 2 on the cRIO. Does it light up now?

The crossover cable in the kit last year was orange. The other ethernet cables in the kit were not crossover cables.

We have used the orange cable. And the cable we are using now is a crossover (We tested it). If I plug the computer into port 2, the lights do come up just as they do if the computer is plugged into port 1. (Although there are no comms with this method). Because of that I am reasonably sure the port is okay.

In reference to another thread on here, I made sure the Camera to Dashboard program compiles and is on the robot. And if I have a debugging console running there are no errors reported :-/

This is really irritating.

-Luke

Try ouputting data to the debugging console indicating when a command is successfully completed, that way at least you know the code is running correctly.

Which camera to dashboard program are you using?
The “Camera to Dashboard” example program does not work to my knowledge. Either build the “FRC 2010 Vision Demonstration” program, or add this to your robot’s main code:


AxisCamera &camera = AxisCamera::getInstance();
camera.writeResolution(k320x240);
camera.writeBrightness(0);

You will have to also do:

#include "Vision/AxisCamera2010.h"

If you do this and your camera still does not send an image to the laptop, then it is definitely not a programming problem.

DanDon: The code has that, and every part completes as expected.

jc4p: Ahhh, I will give that a go when I get back to the laptop. Is the transmit to the DS auto-magic from that point, or should I also include the PCVideoServer?

Thanks again everyone for all the help. Ill report back after I test again.

I believe that in the WPIlib documentation it says that an AxisCamera instantiation automatically invokes a PCVideoServer.

Okay, thanks. I think I was just looking at the wrong/old pdf.

After testing the recommended code, I still have some problems.

AxisCamera &camera = AxisCamera::getInstance();
camera.writeResolution(k320x240);
camera.writeBrightness(0);

I am using that with print statements between every line. The one before the first line makes it to the terminal, but after that there is nothing. Then after a while some cryptic errors pop up.

The one that leads me to believe this is a hardware problem of some sort is:

connect: S_errno_ETIMEOUT

As far as I can tell, that means I am done here. Unless anyone has any other ideas or hardware change recommendations.

-Luke

That seems like it would indicate a problem instantiating an AxisCamera object…as to how to fix it, unfortunately no idea until I can get into a lab and play around a bit.

I assume you set up the camera passwords per the control system documentation?

Ok, I feel like I am close to the solution. One thing I am seeing, after poking around in the console of the cRIO, is that it only has two network devices, the loopback, and the main one with the 10.xx.xx.2 ip. This makes me wonder how port two is supposed to connect on a different subnet to the camera.

My question then, is if one of you who has the console working to your cRIO could run “ifShow” and just tell me what things are listed. Failing that, I am at my wits end and I will have to call NI tomorrow if I cant get this fixed.

-Luke

I am in the same situation as you, sadly I do not currently have access to our robotics room to do the test for you. When I run the 2010 Image Demo code, or the snippet I sent you, the robot freezes and the Dashboard shouts “Watchdog not fed.” If I comment out the initializer for the AxisCamera object, everything works.

Update: My code now seems to be able to initialize the camera without it hanging. The lights are on on the cRIO as well. To do this I re-flashed the cRIO and checked to see if the other interface was there. We also switched crossover cables, but im not sure if we needed to.

It seems like the only remaining problem is getting the video out to go back to the laptop now.

Thank you all for your help so far.

-Luke

Same ;/. They had it working at the kickoff, or at least it seemed like they did.

Any idea what fixed it? My code is still hanging when creating the instance of AxisCamera.

Here is the result of an inetstatShow command

-> inetstatShow
Active Internet connections (including servers)
PCB      Proto Recv-Q Send-Q  Local Address         Foreign Address       (state)
-------- ----- ------ ------  --------------------- --------------------- -------
5c5f60   TCP    17376      0  192.168.0.3.1036      192.168.0.90.80       ESTABLISHED

5c54e0   TCP    17376      0  192.168.0.3.1034      192.168.0.90.80       ESTABLISHED

5c4a60   TCP        0      0  192.168.0.3.1032      192.168.0.90.80       CLOSE_WAIT
5c4520   TCP        0      0  0.0.0.0.1180          0.0.0.0.0             LISTEN
5c3fe0   TCP        0      0  0.0.0.0.3537          0.0.0.0.0             LISTEN
5c3800   TCP        0      0  0.0.0.0.43973         0.0.0.0.0             LISTEN
5c3020   TCP        0      0  0.0.0.0.1028          0.0.0.0.0             LISTEN
5c2ae0   TCP        0      0  0.0.0.0.3363          0.0.0.0.0             LISTEN
5c25a0   TCP        0      0  0.0.0.0.3079          0.0.0.0.0             LISTEN
5c2060   TCP        0      0  0.0.0.0.21            0.0.0.0.0             LISTEN
5c15e0   TCP        0      0  127.0.0.1.1024        0.0.0.0.0             LISTEN
5c1b20   TCP        0      0  0.0.0.0.0             0.0.0.0.0             CLOSED
5c10a0   TCP        0      0  0.0.0.0.44516         0.0.0.0.0             LISTEN
598a80   UDP        0      0  0.0.0.0.1026          0.0.0.0.0
598940   UDP        0      0  0.0.0.0.1110          0.0.0.0.0
598800   UDP        0      0  0.0.0.0.0             0.0.0.0.0
5981c0   UDP        0      0  0.0.0.0.44515         0.0.0.0.0
598080   UDP        0      0  0.0.0.0.68            0.0.0.0.0
value = 1 = 0x1
->

And here’s the output of an ifShow command

-> ifShow
lo (unit number 0):
     Flags: (0x48049) UP LOOPBACK MULTICAST TRAILERS ARP RUNNING INET_UP
     Type: SOFTWARE_LOOPBACK
     inet: 127.0.0.1
     Netmask 0xff000000 Subnetmask 0xff000000
     Metric is 0
     Maximum Transfer Unit size is 1536
     0 packets received; 20 packets sent
     0 multicast packets received
     0 multicast packets sent
     0 input errors; 0 output errors
     0 collisions; 0 dropped
     0 output queue drops
fec (unit number 0):
     Flags: (0x68043) UP BROADCAST MULTICAST ARP RUNNING INET_UP
     Type: ETHERNET_CSMACD
     inet: 10.3.75.2
     Broadcast address: 255.255.255.255
     Netmask 0xff000000 Subnetmask 0xff000000
     Ethernet address is 00:80:2f:11:4d:14
     Metric is 0
     Maximum Transfer Unit size is 1500
     0 octets received
     0 octets sent
     204995 unicast packets received
     202032 unicast packets sent
     247 non-unicast packets received
     2 non-unicast packets sent
     0 incoming packets discarded
     0 outgoing packets discarded
     0 incoming errors
     0 outgoing errors
     70 unknown protos
     0 collisions; 0 dropped
     0 output queue drops
fei (unit number 0):
     Flags: (0x78043) UP BROADCAST MULTICAST ARP RUNNING INET_UP
     Type: ETHERNET_CSMACD
     inet: 192.168.0.3
     Broadcast address: 255.255.255.255
     Netmask 0xffffff00 Subnetmask 0xffffff00
     Ethernet address is 00:80:2f:11:4d:15
     Metric is 0
     Maximum Transfer Unit size is 1500
     317987878 octets received
     3500254 octets sent
     218474 unicast packets received
     53020 unicast packets sent
     0 multicast packets received
     0 multicast packets sent
     138 broadcast packets received
     2 broadcast packets sent
     0 incoming packets discarded
     0 outgoing packets discarded
     0 incoming errors
     0 outgoing errors
     0 unknown protos
     0 collisions; 0 dropped
     0 output queue drops
value = 26 = 0x1a

When I remove the call to AxisCamera::GetInstance(), the watchdog is fed correctly and the code has no problems running.

The camera has the root/admin account set up and has the default 192.168.0.90 IP address.
And yes, I am using a crossover cable.

Can you ping your camera (192.168.0.90) from the WR Console prompt?