Beating Super Hexagon with OpenCV and DLL Injection

Every few months a game comes along which is so addictive, players can’t seem to put it down – no matter how frustrating it may get. Last year one of those games was Super Hexagon. After fighting his way through several levels, [Val] decided that designing a bot to beat the game would be more efficient than doing it himself. Having played a few rounds of Super Hexagon ourselves, we can’t fault him on that front!

At its core, Super Hexagon is a simple game. Walls move from the screen edges toward a ship located near the center of the screen. The player uses the arrow keys to “orbit” the ship around a central shape. Avoid getting crushed by the walls, and you’re golden. However, the entire game board is constantly spinning, expanding, contracting, flashing, and generally doing things to disorient the player while ever more complex wall patterns move in to kill you. In short, Super Hexagaon makes Touhou bullet hell games look like a cakewalk.

The first step in beating the game is to capture the screen. [Val] tried Fraps and VLC, but lags of 2 seconds or more were not going to work. Then [Val] turned to DLL Injection. Super Hexagon calls the OpenGL function glutSwapBuffers() to implement double buffering. Every frame of the game is rendered in the background. Once rendering is complete glutSwapBuffers() is called to swap the buffers, and the process starts over again. [Val] changed the game code such that his own frame capture function would be called instead of glutSwapBuffers(). Once he was done capturing the game’s video buffer, [Val] then called the real glutSwapBuffers() function. It worked perfectly.

Now that he had an image, [Val] used OpenCV to process it. Although game is graphically very noisy, there are only a few colors used at any one time. It didn’t take much work to come up with an algorithm which would create a binary image of the walls and the ship itself.

step5[Val] cast rays from the center of each wall through the center of the screen. The ray which was longest before intersecting another wall would be the best escape route. This simple solution worked, but only for about 40 seconds. At that point, Super Hexagon would start throwing more complex patterns, and the AI would fail. The final solution was to create an accessibility condition which also took into account how much space was available between the various approaching walls. This new version of the AI was able to beat the game.

So was this a more efficient method than grinding through Super Hexagon manually? Since [Val] now knows all about DLL injection and OpenCV, we sure think it was!

Click past the break to see the [Val’s] bot in action!

Continue reading “Beating Super Hexagon with OpenCV and DLL Injection”

A Raspberry Pi Garage Door Opener

We can never seem to get enough garage door hacks around here. [Tanner’s] project is the most recent entry into this category. He’s managed to hook up a Raspberry Pi to his garage door opener. This greatly extends his range to… well anywhere with an Internet connection.

His hack is relatively simple. He started with the garage door opener remote. He removed the momentary switch that was normally used to active the door. He bridged the electrical connection to create a circuit that was always closed. This meant that as long as the remote had power, the switch would be activated. Now all [Tanner] had to do was remove the battery and hook up the power connectors to his Raspberry Pi. Since the remote works on 3.3V and draws little current, he is able to power the remote directly from the Pi. The Pi just has to turn its pin high momentarily to activate the remote.

The ability to toggle the state of your garage door from anywhere in the world also comes with paranoia. [Tanner] wanted to be able to tell if the door is up, down, or stopped somewhere in the middle while he was away from home. He also wanted to use as little equipment as possible. Since he already had an IP camera in the garage, he decided to use computer vision to do the detection.

He printed off two large, black shapes onto ordinary white computer paper. One was taped to the top of the door and one to the bottom. A custom script runs on the Pi that grabs the latest image from the camera and uses OpenCV to detect the shapes. If both shapes are visible, then the script can assume the door is closed. Otherwise, it’s likely open. This makes it easier for [Tanner] to know if the door is opened or closed without having to check the camera himself.

Can’t get enough garage door hacks? Try these on for size. Continue reading “A Raspberry Pi Garage Door Opener”

Selfie-Bots Will Take Your Best Shots For You

Professor [Bruce Land] teaches a microcontroller class at Cornell University, and it seems like this year’s theme was selfie-taking-robots.

First up is a clever mix of technology by [Han, Bihan and Chuan]. What happens when you take an iPhone, three microphones and a microcontroller? The ultimate device in selfie-taking-technology, that’s what — Clap-on! The iPhone is mounted on a few servo motors which allows the bot to direct the camera towards, you guessed it, a clapping noise. On the second clap, the phone takes your picture. Cute.

