FRC 95 The Grasshoppers 2019 Build Thread

The ground pickup will compliment a human load station pickup. It flips the cover up to a position similar to the load station.

We export as solidworks, the solidworks sheet metal convert tool identifies all of the bends seamlessly (so far) and flattens the part out. Easy peasy.


James, thank you for the in-depth response. I really appreciate getting some insight into what you guys do. Your team gets better and better each year and I am sure this year will be nothing but success again! Thanks for sharing.

1 Like

I would be interested in seeing how well the floor intake scores the hatch panel.

You’re welcome, and thank you for the kind words!

Our intent is not to score directly with the ground loader. But we will certainly give it a try!

1 Like

It will likely be easier than the handoff, tbh.

Here is a link to our OnShape project. I have also updated the first post to include this link. Anyone can view/manipulate/interrogate the models we’re making, but you cannot copy/export/link to them. If anyone has need or want of our models we can work with you on an individual basis. We have done this in the past though, and are happy to do so again.


If our OnShape workspace were a studio it would be filled with crumpled up pieces of paper. Lots of churn, but not as much visible progress as we’d be happy with. Still, this is part of the process, and we can’t expect tons of visible progress every day (as much as we hope and work for it).

Starting to package in the elevator carriage and hatch cover mechanism.

In what feels like 95 traditional design practice: the gripper uses a floating air cylinder to grip the inside of the hatch cover with two identical pieces used in different orientations.

We laser cut a copy last night and were quite pleased with the results. We’re going to refine it a few more times and then likely cut it from 1/4in polycarbonate or nylon.

Also working on a robust 3D printable Life Cam housing.

Looking good guys can’t wait to see the finished product!

1 Like

Im assuming that you are going to have a way to push the Hatch or extend the gripper out over the bumpers to score on the rocket?

@EricLeifermann Yes.

How do the floating pneumatics work? I’ve always wondered whether it extended or retracted evenly to both sides. It seems like it would try to favor one side.

They can favor one side or another. In our uses it’s never been an issue. Typically the ‘favoring’ is so small that as soon as one side of a mechanism encounters a game piece, the other catches up. We’ve really liked them because they can dramatically simplify our mechanisms and/or improve packaging.

2018 cube gripper floating cylinder.

2017 gear placing mechanism. One side open, one side closed.

2015 Can gripper. Less obviously floating, but it still floated.

This is looking like a very robust and dependable design for hatch panel manipulation. Great job Grasshoppers with using a simple design that does not depend on the game piece to be in perfect condition and still being able to score it readily. These designs are really bringing me back to 2002 with your simple but effective ball intake and delivery mechanism that was a game changer.

1 Like

James is doing a great job of explaining the mechanical parts of our robot design, and has asked me to share some of the software aspects as they come together.

This year, we have decided to try using a Raspberry Pi 3B as a vision coprocessor. With the WPI-provided disk image to help with coprocessing, this seems like a good thing to start trying. The instructions from WPI work great, with no surprises.

We made a discovery that makes testing and developing these algorithms much easier: it’s pretty easy to run code meant for the coprocessor on Windows. This isn’t too surprising, but it’s nice to see how easy it is.

You can find Team 95’s bleeding-edge example in our github repo. (Explanations farther below) If you want to run our example, follow these steps:

  1. In VSCode, say “open folder”, and open the “VisionCoprocessor” folder
  2. Download OpenCV 3.4.4 from (
  3. Run that .exe to self-extract
  4. Copy its opencv\build\java\x64\opencv_java344.dll into C:\Users\Public\frc2019\frccode\ (Or, if you’re on an x86 computer, you should use the x86 version)
  5. Click “debug” or “run without debugging” while is in the forefront in the editor

If you do this, you should see a pile of windows appear, with some annotations drawn on top of the test images. This is an algorithm we’ve decided not to use, so you may notice that it doesn’t work super well. (As of commit 671740ef9de1df072eea18a20af7392841dc0ef2)

The key to making this work is found in GripPipelineLinesFromTarget.main():

	public static void main(String[] args) {

		String[] filesToProcess = {
			"test_images/Floor line/CargoAngledLine48in.jpg",
			/// ... many files omitted ...
			"test_images/Unoccluded, two targets/RocketPanelAngleDark84in.jpg                       ",

		Scalar unfilteredLineColor = new Scalar(255, 0, 0);
		Scalar leftLineColor = new Scalar(0, 255, 0);
		Scalar rightLineColor = new Scalar(0, 0, 255);
		int lineWidth = 1;
		GripPipelineLinesFromTarget processor = new GripPipelineLinesFromTarget();
		for (String file : filesToProcess) {
			Mat img = Imgcodecs.imread(file);
			for(GripPipelineLinesFromTarget.Line line : processor.findLinesOutput()) {
				Imgproc.line(img, line.startPoint(), line.endPoint(), unfilteredLineColor, lineWidth);
			for(GripPipelineLinesFromTarget.Line line : processor.filterLines0Output()) {
				Imgproc.line(img, line.startPoint(), line.endPoint(), leftLineColor, lineWidth);
			for(GripPipelineLinesFromTarget.Line line : processor.filterLines1Output()) {
				Imgproc.line(img, line.startPoint(), line.endPoint(), rightLineColor, lineWidth);
			HighGui.imshow(file, img);
			System.out.println(file + " has " + processor.filterLines0Output().size() + " left side lines: " + processor.filterLines0Output());
			System.out.println(file + " has " + processor.filterLines1Output().size() + " right side lines: " + processor.filterLines1Output());

This main() method is not run by the code that runs on the Pi (see for that - we’re using the one from the Java example on the Pi image). This is code that is only executed when you say “Run” from VSCode. This way lets you run the VSCode debugger really easily too, which let me identify some errors in the GRIP-generated pipeline.

1 Like

Feynman was a wonderful robot. Just like the physicist whose name he bears, Feynman was everyone’s favorite.

My rookie year robot. I did all of the pneumatic plumbing on Feynman. @JVN used to have a video of Feynman up on his youtube channel, but it doesn’t seem to exist anymore. I regret not downloading it when I had the chance!

We all regret not having that five second video. Maybe @JVN still has the clip. I remember standing sideline for one of the matches 95 was in, and to see that perfection up close was just jaw dropping. Zone Zeal is still in my top five games. What a beautiful and simple design Feynman was.



Is this the video you are looking for?


YES! Thank you very much!

Apparently it’s on a now-defunct 95 youtube account. I’ll have to see if we can still access it.

We can start to show how the ground load to elevator handoff is going to happen.

With the scoring mechanism retracted and closed, a ground-loaded hatch will swing right onto the gripper.

With the gripper engaged and extended, we can reach a small ways outside of our ‘bumper perimeter’.

But I think that we’ll want to tweak some things around to get a little more reach.

I know this build thread has been mostly CAD so far. The reason is that I have two kids now, and most of what I’ve been doing for the team this year is CAD from home. I hope to get some more pictures and video of prototypes tomorrow and Saturday.

1 Like