Preview only show first 10 pages with watermark. For full document please download

A Beginners Guide

   EMBED


Share

Transcript

ROBOTICS A BEGINNERS GUIDE RAHUL MEHTA RAHUL RAWAT KESHAV IYENGAR ARCHIE LEE www.theRahulMehta.com MEET THE AUTHORS al Rahul Mehta is a mechatronics engineering student at the University of Waterloo. He has a long history in hobbyist robotics, and over the last 5 years has begun to study industrial level robotics. His skillset ranges from mechanical design to software development. He has worked with team 3683 First Robotics, the University of Waterloo Mars Rover team, and multiple open source robotics project. His professional experience with robotics include working at Intel Labs developing robotic systems, and MakeLab to head the robotic development. Within the last 3 years he has shifted his focus to human prosthesis and heavily developing his skillset to make an impact on any industry he chooses. Archie Lee is a mechatronics engineering student at the University of Waterloo. He has a passion for building robots and works mainly in software development. He got started with robotics soon after going to university having done no programming but picked up many skills working on school projects and teams. He has worked on a Mars rover designed for the annual University Rover Challenge and an autonomous RC racing car. Archie has worked with the University of Waterloo Robotics Team and the Waterloo Autonomous Vehicles Laboratory (WAVELab) and will begin working for Clearpath Robotics in early 2016. Keshav Iyengar is a third year mechanical engineering student from the University of Waterloo. Unlike most, Keshav started his interest in robotics later on in his post-secondary education. Having done a couple non-technical co-ops, he decided to take an internship on the robotics team for his third work term. Describing it as “the coolest job ever”, Keshav learned much of his fundamental knowledge here with the aid of mentors on the team. Upon completion, he continued to produce for project during his next school term. For his next work term, he successfully landed a software engineering co-op placement at Avidbots Corp, a start-up robotics company in Waterloo. Now, he is leading the effort to qualify for the 2016 University Rover Challenge and improving his software and mechanical skills through extra coursework and research. Rahul Rawat currently studies Mechatronics Engineering at the University of Waterloo and started developing robots upon founding an autonomous robotics team in an IB school. Starting in the Mars Rover Team, Rahul currently co-leads the University of Waterloo Robotics Team aspiring to specialize in robotic system architecture and autonomy. While working for Clearpath Robotics, he has developed software for Willow Garage’s PR2 platform and currently maintains an open source mobile robotics platform known as Razbot2 which allows individuals to learn and develop robots using industry grade software. ROBOTS 101 Simplified Anatomy of Humanoid Robots, regardless of what they’re designed to do generally all consist of a few fundamental components: sensors, controllers, actuators, and a software foundation. Sensors Robot sensors can be compared to our eyes, ears and touch. Without sensors the robot has no way of perceiving and analysing its environment and can only do exactly what the roboticist tells it to through pre written code. There’s two main types of sensors, one for sensing the environment around the robot and one for sensing the internal environment of the robot: External Photo-optic Sensors: like our eyes but can see a lot more such a larger wavelength spectrum, field of view, detail and distance with much higher precision. Contact Sensor: Touch sensors, buttons, and switches are all examples. Proximity Sensor: Radar, Motion, and LIDAR (laser) sensors are all examples of proximity sensors. Internal Gyro: Used to keep the robot balanced. Accelerometer: For measuring movement and sometimes used for orientation in space. Temperature: Regulates the internal temp of the robot and ensuring the system doesn’t overheat. Don’t worry we’ll get into more detail about these types of sensors later. ROBOTS 101 Actuators An actuator is a type of motor used for moving, controlling, or manipulating a mechanism or system in a linear or non-linear manner. To power an actuator you need a source of energy, electric current (batteries, or power supplies), hydraulic fluid pressure, or pneumatic pressure, and this is converted into motion. There’s a lot of different actuators out there: 1. Electrical Actuators a. Electric Motors i. DC Servos ii. AC Motors iii. Stepper Motors b. Solenoids DC Servo Motor Hobby DC Servo Motor Stepper Motor 2. Hydraulic Actuators a. Use hydraulic fluid pressure to move 3. Pneumatic Actuators a. Use compressed air pressure to move Hydraulic Actuator Pneumatic Actuator Every red circle in this diagram outlines the location of a servo motor. This actuator is not linear as is rotates. Every red rectangle in this diagram outlines the location of a pneumatic cylinder. This actuator is linear as it moves in a straight line. ROBOTS 101 Controllers As you can see by the diagram to the left for a robot to actually use any data from its sensor a controller is required to interpret the data and tell the actuators what to do depending on the input. A simple example would be an automatic paper towel dispenser. When the sensor mounted under the dispenser sees your hand it has to relay that information to the motor that dispenses the paper towel in a way that the motor will understand. This is where the microcontroller would be used, it would see a change in voltage when your hand was under the dispenser and based on how it was programed it would know to start the motor and dispense the towel. Control System Controllers in robotics get much more complicated then this but this is a satisfactory understanding for this section. Later we’ll talk about analog and digital signals, ADC, DAC, and get into much more detail about how motor controllers work. ASIDE An example of a micro-controller you’re probably familiar with is Arduino. If you’re not familiar with Arduino, go learn it! It’s a great place to start learning how to interface hardware with software, a must know for future robotics builds. https://www.arduino.cc/ Software 0 to 100 Robotics Software Development Keshav Before Robotics As a high school student, like many my age, I was not sure what I wanted to pursue. I had a strong background in math and science and an interest in physics. However, I felt like finance and accounting may be my calling since both my parents found success in this area. Applying to mostly finance undergraduate programs, I was unable to receive admission into the accounting and finance program at UW because of a poor supplemental essay performance. My secondary choice was Management Engineering, a blend of technical courses and business and finance courses that leads to a wide range of career choices. I chose this program for my undergraduate degree. After my first year, I realized I enjoyed the physics and science more than the business/finance/organization behavior. For my first work term, I worked at Mackie Moving Systems working with a consulting lean/six sigma engineer in improving some processes for medical equipment cleaning, shipping and storage. This was a pure industrial engineering co-op term so I got a feel for what I would be learning in the future.It was very technical work, and the interaction with the employees made the work term great. When I returned from co-op, I switched into Mechanical Engineering. During the school term, I bought an Arduino starter kit and tinkered for 4 months whenever I had free time. For my 2nd co-op, I worked at Amphenol Corp. My impression during the interview process was that it would be a mixture of technical and non-technical work however, during my time at Amphenol, a push on the non-technical side was needed. During the application process, I did not want to risk not having a co-op job so I took the offer I had which was Amphenol rather than risk any rankings or going into continuous round. Despite the three hour there and back commute, every day when I got home, I continued tinkering with my starter kit. I also started doing code academy courses. By the end of the term, I completed every single course they had at the time. I also enrolled in a Digital Logic and Microprocessor course via Coursera. In my next term, while applying for co-op jobs, I decided I would completely disregard my worries of not getting a co-op job. Rather, I would only worry about the quality of the position. After all, there was a wealth of knowledge on student teams who hired co-ops at the end of the term. For my next term I would work as an unpaid intern on the Robotics Team at UW. First Introductions and Mentors I believe that joining a student team changed my job prospects tremendously. That being said, you get what you put in meaning an unmotivated student on the team, will not get much out of the experience. I was very motivated and often stayed in the robotics bay for more than ten hours on some days. One of the most important factors in my success was the mentors I had on the team. My first mentor was the team lead.. Even though he was on an academic term, he was in the robotics bay almost as much as I was. He taught me the basics of electrical concepts, soldering skills, mechanical design concepts and control theory. As a student, I tried to ask as many questions as I could. Peter gave me tasks and projects which helped me further delve into the world of robotics. One month into my co-op term, I met software lead. The software and team leads were working together in a group for their 4th year design project which would be the Mars Rover Challenge. One of the projects given to me was to achieve actuation using the motor controllers so that we could have a driving rover. Using the control theory taught to me by the team lead, I implemented a crude PID loop for one wheel using the given Python Library for the motor controllers. It took me a large 0 to 100 Robotics Software Development amount of time but the satisfaction of having actuation far outweighs the amount of time spent. I really enjoyed problem solving and debugging by code to achieve the goal of actuation. I think it is always important to keep your goals in mind, and enjoy the progression as well as the eventual achievement. The software team took the crude PID loop and created three different drive systems for our rover. The drive could be switched simply by pressing a button on the PS4 controller. We spent many days and nights debugging the code to make sure the encoder feedback was working correctly and all the gain values were appropriate. Many students on the team has worked in some big tech companies as a software engineering interns and such. That being said one of the interesting things I did during this time was I tried to emulate the software leads style of writing and debugging code. For example, the software lead used VIM to edit lines of code while debugging. I learned VIM. The software lead used tmux to access both the rover pc and the base pc and switch between them easily. I learned how to use tmux. I think that helped me learn tricks quicker. Something else I did was I spent time sitting with the software lead and others while they wrote code for other parts of the rover. I always asked questions and tried to understand why they used certain logic and this lead to people on the team teaching me many software concepts as we came across them. While working on the Team, I met Pablo Molina, who was a Mars Rover Team Lead a couple years back. He was the CTO of Avidbots, a startup in Waterloo that develops autonomous industrial cleaning robots. I had a chance to interview with Avidbots as a Field Test Engineering co-op position. This would be a good role for me because I was very familiar with ROS and had great debugging skills. Also realistically, I had not learned enough C++ and OOP (object oriented programming) to develop code from the ground level. Upon getting the position, a set of circumstances led the company to need more developers at the ground level. This led me to become a Software Engineering co-op and started developing for the robots themselves. I spent time outside of work learning OOP and C++ and I believe that I contributions were worthwhile and in use today. A Beginners Guide to Learning Software for Robotics From Scratch What is the best way to learn software for robotics? From my experiences, I have some general tips that may help someone like me. 1. There are many websites today that like you practice your coding skills. Mentioned above, when I first started I used codeacademy practiced. I went through all the tutorials they had at that time. The great thing about codeacademy is that they provide an online platform for you to write code and check your solutions. I even completed courses on creating a simple website and an interactive website. It’s a fun and easy way to dive right in into developing. 2. We are in the age of MOOC’s (massive open online courses). I took a course on Microprocessors and Digital Circuits during one of my co-ops on Coursera. It was difficult to stick with it but in the end I learned a lot and the experience was worth it. If you are interested in a course unavailable to you, check out Coursera or other MOOC. 3. Find an application that interests you. For me, it was the robotics team. I was exposed to many people with similar interests and a wealth of knowledge. I find working on a team with other students towards a common goal is enjoyable, fulfilling and gets you familiar with the design process. 0 to 100 Robotics Software Development 4. Work on personal projects. Start small and work your way up to more complex projects. Document your projects on your resume or any other professional document. Only record them once you have completed the project to your satisfaction, this provides motivation to continue working on you incomplete projects. 5. Install Linux Ubuntu and learn bash and shell commands. This is not difficult and mostly just requires practice. 6. Complete the ROS Tutorials. Rather than just copy and paste commands into the terminal, try to understand what the commands do and how/why messages are being passed in each tutorial. 7. Clearpath robotics also has a great set of tutorials and simulations are provide more knowledge about the use ROS platform. 8. Lastly, always take pride in what you create. Keeping you work and projects to a certain bar that you set will result in better projects with better quality. GLOSSARY A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ONLINE COURSES Stanford Engineering Introduction to Robotics: The purpose of this course is to introduce you to basics of modeling, design, planning, and control of robot systems. In essence, the material treated in this course is a brief survey of relevant results from geometry, kinematics, statics, dynamics, and control. PRE REQUISITES: Matrix Algebra (1st year linear algebra is nearly sufficient) MIT Open Courseware Introduction to Robotics: This course provides an overview of robot mechanisms, dynamics, and intelligent controls. Topics include planar and spatial kinematics, and motion planning; mechanism design for manipulators and mobile robots, multi-rigid-body dynamics, 3D graphic simulation; control design, actuators, and sensors; wireless networking, task modeling, human-machine interface, and embedded software. Weekly laboratories provide experience with servo drives, real-time control, and embedded software. Students will design and fabricate working robotic systems in a group-based term project. PRE REQUISITES: Modeling Dynamics and Control I, Modeling Dynamics and Control II