There will always be a point in your FIRST experience when you realize you can get away with something that is against the rules. It is at that point when you have a choice to make about your own personal ethics, and what sort of example you will set for your students. - ToddF [more]

Laurent Itti here, creator of JeVois. I just came across this thread and I am very excited that machine vision is a hot topic for this season! Although I have not yet mentored a team, I served as a judge for FRC a few years ago, and I was very impressed with what the students were achieving.

I thought I would share a quick teaser I just put together now that we are done here with grading our 576 students in my A.I. class (pfewww):

Hype! Does this mean some direct support for those of us using the JeVois in FRC?

This would be awesome! I am looking forward to seeing how this goes. I am planning on getting myself a JeVois, maybe we can use it on 3082 this season or next year. The Pixy was nice but it wasn't ideal as we couldn't use it as a regular camera for the driver station.

Now, we will not solve the FRC vision problem for you. I want the teams to do that themsleves. Yes, I could ask a couple of PhD students here to develop a module for the 2018 FRC vision task, and I think they could do a very good job, but I'd rather avoid that. We provide you with building blocks which you should tinker with here, to come up with your own vision pipeline.

Certainly GRIP integration is a great todo, thank you guys for showing some examples of how easy it is to port compiled GRIP code to JeVois. We will be looking at a tighter integration now.

Here are a few comments and replies after reading through this thread:

Power: You do not always need to connect to 2 USB ports, one is enough if it can source 750 mA (e.g., USB 3.0), or you can use one USB 2.0 port + one DC/DC converter or USB battery bank. Some more info here: http://jevois.org/doc/UserConnect.html

Serial port: As noted, you do not need level shifters if connecting to a 3.3V or 5V UART port (not an RS-232 port). Level shifters are already in the camera. You need to provide IOREF (red wire) with the voltage level you want to use (e.g., connect it to 5V when using 5V serial levels). More here: http://jevois.org/doc/UserSerial.html

Connection: Mini-USB ports are more tolerant to giggles than micro USB, but we still recommend that you secure your cable to the same mount as JeVois, as the connector is not designed to handle vibrations (as opposed, to, e.g., automotive-grade USB ports and cables with screws).

Just so people understand, the JSON in the example code I posted above comes out human readable. I don't see a need to make this more readable or more compact.

Code:

{"tx": 0.0, "ty": 0.0, "ta": 0.0, "tv": false}

Need? probably not. Perhaps just to explain further (and hopefully not beating a dead horse):

We were largely thinking to do the same thing with one modification: Since we own the code on both sides, hardcode the tx/ty/ta/tv order, and use whatever abbreviations for values we want. The resulting packet becomes:

Code:

{0.0,0.0,0.0,f}

15 ascii characters, instead of the initial 46. Still parseable by looking for opening/closing {}'s, and still quite human readable.

Will this matter at the end of the day? No idea. Given that there's a chance we may be streaming video and serial on the same USB link, less bandwidth is probably better? Still TBD how much any of the really matters.

JSON does bring extra flexibility in terms of library support, adding/removing parts of the message, etc. I don't think we'll need these things, but we may double back when more mentors look at it

Edit: Missed Tom Bottiglieri's post. I concur, this is probably the minimal implementation, even forgoing the "end" byte in favor of a checksum. To get max bandwidth, this may be what we have to go to. The only disadvantage I see is an increase in difficulty in debugging as a human (harder to read the binary streams going by). But, small pain to pay if you can get it working well.

[sorry if this ends up showing as a repost, I posted a similar reply already but it is not showing up in the thread so I just re-typed it]

Yes, we are happy to assist you and support you in any way we can!

Now, we are not going to solve the FRC vision problem for you. I would like the student teams to do that. I could probably ask a couple of PhD students here to develop a vision module for JeVois that solves the vision problem for FRC, and I think they would do a very good job, but Iíd rather not do that. We can provide building blocks for students to tinker and experiment with, and to develop their own original vision pipelines. We are certainly willing to help you with developing these building blocks and making the development of pipelines for JeVois easier.

Certainly GRIP integration is a great todo. Thank you for posting examples of how this can be done.

A few quick comments and answers after going over this thread:

Power: You do not always need to connect to 2 USB ports, one is enough if it can source 750 mA (e.g., USB 3.0), or you can use one USB 2.0 port + one DC/DC converter or USB battery bank. Some more info here: http://jevois.org/doc/UserConnect.html

Serial port: As noted, you do not need level shifters if connecting to a 3.3V or 5V UART port (not an RS-232 port). Level shifters are already in the camera. You need to provide IOREF (red wire) with the voltage level you want to use (e.g., connect it to 5V when using 5V serial levels). More here: http://jevois.org/doc/UserSerial.html

Connection: Mini-USB ports are more tolerant to giggles but we still recommend that you secure your cable to the same mount as JeVois, as the connector is not designed to handle vibrations (as opposed, to, e.g., automotive-grade USB ports and cables with screws).

As a Beta Lime Light Tester. I have just received my Jevois 3 days ago. I have yet to get anything reliably working and nothing into our roborio. I have no tracking data or video into the robot or driverstations. Plus I needed to print a Case to hold a LED Ring, Power the LED ring from a 12 volt source, power the Camera from TWO USB ports, Use multiple tools and programs to configure, test, a vision algorithm....... LOTS OF WORK. I have easily 6 hrs and nothing working.

