|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
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(). |
|
#2
|
|||
|
|||
|
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?
|
|
#3
|
|||
|
|||
|
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) |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|