Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   C/C++ (http://www.chiefdelphi.com/forums/forumdisplay.php?f=183)
-   -   For Those Having Trouble Getting a USB Camera Feed into RoboRealm (http://www.chiefdelphi.com/forums/showthread.php?t=142247)

2172Stew 01-21-2016 08:55 AM

For Those Having Trouble Getting a USB Camera Feed into RoboRealm
 
Here at team 2172 we have had a great deal of trouble getting a USB camera to feed into RoboRealm through the rio. After 4 days of working (and late nights of research) I determined that our problem was that the AutomaticCapture() function, although it was feeding frames to the smart dash, was not feeding frames to RoboRealm. To solve this problem I copied the code from the Intermediate Vision example program (removing line 39). This code sends a frameevery time the teleop loop loops. It does this by calling the SetImage() function.

To conclude, if you are having trouble with a usb camera outputting to the smart dash be sure that you are using Camera Server code which sets the image using SetImage().

razar51 01-26-2016 09:42 PM

Re: For Those Having Trouble Getting a USB Camera Feed into RoboRealm
 
I don't have access to those examples. Could you post that file?

2172Stew 01-28-2016 01:36 PM

Re: For Those Having Trouble Getting a USB Camera Feed into RoboRealm
 
This is the code directly copied:

#include "WPILib.h"

/**
* Uses IMAQdx to manually acquire a new image each frame, and annotate the image by drawing
* a circle on it, and show it on the FRC Dashboard.
*/
class IntermediateVisionRobot : public SampleRobot
{
IMAQdxSession session;
Image *frame;
IMAQdxError imaqError;

public:
void RobotInit() override {
// create an image
frame = imaqCreateImage(IMAQ_IMAGE_RGB, 0);
//the camera name (ex "cam0") can be found through the roborio web interface
imaqError = IMAQdxOpenCamera("cam0", IMAQdxCameraControlModeController, &session);
if(imaqError != IMAQdxErrorSuccess) {
DriverStation::ReportError("IMAQdxOpenCamera error: " + std::to_string((long)imaqError) + "\n");
}
imaqError = IMAQdxConfigureGrab(session);
if(imaqError != IMAQdxErrorSuccess) {
DriverStation::ReportError("IMAQdxConfigureGrab error: " + std::to_string((long)imaqError) + "\n");
}
}

void OperatorControl() override {
// acquire images
IMAQdxStartAcquisition(session);

// grab an image, draw the circle, and provide it for the camera server which will
// in turn send it to the dashboard.
while(IsOperatorControl() && IsEnabled()) {
IMAQdxGrab(session, frame, true, NULL);
if(imaqError != IMAQdxErrorSuccess) {
DriverStation::ReportError("IMAQdxGrab error: " + std::to_string((long)imaqError) + "\n");
} else {
CameraServer::GetInstance()->SetImage(frame);
}
Wait(0.005); // wait for a motor update time
}
// stop image acquisition
IMAQdxStopAcquisition(session);
}
};

START_ROBOT_CLASS(IntermediateVisionRobot)


All times are GMT -5. The time now is 09:13 AM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi