Marvin: The brains of the universe, and who can do the lawnmowing?

I have been working some years now on building my own lawn mowing robot. I know you can buy a lawnmower robot in the shop but after intense market search I didn't find anything suiting my needs.
The main problem is that the inhabitants of my garden like to make piles which makes for a very unflat surface. After some trials to make it flat I gave up and started designing Marvin.
Marvin is a 4by4 frontmower lawnmower robot. He is planned to become fully autonomous but currently still needs to be brought to his charging station. Marvin is currently taking care of around 3000 square meters. But is planned to be able to handle 5000 and probably even more.

Here you can see the blades that cut the lawn.

I'm actually very proud right now as Marvin has been mowing more than 4 consecutive days without any breaks and is still going.

Marvin only has a on/off button. All the feedback and input is provided by the automatically generated web interface which looks like below

or by the remote control.

The main electric components of Marvin I think of right now are 1 Arduino mega; 4 mega power shields; 2 LiFePo4 batteries; 4 motors for the wheels; 2 motors for the cutting blades; 2 PC ventilators for cooling the cutting motors; a switching regulator; a hacked linksys router, rc receiver.
Still to be added: GPS and magnetic compass.

If you want to know more about Marvin feel free to ask.

Best regards
Jantje

Candy Crush? Really!? :~ :stuck_out_tongue: :wink:

Your robot looks industrial strength, nice!

I am curious how you power the Arduino, given your motors are probably 12-24V?
Did you do anything to make the Arduino enclosure water resistant, given grass, piles of unflat stuff and weather can all be wet to some degree?

Amazing work. :slight_smile:

Cool project! The robot and web interface looks great.

Do you have a wire around the lawn that defines the area to be mowed? If that the case, could you describe how you build the wire sensor?
Hope you continue to update this thread if you add more features!

/Olof

aarondc:
Candy Crush? Really!? :~ :stuck_out_tongue: :wink:

I need something to do while I keep an eye on Marvin 8)

aarondc:
Your robot looks industrial strength, nice!

I am curious how you power the Arduino, given your motors are probably 12-24V?
Did you do anything to make the Arduino enclosure water resistant, given grass, piles of unflat stuff and weather can all be wet to some degree?

Not all components are industrial strength yet. The drive motors are the weakest points and I'm still looking for a better solution for those.

All the motors are running on 24V. I have a relays that switches between 24 and 12 so I charge the batteries separately at 12 volt without removing them from the robot.
As stated I drive the motors with a mega moto Robot Power Products - MegaMoto Motor Control Shield for Arduino I like this shield because I never broke one ]:D. It is kind of expensive but it produces hardly any heat.

And little heat is appreciated as I put all the components in a water tight box. You can clearly see this on this picture of the wooden prototype.

I drill holes for the wires and close the remaining gaps with glue. (Still some work there though)

Well you did help me out with the lua part. :slight_smile: Thanks for that :smiley:

olof_n:
Cool project! The robot and web interface looks great.

The web interface is cool and works great. It is part of the code I'm planning to make public but some parts are not for the Arduino targeted public ;-). I already published the basic class that allows for line by line communication over the serial port. You can find that code here ArduinoLibraries/SerialStringReader at master · jantje/ArduinoLibraries · GitHub
This is a bit outdated image of how the communication works (outdated at the level of the commands). I guess this is pretty much the same as the yun will work.

The whole web interface works on the serial port. I spend lots of time on this as I found I lost speed when I started running the robot in the garden (that is when I no longer had the robot on a table with his wheels lifted). Changing parameters and getting logging data involved

  1. getting the robot
  2. opening the water tight box ( problems when it is raining)
  3. getting the sd card out for investigation
  4. updating the code
  5. get my laptop to the robot
  6. remove the usb cord for power
  7. attach usb to laptop
  8. upload the new sketch
  9. remove USB
  10. plug USB for power
  11. replace sd
  12. Make sure you did not disconnect any cables while fiddling around.
  13. close lid
  14. restart.
    This is not something I want to do on a daily basis.

Basically the web interface works as follows: The Arduino sends data to the serial port which is interpreted by a ash script that puts the data in a file based on a keyword at the beginning of the line.
For the generation of the web page (it is only one page -and script is used to hide show the content-) the Linux sends the command DUMP to the Arduino. Arduino sends a "kind of" memory dump which the ash script puts in a file and when the dump is done the ash script starts a parser on the file that generates a html page.
This means any Linux machine connected to a Arduino over the serial port, can be used to generate and serve the web pages.
It also means you do not need the web interface as you can still run all the commands from the serial port.

olof_n:
Do you have a wire around the lawn that defines the area to be mowed? If that the case, could you describe how you build the wire sensor?
Hope you continue to update this thread if you add more features!

I have investigated into the wire thing. I ended up with 3 problems.

  1. lots of it is patented
  2. Most of what I read was beyond my knowledge of electronics.
  3. Given the amount of animal activity in my garden I don't really trust a wire. (*I have had some bad experience with a dog guard wire)

On the other hand I used to have chickens running in my garden so the whole garden is fenced in one way or another. So I opted for a bumper and a sonar.
The sonar for slowing down the driving speed when something is close and the bumper to cut the grass as much as possible.
I never got the sonar to work (I need a water tight one) so I started with only the bumper and that seemed to be more than ok. So I dropped the sonar.
I'm planning to use GPS to get the robot to his charging platform. (I know about the precision problems with GPS ...so don't go there)
More questions: feel free to ask.

Best regards
Jantje

I just had to switch Marvin off for some repairs after he has been fighting the fence to keep him from falling into the water.
The fence for the water is currently a line of stick in the ground so Marvin can get behind them with his wheels and get stuck.
Marvin ran for 442581842 millis or about 5.1 days.
I don't think something major broke but a good checkup with the power on is not a good idea.
Best regards
Jantje

Maybe you better read the short story: Killdozer! by Theodore Sturgeon.

It was about when a bulldozer became sentient and started, er, causing trouble.

I hope that if he does he goes for the moles 8)
Best regards
Jantje

I have written 2 blogs explaining the code and posted the code on github.

It is a long story but I think it is worth it.
Post 1 http://blog.baeyens.it/#post7
Post 2 http://blog.baeyens.it/#post8

in post 3 I plan to focus on the openwrt/linux part that makes the glue to the internet.
With a bit of luck my yun will arrive tomorrow so I can test it on there as well.

Please tell me what you think.
Best regards
Jantje