ZebROS 2020

It’s that time of year; the end of summer is approaching, and with it comes, drum roll, another whitepaper from the Zebracorns about ROS! Surprising approximately zero people, we have made use of ROS for another season* of FRC. This year, we were really able to take advantage of our ROS-centric, modular development model to make a variety of improvements to our code. We have improved the reliability of several robot systems, including the driver (the least reliable robot system), and implemented features that bring us closer to our goal of a fully autonomous robot.

Highlights include:

  • Path generation/following
  • ROS dashboard (on Windows!)
  • Awesome IMU (Thanks ADI!)
  • Controlling all the things
  • Spinny color wheel-of-fortune Apple-loading-icon beach ball lollipop™

Thank you to our wonderful mentors and students who were instrumental to our progress this year. And, as always, thank you to the NCSSM Foundation, NVIDIA, John Deere, AWS: RoboMaker, VMware Foundation, CTR Electronics, Overleaf, Analog Devices, Terabee, and the rest of our wonderful sponsors.

You can find the released code for this year at GitHub - FRC900/2020RobotCode, and the paper here.

* Yes, we did call it a season. We know it’s a bit weird, but go with it.

26 Likes

This is awesome. 900 continues to push boundaries in unexpected ways, and it’s always fun to see how their discoveries help the rest of the competition (I especially loved the rqt dashboard compared to the “normal” FRC dashboard, and the roboRIO status indicator section, especially when contextualized against @marshall’s other posts.)

Keep it up!

4 Likes

Very natural indeed.

Well done and keep it up!

2 Likes

As always, it’s a blast working with all of our awesome students, mentors, and Kevin on these endeavors. I’m sad we didn’t get to field this robot but I’m hoping as hard as I can that maybe we will. At the very least, the code base continues to grow and is now a multi-generational project for The Zebracorns so I’m excited for what the future will hold.

A massive thank you to Olivia Fugikawa and Adam Kosinski, who have been nothing short of exemplary in teaching new Zebracorns and contributing to this work. It’s a tough time to be a senior but please know that your efforts have all of your mentors in awe and admiration. Thank you!

Link on our website is here: ZebROS 2020

9 Likes

I found reading details into the investigation about roborio communication drops pretty interesting, after being mentioned in this thread.

Seeing the roborio link disappear but without losing power typically means a networking issue (such as the ethernet cable being damaged or coming unplugged), as those indicators show when the field server can successfully ping the rio.

The ROS bug linked looks particularly nasty, but is a very interesting lesson in symbol resolution and compiler optimizations.

1 Like

It was definitely a learned lesson for us. A lot of effort has been spent on making sure it doesn’t happen again, or more likely, when something similar happens we will have an easier time debugging it.

Genuinely, we are appreciate to all the folks who took time to listen and help us with troubleshooting it. I am left wondering though at how many teams have been told “you’ve got a loose cable” when the issue has been their code chewing CPU or something else. I know it’s often a loose cable that causes issues mind you.

2 Likes

At least this is usually possible to answer with the DS logs - they should show packet round trip time and and roborio CPU usage, so seeing correlated increases in both should point to the code being the issue.

2 Likes

I was looking through your code briefly and I had a hard time finding dashboard code. Is it in the same repo or somewhere separate? I’m also curious what sort of trouble you had with the ROS integration when you were trying to set up the web server for your dashboard? Can all of your data that your dashboard needs be communicated over a websocket?

1 Like

The dashboard code is currently in the rqt_proof branch while we clean it up before merging.

For the last question, we’re planning to use roslibpy: ROS Bridge library — roslibpy 1.1.0 documentation which gives us a python interface to ROS’s rosbridge library. That should give us access to the robot via a websocket over one of the allowed ports.

1 Like