View Single Post
  #2   Spotlight this post!  
Unread 09-02-2017, 20:14
MamaSpoldi's Avatar
MamaSpoldi MamaSpoldi is offline
Programming Mentor
AKA: Laura Spoldi
FRC #0230 (Gaelhawks)
Team Role: Engineer
 
Join Date: Jan 2009
Rookie Year: 2007
Location: Shelton, CT
Posts: 309
MamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant futureMamaSpoldi has a brilliant future
Re: Arduino, pixy, and RoboRio Communications

Noah,

You do not need to use an arduino to communicate with the Pixy cam. There multiple interface options from the Pixy that the roboRIO can connect to directly. Last year we used the simple digital\analog x interface which tells you if it sees a target or not (digital), and where within the frame the target is (analog). This interface connects directly to 1 digital input and 1 analog input on the roboRIO.

The C++ class we created for this is shown here:

Code:
/*
 * PixyCamera.cpp
 *
 *  Created on: Mar 30, 2016
 *      Author: Gaelhawks
 */
#include "WPILib.h"
#include "Common.h"
#include "PixyCamera.h"


PixyCamera::PixyCamera()
{
    goalLocator = new AnalogInput(PIXY_ANALOG_INPUT);
    goalDetector = new DigitalInput(PIXY_GOAL_DETECTOR);
}

bool PixyCamera::GoalDetected()
{
    if(goalDetector->Get())
    {
        return true;
    }
    else
    {
        return false;
    }
}

float PixyCamera::GoalLocation()
{
    float cameraVoltage;

    cameraVoltage = goalLocator->GetVoltage();
    return cameraVoltage;
}

bool PixyCamera::OKtoShoot(float desiredGoal)
{
    // use lateralTrimValue in here somehow???
    // like: (CENTERED_GOAL_VOLTAGE + lateralTrimValue*0.1)
    if(GoalDetected() && (fabs)(GoalLocation() - desiredGoal) < VOLTAGE_TOLERANCE)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void PixyCamera::UpdateDash()
{
    SmartDashboard::PutBoolean("Pixy OK to Shoot: ", OKtoShoot(CENTERED_GOAL_VOLTAGE));
    SmartDashboard::PutBoolean("Pixy Goal Detected: ", GoalDetected());
    SmartDashboard::PutNumber("Pixy Camera Voltage: ", GoalLocation());
    SmartDashboard::PutNumber("Pixy Lateral Trim: ", lateralTrimValue);
}
This year we are using the I2C interface which provides more detailed data about multiple targets. This thread https://www.chiefdelphi.com/forums/showthread.php?t=154355& has C++ code that we have used to successfully communicate with the Pixy.

Hope this helps.
__________________
Reply With Quote