Next up is a bit more sophisticated — a facial recognition selfie-bot. This little robot can be programmed to track faces and take pictures of you and your friends when your arm is just not long enough. Not only that, you can set all kinds of parameters so you get the perfect picture. It uses OpenCV to crunch the raw data and outputs commands to an ATmega1284 which controls the servo motors that direct the camera. This project was by [Michael and Jennifer] — two fourth year students at Cornell.

Continue reading “Selfie-Bots Will Take Your Best Shots For You”

Augmented Reality Pinball

Pinball machines are fascinating pieces of mechanical and electrical engineering, and now [Yair Moshe] and his students at the Israel Institute of Technology has taken the classic game one step further.  Using computer vision and a projector, this group of engineers has created an augmented reality pinball game that takes pinball to a whole new level.

Once the laptop, webcam, and projector are set up, a course is drawn on a whiteboard which the computer “sees” to determine the rules of the game. Any course you can imagine can be drawn on the whiteboard too, with an interesting set of rules that no regular pinball game could take advantage of. Most notably, the ball can change size when it hits certain types of objects, which makes for a very interesting and unconventional style of play.

The player uses their hands to control the flippers as well, but not with buttons. The computer watches the position of the player’s hands and flips the flippers when it sees a hand in the right position. [Yair] and his students recently showed this project off at DLD Tel Aviv and even got [Shimon Perez], former President of Israel, to play some pinball at the conference!

Super Smash Bros Gets a Revamp with the Microsoft Kinect

[Eric] just sent in this awesome Kinect hack that he and a few friends worked on. Playing Super Smash Bros with a Kinect.

The system makes use of two Kinects, and three PCs. The first Kinect records each individual players moves, while the second Kinect watches both players “fight” each other. The first PC runs an Nintendo 64 emulator to play the game.character selection

The second PC runs a camera with OpenCV to add another cool but perhaps unnecessary feature, you see, even the character selection is a physical process, adding to the idea of playing the entire game with your body. A glass table allows players to set their 3D printed token onto the glass, effectively placing it on the character they would like to use.

And when the match ends, a windshield wiper knocks off the losing player’s token from the table.

The third PC is responsible for running both Kinects, which then has to send the resulting commands back to first PC over a TCP connection for input into the game.

They introduced it to the public at MHacks Fall 2014, a hacking competition sponsored by Dell and Intel. Video Below.

Continue reading “Super Smash Bros Gets a Revamp with the Microsoft Kinect”

Twittering Chicken Coops, Batman!

By now you’ve seen almost anything Tweet. But have you seen the (French) twittering chicken coop? (Google translate link) [Hugo] had kept two chickens as part of a household-waste reduction campaign, and then afterward started work.

Even if you don’t read French, the chickens’ twitter feed basically tells the story.

The setup can take IR photographs of sleeping chickens and notify [Hugo] when it’s time to collect the eggs. Naturally, an abundance of other sensors are available. The coop can tweet based on ambient temperature, nest temperature, light level, motion sensor status, or the amount of remaining chicken feed. You can easily follow whether the two fowl are in the coop or out in the yard. It’s like Big Brother, only for birds.

The application is, frankly, ridiculous. But if you’re into home (or coop) automation, there’s a lot to be learned and the project is very well documented. [Hugo] used OpenCV for visual egg detection, and custom Python code to slightly randomize the tweets’ text. All of these details are up on his Github account.

And if you just can’t get enough chicken-coop hacks, be sure to check out this mobile chicken coop, this coop in the shape of a golden spiral, or this Bluetooth-enabled, talking chicken coop, among others. You’d think our name was Coop-a-Day.

THP Semifinalist: Autonomous Recharging For Multirotors

Even with visions of quadcopters buzzing around metropolitan areas delivering everything from pizzas to toilet paper fresh in the minds of tech blogospherites, There’s been a comparatively small amount of research into how to support squadrons of quadcopters and other unmanned aerial vehicles. The most likely cause of this is the FAA’s reactionary position towards UAVs. Good thing [Giovanni] is performing all his research for autonomous recharging and docking for multirotors in Australia, then.

The biggest obstacle of autonomous charging of a quadcopter is landing a quad exactly where the charging station is; run of the mill GPS units only have a resolution of about half a meter, and using a GPS solution would require putting GPS on the charging station as well. The solution comes from powerful ARM single board computers – in this case, an Odroid u3 – along with a USB webcam, OpenCV and a Pixhawk autopilot.

Right now [Giovanni] is still working out the kinks on his software system, but he has all the parts and the right tools to get this project up in the air, down, and back up again.


SpaceWrencherThe project featured in this post is a semifinalist in The Hackaday Prize.