Ask Slashdot: Learning Robotics Without Hardware?
An anonymous reader writes: I live in a Third World country with a more or less open Internet access. I'm thinking of learning robotics. I can access Github and other free software repositories, and I can read or watch online tutorials in English. My only problem is that we don't really have the money to buy robotics hardware. We can afford an Arduino or Raspberry Pi board but not the mechanical attachments. So is there any chance for me to learn robotics even if I don't have the hardware? Is it possible to program a robot using pure software simulation?
Very theoretical
Kinematics - study of movement and geometries, brush up on your Calculus :)
Vision systems, again, very mathmatical
You cannot do this just by brute force.
Go to YouTube, go to Mit open course ware, do the courses, start at 101 and work up.
This is the stuff Masters starts at.
http://www.robots-everywhere.c... mkb@robots-everywhere.com
Liberty - Security - Laziness - Pick any two.
Take a look at ros(ros.org) and gazebosim(gazebosim.org).
Is it possible to program a robot using pure software simulation?
Yes.
A robotics simulator is used to create embedded applications for a robot without depending physically on the actual machine, thus saving cost and time
You should buy a something like a SBC (Pi or Arduino) and get a breadboard and some motion control chips and a a stepper motor. All of that together will cost about $60. (Breadboard maybe $10, chips maybe another $10, stepper motor maybe another $10, Raspberry Pi maybe $30). You could at least learn the basics of working with the chips and working with a motor.
Avoid Missing Ball for High Score
I teach a robotics class and every design works perfectly up until you build it. Approximately 20% of the class is learning enough java to edit a pre-exiting program for an andorid. 20% is brainstorming ideas for task solutions. 20% is building it and 40% is figuring out why your ideas failed and coming up with simpler ones.
Your best bet might be to do something like "turtle" graphics or write games that move icons around and respond to bouncy inputs.
That said once you have the pi is it really that hard to get a few components? isn't there some old toy with a DC motor somewhere that could be recycled? You clearly have a computer access and computers break or get replaced. THere's motors in those things. Even a cell phone has a motor (the vibrator).
I am reminded of a student who had just come from China several decades ago. She new fortran perfectly but had never actually used a computer or run a program. Turns out she could not program at all when it came to actually do something original. I nearly fell off my chair when she told me she had never written a program. She could read them just fine.
Some drink at the fountain of knowledge. Others just gargle.
It's not exactly the same, but even basic concepts of learning to teach a turtle to walk in a square is akin to some of the most rudimentary robotics.
https://en.wikipedia.org/wiki/Logo_%28programming_language%29
Simulation software might cost you, but not as much as actual hardware. I found this with a quick google search http://robotvirtualworlds.com/.
Yes, you can learn a lot of robotics without actual hardware. I develop software for self-driving vehicles, and spend 95% of my time away from the hardware!
ROS + Gazebo will let you assemble a robotics software stack and explore different planning and control algorithms in simulation: http://gazebosim.org/ and http://www.ros.org/
If you want to explore perception and computer vision, take a look at OpenCV ( http://opencv.org/ ) and the tutorials there. The great thing about computer vision is you can run your software against the standard research sets or images you pull off Flickr.
Point Cloud Library is a nice package for looking at 3D laser data (but has some numerical quirks): http://pointclouds.org/
I would definitely take a look at some MOOCs, Andrew Ng's Machine Learning at Coursea (https://www.coursera.org/learn/machine-learning) or the MIT Courseware ( http://ocw.mit.edu/courses/ele... )
Hack into any of the connected cars that are being sold, program them to your liking, and then watch the news for feedback?
I've worked in "third world" countries, (how I hate that term).
On the downside, most things are run into the ground and then thoroughly scavenged for everything possible of value.
And then the rubbish dumps are hand-sorted. Because lots of young people plus no money = lots of hungry manpower
But I'm sure you can get people interested in your project, and get things of very, very little value for your projects.
Because everyone is thirsting for knowledge, (as well as clean water)
Get creative! Get the community involved, trade teaching hours for hardware...
Cars will yield fuses, voltage regulators, thin wire of little value for copper for the recyclers, switches and - in more moderns ones recently crashed - plenty of tiny electric motors again of zero value to a recycler but fine for your projects.
Almost anything can get you started - old TVs are of course the absolute best, just jammed full of stuff!
But washing machines are pretty good too, and even an old coffee machine can get you an electric thermostat plus the power supply.
Look on the web - there are dozens of sources that will help you turn old stuff into some magnificent steampunk robotics!
You don't have to buy an expensive kit of parts to make a robot.
Oh, and by the way, you don't have to buy a Pi either - you can get started by using a washing machine controller as your program control unit.
(Sadly now banned in many parts of the world, since they make excellent bomb timers)
Not everything has to be digital...
Have fun!
Short answer: It's possible to do a lot with simulation, but most of the real learning happens when you deal with actual hardware.
Note: I don't use the produce I'm going to mention, but looked at it in the past... Its not that it wasn't good, its just that I went another direction.
You might look into the Robot Operating System (http://www.ros.org). It includes an advanced simulation environment called RVIZ. You would probably need a fairly high performance computer to do a complex simulation, but simpler configurations may not be stressing for lower-performance hardware. You can simulate systems that would be very expensive to actually build. The site provides packages for Ubuntu Linux.
Learning in a simulated environment can be difficult. To really understand the issues involved it helps to be guided through a set of objectives that introduce the different topics in a way that isn't overwhelming. I don't know if such coursework is available for ROS, I'd be surprised if there wasn't something available.
The logic and programming needed to solve a robotics problem is really only about half of puzzle. A lot of the skill set needed for robotics is in dealing with actual hardware that doesn't always (or ever) work exactly as it should. Even without this extra learning, you can probably build a good foundation with simulation alone.
Yes it is possible (and often preferable) to learn in a pure software emulated
environment.
Start with turtle graphics. While old school this is where many have started
their programming journey.
Simulators that model real systems are critical to the design and maintenance
of all manner of real world systems. This is what many video games are...
i.e. they are simulators of real or imaginary systems.
Modern graphics invites a 3D turtle graphics environment where ants
can place blocks and build bridges to navigate turtles over.
Yes a Raspberry Pi is a wonderful learning tool.
It is possible to explore almost any programming language you can name.
And yes there is a Turtle Graphics application set.
The big value of a SBC like the Raspberry Pi is all the levels are open enough
for any level of software tinkering and they are easy to recover if your hacking
adventure steps on the OS. The logic of the Raspberry Pi is low voltage
but it is very easy to add LEDs for small change. A current limiting resistor and
an LED cost small change. The schematics of the Raspberry Pi shows how the
onboard LEDs have been interfaced.
Look at QEMU -- it is a very interesting simulator and tool kit.
Big powerful robots are expensive but the simulation
tool set is a necessary layer that any robotics project will need.
Without a good simulation expensive hardware becomes expensive junk.
https://www.willowgarage.com/p...
And if you make and document your progress there are individuals and companies that
will fund a project in areas lacking schools, funding and infrastructure.
Truth is stranger than fiction, but it is because Fiction is obliged to stick to possibilities; Truth isn't. Mark Twain.
"So is there any chance for me to learn robotics even if I don't have the hardware? Is it possible to program a robot using pure software simulation?"
Learning how to write a simulator and then program inside of it is pretty interesting and a particularly useful skill itself. Not being able to translate it into hardware and test against real world truth sucks, but the experience is not to be spurned.
You are not going to believe this, but a EV3 Core (Educational) kit of Lego Mindstorms will let you learn some amazing things. Spend $350 on the EV3 Core kit, plus $5 per pound for another 30 pounds of used Legos. That will be about $500.
You can run Linuxcnc on any PC in SIM mode. There is also the Vismach simulator to show 3D previews of a physical machine.
You can download it all for free here:
http://linuxcnc.org/
http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Vismach
If you don't mind working at a higher abstraction level, Player/Stage (available on SourceForge) provides a multi-robot simulation.
Just hack into somebody else's bot at 2am. As long as you set it back to its original spot before the morning alarm clock and don't break the china, the owner may never know the diff. Pick an already-messy house and use the bot to clean it up. A net gain for both sides.
Table-ized A.I.
Third world country could really mean any of the "have not" states in the USA, of which there are many.
Oh, wait, the poster mentioned more or less open internet access, so that wouldn't be the USA, it's some *other* third world shithole.
It's been a while since I played, so I don't know what the status are for mods with the new re-write by Microsoft ... but there's ComputerCraft, which adds turtles to the game.
You can program them to do tasks like digging tunnels, building roads, etc.
If not that, I'd have to second the argument to learn Logo. (25-30 years ago, that's what schools would use to control robotic arms and such, so it's not just for turtle graphics)
Build it, and they will come^Hplain.
Forget about mechanical robots. They are cute, but you can waste a lot of your time in that arena.
As Marvin Minsky famously said. "Graduate students are wasting 3 years of their lives soldering and repairing robots, instead of making them smart. It's really shocking."
If you really want to understand the foundation of robotics, study how to make something "smart".
It could be a smart program that autonomously combs through the internet to increase its knowledge base.
It could be a software assistant that learns to communicate with disabled people.
Forget the motors and gears. it's only a reflection of todays "fashion" in robotics.
For a start, learn how to program a neural net. There are thousands of simple examples if you google for them.
You only need a computer and a knowledge of a programming language.
Look into genetic programming to study how nature does it -
http://www0.cs.ucl.ac.uk/staff/wlangdon/ftp/papers/poli08_fieldguide.pdf
Remember, you don't need money to learn robotics.
Program bots to do things like mining in Eve Online.
In the free world the media isn't government run; the government is media run.
Get a beefy workstation, and bring up ROS using the Gazebo simulator. You can define your own robots, and you have a full physics simulator. You might look at the Fetch Robotics web site for a demo that you can download. The demo gives you a full model of a Fetch, and a demo script that you can start hacking on. This is exactly how the developers at Fetch work up their code before deploying on actual hardware.
So not only is it possible to do serious, state-of-the-art, robot software development in a purely simulated environment, if you go to any serious robot research lab in academia or industry, you will have to show your code working on the simulator *before* you are *allowed* to run your software on real hardware.
ROS has pretty much taken over as the framework for academic research except for places like CMU and MIT that have many years invested in their own robotics software frameworks. Even at those places, there are labs switching over to ROS depending on the underlying hardware. In industry, you find companies prototyping in ROS and replacing open source modules with "secret sauce" modules to market differentiation as they ramp. ROS is also where serious hobbyists are going now. So, if you want to get into a robotics graduate school program, or into robotics industry, learn ROS, do something original, and put together a good demo screencast.
So..... you will not run the Gazebo simulator on a RasPi. Build the beefiest X86 Ubuntu workstation you can afford, and be *very* careful about choosing a compatible graphics card. Go to ROS.org to find specs. X86/Ubuntu is the reference platform and development platform for ROS. There are ports to lots of other platforms, and people *do* run parts of ROS (not Gazebo) on RasPi's. Porting ROS is *not* a beginner's project. Take the easy route. Every. Time. (For now, things continue to get better.....)
Read up on the ROS open source operating system and the PR2 robot's software simulator.
Check out ACE from Adept. It can be used to program their real robots or in simulation mode.
Windows OS only AFAIK. Free to download. We use it at work to modify our production software before we load it on the real hardware.
http://www.adept.com/products/software/pc/adept-ace/general
You can learn the software portion OK, but you do need the hardware to get the full experience. Are you familiar with Hackerspaces? They are basically clubs for people who share interest in programming / robotics and tech in general. They get together on regular bases to learn and do projects. If you can get a couple of people who share your interest in robotics you can each contribute some money and buy the components you need. Alternatively you can improvise and build / scavenge the components you need. That might turn out to be a lot more fun actually.
The BEST way to learn about robotics is to study it in fictional media.
Pick up Star Trek, and study the cyborg known as Data. Pay attention to the Borg, and trace what little clues are there in their origin. Pick up Doctor Who and look at the Cybermen and Daleks, and pay attention to why the Doctor's always at war with them.
Pick up the movie "Terminator" and study the interactions the robots have.
Look at Elbot (http://elbot_e.csoica.artificial-solutions.com/), and Cleverbot, and pay attention to the similarities in the information acquisition, the discontinuities both exhibit, and the vocabularies (here: http://www.cleverbot.com/)
Your computer, the one you are sending this request to, is a rudimentary robot. It includes peripherals which provide the computer stimulus in digitally interpreted fashion. Fictional media resources feature robotics which acts in a very predictable fashion, there's no spontaneity, the actions are guided, and there teds to be responses in reactive form to external stimulus received in highly predictable fashions.
So my advice is - before you go and get the Microsoft Robotics SDK or anyone else's interpretation of robotics, then study the core Microsoft Windows operating system at a messaging and routing perspective. Specifically: the WM_ messages and ask yourself - how are devices which 'come online' notified system wide?
What you're going to find is: software vendors have a habit of detaching you, the developer, by building in object layers and layers of abstraction away from the physical events themselves, but Windows - from the ground up - was actually built FOR robotics based on a messaging system and adoption of new peripheral devices that would be built, later, and applications devel
You certainly can, but it's like learning about sex without a woman/man/sheep.
At the bottom of the
But it's a lot more fun to learn with it. I grew up poor as well and without the convenience of Arduinos or RPis, back then it was a $5 PIC16F84 kit or programming a parallel port on an old 80286. Motors were scavenged from tape recorders or fans, stepper motors from printers that we couldn't repair and later on from CD drives. Power transistors and transformers came mostly from audio amplifiers. I don't think I spent more than $200 between age 10 and 15 most of that was on a good multimeter.
Custom electronics and digital signage for your business: www.evcircuits.com
There's an old saying, "In theory, there's no difference between theory and practice. In practice, however, there is."
You can get really far with pure simulation, further if you write the simulation yourself (no better way to learn all the important variables than to implement them) but at some point you need to experience the messy reality, where stuff like tensile strength and friction live. Where you need oils and lubricants and vibration damping.
I build a lot of robots. I can see two from where I'm sitting, three if you count the laser galvo system. Some of my best are complete Borg creations.. mismatched pieces, wires hanging off, random scrounged parts... and they hurl themselves into the air with astonishing fury, because (with power to weight ratios being what they are) what you leave off is just as important as what you put on.
Now, I realize I'm in a privileged position, and I've been collecting robot pieces for a long time now (in a society which throws away useful components all the time) but I started small, by collecting broken things, taking them apart, and seeing if they could be repaired, or scrounged for parts. I have a "parts bin" of old broken radios and computers that saves me immense time and cost when I just need a 10uF cap, or a 100K resistor, or a bit of wire.
And remember, robots don't _have_ to be made from electric motors. How about hydraulics driven by boiling water with toaster wire? A miniature steam-engine doom tank? Moving fluid drops around with electric fields? I've seen remote-controlled planes powered by rubber bands.
Use what you have, because the engineering challenge is the same. Time and interest are your greatest resources.
After a while, you realize "The Robot" is an idea in your mind, and the physical version is just a shadow of that. Bits break and fall off the "real" one all the time, but like the Japanese Temple, you can replace or upgrade every part and yet still it's the "same robot" so long as you remain committed.
Incidentally, one of the best "robot simulation" systems I've seen is the game "RoboCraft". You build driving/flying/shooting vehicles from minecraft-like parts, and battle! The physics simulation is good enough to properly represent driving a half-exploded tank on it's remaining wheels, and teach you why redundancies are good.
Jeremy Lee | Orinoco
Feel free to read what the OP wrote. As for prices, those may be what you can pay locally but that is absolutely no indication of what the same things cost elsewhere.
The BEST way to learn about robotics is to study it in fictional media.
Pick up Star Trek, and study the cyborg known as Data. Pay attention to the Borg, and trace what little clues are there in their origin. Pick up Doctor Who and look at the Cybermen and Daleks, and pay attention to why the Doctor's always at war with them.
Pick up the movie "Terminator" and study the interactions the robots have.
Look at Elbot (http://elbot_e.csoica.artificial-solutions.com/), and Cleverbot, and pay attention to the similarities in the information acquisition, the discontinuities both exhibit, and the vocabularies (here: http://www.cleverbot.com/ [cleverbot.com])
Your computer, the one you are sending this request to, is a rudimentary robot. It includes peripherals which provide the computer stimulus in digitally interpreted fashion. Fictional media resources feature robotics which acts in a very predictable fashion, there's no spontaneity, the actions are guided, and there teds to be responses in reactive form to external stimulus received in highly predictable fashions.
So my advice is - before you go and get the Microsoft Robotics SDK or anyone else's interpretation of robotics, then study the core Microsoft Windows operating system at a messaging and routing perspective. Specifically: the WM_ messages and ask yourself - how are devices which 'come online' notified system wide?
What you're going to find is: software vendors have a habit of detaching you, the developer, by building in object layers and layers of abstraction away from the physical events themselves, but Windows - from the ground up - was actually built FOR robotics based on a messaging system and adoption of new peripheral devices that would be built, later, and applications developed for them once the device came online and found widespread use.
Take up Microsoft Visual Studio - C++ for a direct and easy to manage message pump and study they effects in the message pump when devices are brought online. My advice is to pull down Visual Studio 2005 or 2008, both of which Microsoft distributes as torrents if you can't afford it here: https://kat.cr/usearch/microso... [kat.cr]
Now be careful. Other languages such as Java, Python and ;NET may offer SOME semblance of message pump handling, but it's abstracted away from the hardware layer through volatile assemblies which have seen a ton of problems with compatibility and mismanagement of memory, not to mention it's not nearly as fast as managing the message pump yourself.
Now what's this all have to do with robotics?
If you study media, you understand where civilization is going and what - hardware wise - we have in store for our future. There's no 'quick and dirty' solution to robotics programming, the software is already all available out there, you just gotta learn how to learn about it and leverage it for yourself.
And thats where practice, practice, practice comes in.
And a few expenditures.You aren't gonna be able to get by this in the end.
You could, but it would be largely pointless. In the real world, unless you're an entity like NASA (with resources to match), hardware almost never behaves exactly the way it's officially supposed to. Electronics can be simulated perfectly. Mechanical devices? Not so much. Your simulated stepper motor makes certain assumptions about torque, inertia, etc. that are mostly guaranteed to be invalid once you try it in a real device with worn bearings operating running across a shag carpet or wet floor.
The sad fact is, robotics isn't a hobby for poor people. The electronics part is cheap thanks to Arduino and RasPi (and Edison, and ...), but once it's time to start adding hardware, all bets are off. Sure, you can make a sub-$100 robot that can follow lines and avoid running into walls, but the moment you get bored and want to add real sensors & stuff, prepare to fork out some SERIOUS cash.
Just to give one example: Crustcrawler.com's AX12-AHW robotic arm kit. It's $399... not counting the 7 Robotis AX-12A digital servos you'll have to buy for around $45 apiece, and the power supply, and the controller, unless you already have them. Now, this is an awesome, kick-ass robotic arm. It's well-designed, and can probably be used to do useful things. But damn, it's expensive.
All kidding aside, the iRobot Create is one of the best platforms to get started with... it's under $100 at Amazon, and gives you not only the ability to detect walls and collisions, but also gives you the ability to avoid running down stairs & furnishes data about its actual, measured motion.
If you really want to do something meaningful without a real robot, get a cheap webcam for your PC and learn how to use OpenCV. If you ever get to work on a real robot someday, OpenCV programming knowledge will be very useful... especially since RasPi-based robot controllers can use the same cheap webcams as desktop PCs (assuming they support Linux & have open-source drivers you can build for the Pi).
Big tip to programmers who want to get into robotics: if you anticipate needing hardware that can't be purchased off-the-shelf, become friends with a mechanical engineer. They understand things like drivetrains the same way you understand things like recursion & objects... and he (or she) probably finds programming to be about as frustrating and alien as you find trying to bolt things together (dropping screws & nuts into the carpet, gouging your finger with the screwdriver, etc). There's a tiny bit of overlap between the electronic and mechanical realms, but most people who develop robots are teams of two (or more) with complementary skill sets.
The problem of robotics it's that it's a very multidisciplinary field. For my experience, robotics encompasses electronics, mechanical engineering and artificial intelligence.
Mechanics: inverse and forward kinematics, trajectory generation, control...
For the mechanical part you would need pretty much a solid mathematical basis. It would be at least first year of engineering but you can do it with high school maths in case you don't want to go very far (which honestly , you don't need).
There are tons of software and libraries for robotics mechanics, so you don't need hardware at all. Nevertheless, at the end of the day, you would only be able to understand properly mechanics when dealing with real problems, and real problems come with real physical experiments.
Electronics
As with mechanics, you have plenty of software to play with. But in this case, I would say it's actually pretty difficult to properly understand electronics without actually building your own circuits. You can learn the basics with simulators, but again you would need to make your hands dirty if you actually want to really state you know electronics. In the case of electronics often times you find out that simulations are a very ideal case that doesn't have into account many aspects that only show up in actual circuits (heat, induced current, current/voltage limits, soldering and many many many more).
IA :) ). That'll be a good start point and if you don't do anything fancy, you'll be good to go. :D ). For example, this an integration of reinforcement learning with deep learning http://www.nature.com/news/game-playing-software-holds-lessons-for-neuroscience-1.16979
IA is usually applied to computer vision, but it is also playing more and more an important part in the control side of the robot. You can go and play with OpenCV using webcams (I'll assume you can afford a pair of cheap webcams
If you want to go master IA you'll have to most likely learn reinforcement learning (for control), deep learning (for vision) which require a solid basis of mathematics (more or less like 'Mechanics'). Nevertheless, both reinforcement learning and deep learning are fields that are extremely interesting by themselves alone. Not to mention, they have the power of being the 'next big thing' in IT, just at the level of Internet or integrated circuits (yes, my subjective opinion, but I had to say it !!
Things are cheap. Arduino Pro mini is $1.50 - stepper motors $1. SG90 servos $2. Ultrasound sensors = $1.60. GY-521 6DOF gyro is $2.04....
Parts are small and cheap.
As a robotics engineer from a "3rd world" country now working in a "1st world" country my advice is the following: For motors and sensors, locate old printers. They are a treasure and have dc motors with gears, stepper motors, barrier sensors, mechanical "push" sensors, etc... For electronics I used to "order" sample chips, and usually got 5 to 10 samples for free. ROS is for free, as well as online courses in programming, embedded systems and control theory.
Then, when the opportunities arise in your life to pursue robotics, your mind will already have a foundation.
Probably not what you are looking for with your budget, but in regards to answering your question "Is it possible to program a robot using pure software simulation?"
Yes: http://new.abb.com/products/robotics/robotstudio
I used a cheap chinese Arduino clone, and had a (meArm laser-cut from acrylic. Combined it with some very cheap mini-servos from Aliexpress, and I had a very basic robot-arm.
AliExpress is awesome for these electronics things - worldwide free shipping, and the prices are really ridiculously cheap sometimes.
You can then code up some basic code in the Arduino that lets you remote control the servos from a PC with the programming language of your choice (I use perl).
After that, you can e.g. add a 5$ webcam to your computer, to combine your robot arm with basic computer vision, or add some seonsors to the arm, and so on.
Robotics is the conglomoration of many different diciplines including mechanical engineering, electrical engineering, computer science, fabrication, and more. You can learn the computer science part using simulators, but just knowing that doesn't mean you've "learned robotics". There are plenty of pure theoretical areas you can explore in robotics without access to anything, not even a computer. So, it's really important to be very specific about what it is when you say you want to learn robotics.