Like many other teams, we had problems with the camera this year. However, after working on it for a bit, I have got it working. The following steps is how I did it… I hope it helps:
Make sure all updates are installed! Note for the driver station update, you need to run it 3 times, install, then uninstall, then reinstall. Note that for this update to work, you may have to turn off your firewall. You can tell when the driver station update has worked when there is a compass in the driver station.
The updates that are needed are:
a. Labview Update
b.Driver Station Update
c.Missing File Needed
d.Workbench Update
Hook up the camera to a computer. Change your IP address to 192.168.0.x where x can be any number except 90. Now run the Setup Axis Camera Program. Once this is successful, go to 192.168.0.90 in your web browser. Follow the instructions exactly as found on page 58 of this manual. Do not change any settings other than the password!
Hook the camera back up to the cRio and change the IP of the computer back to what it should be (10.xx.yy.6).
Open your developer program (We are using WindRiver). In WindRiver, the sample code that works with the camera is titled 2010ImageDemo. No changes are required. If the project will not build, you may be getting the same error we did. In AxisCamera2010.h, a line was commented out at the beginning. Simply uncomment this line and then rebuild your project. Download this code to your robot.
Once the code is downloaded, the image will not appear right away. The code that initializes the camera is in teleop mode so enable teleop. You may have to wait a bit for the image to appear as there is a 10 second wait statement for the camera to turn on. The image should then appear.
The following is an example of a simple program using camera code. The bolded lines are code that differs from a normal program and are neccesary for the program to work:
#include "WPILib.h"
**#include "Vision/AxisCamera2010.h"
#include "Vision/HSLImage.h"**
class MyRobot : public SimpleRobot
{
RobotDrive drive;
Joystick joystick;
public:
MyRobot():
drive(1,2),
joystick(1)
{
GetWatchdog().SetExpiration(0.5);
}
void Autonomous()
{
GetWatchdog().SetEnabled(false);
}
void OperatorControl()
{
[INDENT][INDENT]**Wait(10.0);**// Give the camera time to turn on[/INDENT][/INDENT]
**HSLImage image; **// Creates an image
**AxisCamera &camera = AxisCamera::getInstance(); **// Creates an instance of the camera
**camera.writeResolution(k160x120);
camera.writeBrightness(0);**
while (IsOperatorControl() && !IsDisabled())
{
**camera.GetImage(image.image);** // Gets the image from the camera
}
}
};
START_ROBOT_CLASS(MyRobot);
This code will display an image on the driver station. Give it time, as there is a 10 second wait for the camera to turn on. And teleop must be enabled for the image to display.
This worked for me and I hope it helps other teams who’re having trouble with the camera. Please reply if this doesn’t work and I will try to be of further assistance.
Also, thanks to Andrew (basicxman), another programmer from team 2200, who helped in getting our camera working.
-Mike and Team 2200
In addition to those steps, it’s also necessary to image the cRIO with v19.
Also, seeing a compass on your driver station doesn’t mean that the update works. We uninstalled and reinstalled the update and our dashboard looked exactly as it should, but the camera feed still didn’t work. We had to go to Program Files and manually delete ALL of the driver station software and reinstall it before the camera feed worked.
I meant to say that following those instructions did not work. We did exactly what the instructions said, but still had no feed. We had to browse to C:\Program Files, find the Driver Station folder, manually delete it (as in, delete it using the “Delete” button on the keyboard), and reinstall it again before the feed worked.
That’s great but it doesn’t solve my problem. I need to declare a camera variable with a class scope and then assign to it in the classes constructor, yet every time I put it in the class it gives me error.
We just got our camera working today, which was very exciting. The simple solution after all the updates was just putting in those few lines of code from the OP. Should’ve seen that coming, but ah well. Here’s to hopefully solving many other confused teams’ problems.
OK, We here in Goodrich, MI have completed all of these steps and this does not work for us. we are using c++, we have been using the 2010ImageDemo and it seems to have all the code posted above, we have all the updates and the camera works through the Ethernet port on the DS, we have had no luck here and would appreciate some help.
Thanks in advance, Team 494 & 70
Are you using the orange crossover cable between the camera and the cRIO??
We’re having the same problems you are and we did not have any success yet either.
Thanks for this! We just got our camera up and running.
To the above, we had that problem too earlier. When we tried to use a regular ethernet cable, the lights on the port on the cRIO weren’t blinking. With the proper crossover cable (it was pink in this year’s kit), the lights were blinking and we were able to get images on the screen. Are they blinking for you guys?
As for the code, where is the proper place to set up the camera instance? The way it is right now (in OperatorControl) it seems like the bot would stand still for 10 seconds at the beginning of the round.
Where is that compass displayed?? The DS tells me I am using a version dated 1-6-2010 which I think is the latest but I don’t recongnize anything that looks like a compass.