Lime Light. One 12v source if not using POE, One Network Cable. DONE. Open WebDashboard, Configure sliders, Data and video Published to Networktable. Robot is tracking targets.

If Jevois Releases a FRC image I can simply download, flash to camera, and tune the Vision Pipeline (even with a companion tool). Also solid sample code for the Roborio, there still is the 5vdc power requirement that one USB port likely can't support and separate LED ring management.

Lime Light 30-60 minutes Robot is following targets
Jevois 6 hrs and lots of frustration. I'm still hopfull since Printing a LED ring Mount is available to us. Cutting a USB cord and injecting 5vdc from a Buck power regulator is not unreasonable (but can I get video?). Oh and open source I do Like.

As a Beta Lime Light Tester. I have just received my Jevois 3 days ago. I have yet to get anything reliably working and nothing into our roborio. I have no tracking data or video into the robot or driverstations. Plus I needed to print a Case to hold a LED Ring, Power the LED ring from a 12 volt source, power the Camera from TWO USB ports, Use multiple tools and programs to configure, test, a vision algorithm....... LOTS OF WORK. I have easily 6 hrs and nothing working.

Lime Light. One 12v source if not using POE, One Network Cable. DONE. Open WebDashboard, Configure sliders, Data and video Published to Networktable. Robot is tracking targets.

If Jevois Releases a FRC image I can simply download, flash to camera, and tune the Vision Pipeline (even with a companion tool). Also solid sample code for the Roborio, there still is the 5vdc power requirement that one USB port likely can't support and separate LED ring management.

Lime Light 30-60 minutes Robot is following targets
Jevois 6 hrs and lots of frustration. I'm still hopfull since Printing a LED ring Mount is available to us. Cutting a USB cord and injecting 5vdc from a Buck power regulator is not unreasonable (but can I get video?). Oh and open source I do Like.

As a non-programmer I'm sure that the Limelight is considerably easier than the Jevois; that's what $350 gets you (x3 because of second robot + spare). That being said, I got the Jevois working with GRIP code in well under 6 hours using my rudimentary Arduino/Python knowledge. You can find my step-by-step guide here. Wiring the 12v supply was a bit of a chore because I had to solder some wires but honestly, if you're already dealing with a dozen other wires on the robot, one more 12v connection isn't a whole lot to ask for. I also don't cherish waiting for build season to test out Limelight when I can get a JeVois now.

EDIT: I can release an image to flash onto the JeVois with the Spectrum GRIP-compatible code on it if you don't want to copy over files. You can find their code here. Simply download my GRIP pipeline and their code, paste it onto the JeVois, and go to town.

__________________
Team 1072 2017-present
Team 299 2017
Team 115 2013-2016

"Competition has been shown to be useful up to a certain point and no further, but cooperation, which is the thing we must strive for today, begins where competition leaves off." - Franklin D. Roosevelt

A couple ideas
1. Write a parseserial function for the python script that let's us update the GRIP settings from inside JAVA/C++ robot code so you don't need to mount the SD and update the settings.

2. Figure out how to mount the SD from inside JAVA code. I think this is possible after updating the fstab on the roboRIO. If code was run as admin instead of lvuser this would be easy.

3. Automate the grip export into a JeVois script, shouldn't be that hard. So it's harder to mess up copying the settings, it's not hard as it is but just another failure point.

What other things would make this process easier for new teams. During the season I imagine their will be multiple released code examples for the target(s) that teams can copy to get going.

4. roboRIO-level library support for connecting to, configuring, and reading data (and maybe images) from the JeVois at runtime. Minimize the manual config required, make it as simple as possible to instantiate a JeVois camera in code and get data from it. Speed & lattency of this library must not be the limiting factor in a processing pipeline

Our answer to this question, while not quite 100% PnP, will be released on Christmas day.

With the Suite of tools we will be releasing, you will have 3 modules. One is intended to be set to run on power up (Competition mode). One will be used to validate that the calibration is performing as desired. The last is used to actually calibrate, or tune, the tracking parameters. Also included will be a separate Python script that is used to send tuning parameters to the JeVois so it doesn't need to be done manually. This tool is used with the third module above.

The intent is that the users will follow our Whitepaper to first learn the basics of how the JeVois works, then use the code we provide as a starting point. In other words, users are encouraged to explore the code and see what is provided, then modify and improve it from there. The code as provided is very close to what will be needed for competition. You will just want to tune it for optimal results.

Our code will not make the JeVois as PnP as Limelight, but it will give you a starting point that is close. Where and how far you choose to go from there is up to you.

Our answer to this question, while not quite 100% PnP, will be released on Christmas day.

With the Suite of tools we will be releasing, you will have 3 modules. One is intended to be set to run on power up (Competition mode). One will be used to validate that the calibration is performing as desired. The last is used to actually calibrate, or tune, the tracking parameters. Also included will be a separate Python script that is used to send tuning parameters to the JeVois so it doesn't need to be done manually. This tool is used with the third module above.

The intent is that the users will follow our Whitepaper to first learn the basics of how the JeVois works, then use the code we provide as a starting point. In other words, users are encouraged to explore the code and see what is provided, then modify and improve it from there. The code as provided is very close to what will be needed for competition. You will just want to tune it for optimal results.

Our code will not make the JeVois as PnP as Limelight, but it will give you a starting point that is close. Where and how far you choose to go from there is up to you.