Dorian Tsai

Dorian Tsai

Hello! I'm Dorian, a PhD Researcher with the Australian Centre for Robotic Vision researching computational imaging and light field cameras for more robust robotic vision with transparent objects.

Location Brisbane, Australia


  • Hi @SimonWhitehead I have not used the Arduino support package myself, but I have heard great things about it. Let us know how it goes!

  • Glad to hear it @WalterMills !

  • Hi @WalterMills for running matlab on pi, you can't run Matlab's desktop version on a pi, but you can interact with the pi through Matlab, and you can use Matlab Coder (which probably isn't included in this course's Matlab license) to run your algorithm on the pi as an application.


  • HI @MarkWilliams, I agree that Matlab is a giant install. Try going through the install process for Matlab of this course, and see if you can get an activation code or license file. If so, you probably don't need to re-download. Otherwise, you might have to do a full re-install for the latest version of Matlab.

  • Hi @RainaireHansford , as mentioned below, these are functions that you'll need to code yourself, as they are specific to your robot. For an explanation on the forward and inverse kinematics, and how to do them for your robot, check out the Move a Robot arm course, Peter's textbook, wiki, or any other robot arm info source. Hope that goes well. Cheers!

  • H i @SACHINGUPTA these are functions that you'll need to code yourself, as they are specific to your robot. For an explanation on the forward and inverse kinematics, and how to do them for your robot, check out the Move a Robot arm course, Peter's textbook, wiki, or any other robot arm info source. Hope that goes well. Cheers!

  • Looking pretty cool @RaulVillaseca ! How close are you to putting the marker on the end effector and drawing paths with it?

  • Hi @MatthewMatin be sure to read some of the comments below. One of the keys to getting smooth operation out of the arm is reducing the friction of the pencil/pen on the paper. Counter balance works well. Soft pencil/marker might also work well, especially if you put a clear plastic sheet on top of your worksheet. This way you can wipe the excess marks away...

  • @MatthewMatin Glad to hear! It's all about trying to remove possible sources of error as you work on/debug a system. As a general approach, it's often useful and instructive to try and build the most basic thing from the ground up, and then add on fancy features, rather than aiming for the most complex design from the get-go. Instead, start with a simple...

  • Welcome @LancelotAllison enjoy the course and feel free to ask away as you progress!

  • @MatthewMatin Liam's working with the NXT because that was this course and these videos were developed back around 2012. EV3 is the next generation of LEGO Mindstorms products, and definitely the preferred hardware for this course, as it has the most support from many other platforms. If you continue to have trouble with the NXT, I would definitely go for...

  • Hi @RaulVillaseca it's always a struggle to get the hardware talking with the software. All of us roboticists know the struggle. :)

  • Hi @SimonWhitehead to manage acceleration and deceleration, check out trapezoidal motion profiles. There's a variety of youtube videos that show how to set this things up. As for getting them to work together, can arduino send signals to both motors at the same time? I think it can.

  • What hardware are you working with/trying to get to move through Matlab? There are a variety of software packages and step-by-step instructions available on many sites on t he internet/Youtube that can show you how to get the Lego Mindstorms NXT/EV3 motors moving.

  • Hi @SujanPandey this Futurelearn course uses/provides the most recent version, which is MATLAB 2019b.

  • Hi @AndresCorredor the intent is for you to write your own code that would control the robot in a correct path to accomplish the task. You can then test the algorithm using the arm simulator that we've provided to make sure that the code works/your theoretical understanding of the problem is correct *before* trying to get the whole thing working in hardware.

  • Hi Matt, just replied to your email. With respect to the error verLessThan(arg1,arg2), it does sound like there are compatibility issues. verLessThan(arg1,arg2) is a function in MATLAB that returns true if the version of the specified toolbox (arg1) is older than the required version specified in the string (arg2). Either you are missing the Control Systems...

  • Hi @Aditya.kumarjha If you're just trying to learn Matlab, consider going to the source, which is They have an e-learning academy as well:

  • Hi @LavishK I'm not certain the Matlab course on Futurelearn is still active; however, if you're just trying to learn Matlab, consider going to the source, which is They have an e-learning academy as well:

  • An alternative might be to reduce the friction of the writing utensil by giving it wheels or ball-bearings. Consider creating a "rig" that fastens to the pen/pencil , but can easily roll about on a flate plane in any direction (eg, omni-directional wheels or ball-bearings). Such a rig would also stabilize the manipulator a bit more, since a single point of...

  • @EricPoole No worries. It's easy to lose track of all the comments and responses.

  • Great to hear! Hope you learned a lot from the course and the other people interested in robotics :)

  • Hi @LalaGadimovaLalaGadimova glad you had a good experience with the feedback and your peers. :)

  • Incidentally, moving slow is a nice way to simplify the robot control problem because you can often ignore a lot of the dynamics of the system. They should be pretty negligible for the low-mass robot systems that most people are developing in this course, but for the big heavy industrial robots, inertia and dynamics must be weighed against the...

  • And you will learn much more, while embracing open-source. :)

  • Hi @BasitJacob it looks like the imread function cannot find the bra_worksheet.png.
    This can occur for a number of reasons, but the most likely are:
    1) the file does not exist on your computer
    2) the code cannot find the file (it has an incorrect file path)
    3) the filepath has the correct folder names, but possibly the wrong folder separator (eg "/" in...

  • @WalterMills Awesome. I love how you are recycling old devices that still have good parts!

  • Feel free to let us know if there are still other errors with the app. Cheers!

  • Hi @ChrisGarrard @ColinLythall we're working with Peter to patch the app, but for now here's what you need to do to make the app work on MATLAB 2019b:

    1) Open up MATLAB 2019b and try to run the simulator. You get an error "Error in SerialLink/plot>create_robot (line 467)
    d = norm( d(4:6)-d(1:3) ) / 72;". You should also be able to click on the "plot" file...

  • Hi @SujanPandey I believe the Matlab scripts are available back in 1.7

  • Hi @MiguelMartinez what is the reason for building a 3DOF robot for the task? Does the robot need 3DOF?

  • Hi @AlanClark if the base is not sturdy enough, any thoughts on how you might improve it and make it more rigid, or perhaps balance the weight a bit better?

  • Hi @LarissaDeck the wires might get in the way. I recommend using tape , velcro wire organisers, or quick ties to secure the wires to the arm.

  • Hi @LarissaDeck just wondering, what's the motivation for using a planetary gear?
    Also, the rack and pinion look pretty good. Hope the print turns out well!

  • Hi @RaulVillaseca it matters for precision, but for the given task, the motors should be sufficiently accurate. Ultimately, it depends on how accurate you want to be. To be more accurate, you would need to account for these effects. You could model these effects and predict what they would be. Or you could have an independent sensor/measurement device (to...

  • @LarissaDeck lego is awesome, until you discover 3D printing. Then it's like you can make your own LEGO!

  • @ChrisGarrard how will you make the arm linkages (ie, the structural components) of the arm?

  • Looks pretty cool @ChrisGarrard ! Will you mount the arm onto your mobile robot platform?

  • Awesome progress so far @LarissaDeck . Time is definitely one of the world's most precious resources. I'm glad to hear you are spending some of it exploring the area of robotics! It also sounds like you're on the right path. Happy tinkering!

  • Hi @LarissaDeck inaccurate gears/joints are a real-world challenge for robots. It often helps to have an independent method of measuring joint angles if your mechanics are slightly unreliable. This gets into the concept of feedback control. If you can measure your joint angles independently, you can move your robot a bit (still generally in the correct...

  • Awesome. Welcome to the course Patrick!

  • Hi @WalterMills what kind of motors are you controlling and how are you controlling them? You can often control the speed of motors based on what voltage/PWM frequency you send the motors without needing a reduction drive/gears. This may simplify your design.

  • Hi @WalterMills it's interesting to see how you have related the robot arm to the relative motions of the human body. From a theoretical point, if we consider motion on a plane (as we are for this exercise), a rotating waist joint and a shoulder joint are both revolute joints. Similarly, a bending elbow joint and a wrist joint are simply revolute joints. So...

  • @AlanClark that's a common situation. Python is an interpretted language (higher-level); whereas, C/C++ is compiled for machine hardware. Thus, C/C++ can run much faster. We still often use C++ when we want robots to run fast. :)

  • Sounds good. I'm keen to see how the robot turns out! :D

  • @AlanClark the MG996R servos come in a 360deg and 180deg versions. So achieving 180deg rotation with the servos shouldn't be a problem. If you are having trouble getting the full rotation when controlling the motor through the Arduino, what units do you need to use to communicate with your specific servo motor?

  • Hi @ColinLythall sounds like a pretty well thought setup. Small motors should suffice for this project. Just bear in mind that the joint resolution of the stepper motors will ultimately affect how fine/coarse your trajectory will be for the robot end effector. Also consider how to attach your pencil/pen/marker, and how to add or subtract mass from the tip to...

  • Hi @WalterMills sounds good. If you have any questions, feel free to post them along the course and we'll do our best to answer them. Cheers!

  • Hi @ChunduruBharath some important considerations would be:
    - make sure that your microcontroller has sufficient input/output pins for controlling the actuators and reading from the sensors.
    - what kind of sensors will you be using? Some actuators have built-in feedback sensors in them.
    - what coding platform and microcontroller will you be using? Certain...

  • Hi @MushfikaAnjum yes, we go through the steps needed to access the Matlab robot arm simulator in section 1.7

  • Hi @FedericaSpadazzi if you have any specific questions, feel free to directly message one of the mentors (Obadiah, Edward, or myself). Brandon Armstrong is also available to answer questions related to Matlab. The key is to have specific questions prepared so that we can answer them. An alternative is to simply learn Matlab directly from the Matlab academy,...

  • Hi folks, there's also Octave, which is an open-source Matlab. I'm not sure what the support is for Raspbian, but if it's open-source, it probably plays very well with Linux and thus Raspbian. Cheers!

  • Hi @LarissaDeck it should be possible. So long as you can control a few motor positions (ie, robot arm joints), any device can work. The Arduino Leonardo has 7 PWM outputs. You'll likely only need at least 2 to control 2 servo motors. Of course, you're free to build a more advanced robot arm. In this course, we're just covering one of the simplest arms. As...

  • Hi @LarissaDeck I've never encountered gcode, but from a quick look on Wiki, my guess is that gcode is more of a framework/programming language for the CNC manipulators and 3D printers. Underneath the framework, you still need to have the theory/math in place. In this course and the related courses on Robotics, we are focusing on the theory and math, and...


  • Hi @ManuelaRaso welcome to the course, this should be a good compliment to your background then. Feel free to ask questions as you go along. Either the mentors or other course-mates will respond to your posts. Cheers!

  • Hi @ChrisGarrard welcome to the course! Sounds pretty exciting!

  • Hi @EricPoole well put. It will also be interesting to see how both genetic algorithms and machine learning (more specifically deep learning) will play a role in robot design and automation. I suspect it will be quite significant.

    Regarding your last point on robot perception, it reminds me of Roy Batty's speech from Blade Runner. :) I do agree! Thanks for...

  • Hi @GuusLöhlefink well put!

  • Many surgery robots need to have tiny/minimally-invasive manipulators. In these cases, there's simply no space for large actuators, so a lot of it is still made with cables. I think at QUT, there's also some fairly novel snake robots being proposed for surgical purposes that rely on cables. :)

  • Hi @EricPoole what is your expression for calculating q1? What error are you receiving?

    Here's part of the MATLAB solution for q1:
    P = mtraj(@tpoly, pA, pB, 50);
    x = squeeze(P(:,1)); y = squeeze(P(:,2));
    q2 = sqrt(x.^2 + y.^2 - (a1+a2)^2);
    q1 = -atan2(x, y) + atan2(q2, a1 + a2);
    qtraj = [q1 q2];

    You should be able to tell whether or not your q1...

  • Hi @JarrodMcCarthy good question. It's very similar to the process we did in 2D last week. q1.. qn are joint variables - they move. a1, an are fixed link lengths - they do not move. a1 will always be the same, regardless of our arm's orientation, so we do not constantly need to update them. q1...qn on the otherhand - they define the position and...

  • Hi @ShreyasAgrawal good question. It's all a question of what frame of reference we are in -- a question of relativity. Without any of the math, let's consider a robot facing forwards and looking at you, 2 meters away. You are not facing the robot. In your frame of reference, or from your perspective, the robot is to your left 2 meters. If you tell the robot...

  • Hi @DaxRosales analytically, we want to follow the same steps we made a few steps ago (see link below). We're simply combining the rotational and prismatic equations now. There are equations for rotational links, and equations for translational links. Since our system is linear, we can simply multiple each of these equations in sequence, providing us with a...

  • Hi @GuusLöhlefink you are correct in the max and min workspace. The arm's workspace (the area where its end-effector can reach) is described by a ring. The point of the exercise is to figure out the kinematics: given a Cartesian coordinate, tell me the joint angles required by the manipulator to get to that spot.

  • Hi @EricPoole I don't think q2 is an angle. From the looks of it, q2 is a prismatic joint, so it would have units of meters. Given that knowledge, can you see how the arm's end-effector/the end of the arm could reach P1? Hint: think triangles.

    Actually, the exercise is on revolute-prismatic arms, so there is one rotating joint and one linearly-extending...

  • Hi @EricPoole glad to hear you arrived at a graphical solution. It should be possible to use trchain2 in that fashion, although I recall that trchain2 is bugged in that it does not recognize any translations. Using the base functions, it would probably be something like this:

    trot2(q1) * transl2(0,a1) * transl2(q2,0) * transl2(0,a2)

    This is very similar...

  • Hi @WalterMills as far as working with the equations, is it the algebra part of the equations, or understanding how the equations relate to physical behaviour/what the equations represent?

    If it's the former, I would recommend putting some time into learning about algebra and introductions to math courses like Calculus. There are lots of free options on the...

  • Hi @VINODHRAVI the 3x3 transformation matrix for 2D is made up of two parts, a rotation matrix (elements 1:2,1:2) and a translational component (elements 3,1:2). I suggest looking up on wiki "2D rotation matrix" in order to get a better understanding of what it is.

  • Hi @SimonWhitehead I believe there are quite a few Python/C++ packages out there. One of the most popular that comes to mind is the ROS (Robotic Operating System), which is in Python and C++, and in particular, the MoveIt and Transform packages have a lot of manipulator/kinematic functionality. Definitely check them out! :)

  • Hi @SimonWhitehead I think nowadays, Scara robots are most common in manufacturing settings where the robot only has to work in a plane. With only 2D motion required, the mechanical components become simple and then the robot can be made strong and fast. This is what you want for a manufacturing robot. :)

    For tasks like repair and recycling, you're probably...

  • Hi Mark, I think typically yes. Solve for the positions, so you know what joint angles make the desired trajectory. Then you can figure out the corresponding joint angles by solving the inverse kinematics. Then you can control the velocity and acceleration profiles of these joints in order to control the acceleration. I'll check with some of the other mentors...

  • Glad to hear it Keith!

  • Hi @micahogbeifun it seems like there's a bug in trchain2. It doesn't register the translation components. Try using the base functions as I suggested below.

  • Hi @MarkWilliams well done! It's amazing how easily these things can leave you, but also a bit comforting when they come back just as fast. :)

  • Hi @JarrodMcCarthy I had a quick go at this and found a similar bug in the trchain2 code.

    For now, just try using the base functionality of multiplying the transforms together:
    trot2(q1) * transl2(9,0) * transl2(0,3) * trot2(q2) * transl2(7,0)

    Also, be careful of units. What are the units that are given to you, vs what do the functions (trot2 and...

  • Hi @SUATTANIR yes, motor drive, gears, joints are discussed a bit later in Week 2 and in more detail at the start of Week 3. For now, we're providing an overview of the types of arms and the theory on how to characterise them. Then we'll get into the gears of things. :)

  • Welcome @CharlotteAssamoi feel free to reach out and ask us if you have any questions along the way. There's also an abundant discussion after each exercise. :)

  • Hi @AUGUSTINEAONDOWASE awesome. Computer science and robotics often go hand-in-hand. There is something oddly satisfying about seeing your own code manifest physically in the real world. Glad you could join us!

  • Welcome Karthik! An integral component to robotics is programming them, so you've got an excellent set of skills to get right in!

  • @LarissaDeck Bingo! :)

  • Probably one of the best videos I've seen on this topic is by Kurzgesagt - In a Nutshell:

  • Thanks @AlexM !

  • @JarrodMcCarthy Ah, true. I just meant a single revolute joint. This means all it can do is rotate about one axis.

  • Hi @MoisesAntonioMazzarolo well done in figuring out (3) and (4). If we're considering 2D, in general, a vector can be described by 2 numbers. Each number represents a magnitude along a particular direction. Each direction is linearly-independent of each other (like the x and y directions, or forwards and left (equivalently backwards and right). The linear...

  • Hi @LarissaDeck, excellent example of the 2D geometry usage in soapmaking!

  • Hi @KeithPottTurner if you have a specific question or trouble, please feel free to ask us for help. The important thing is to precisely articulate where you are having trouble; otherwise, it is very difficult to help you. Cheers!

  • Hi @JarrodMcCarthy nice stuff. If you want to plot the lines, try looking up:

    Basically, your 3 points of a triangle can define a line. Matlab can draw a line for you from point-to-point. Try it out - it's very useful.

  • Correct - for a rigid body. 3 position and 3 orientation.

    So what happens if your body is not rigid? Let's say there is one rotating joint in between the two halves of your robot. We can describe the position and orientation of part of the robot with 6 numbers, but how can we describe the rest of the robot? How many numbers (Degrees of freedom) would we...

  • Matlab is a very powerful tool. It's designed precisely for this sort of thing. It's also not free though. There are other free alternatives, like Python's Numpy/Matplotlib and Octave; however, there is less support and a steeper learning curve. It's a reasonable trade-off that enables you to choose.

  • But as far as other areas of work, what about construction?

  • @SimonWhitehead definitely. Navigation is one area. Can you think of any others? 2D geometry isn't limited to the spatial domain (ie, 2 meters West, 4 meters East). What about other units that you could "navigate" in 2D? What if you had time on your x-axis, and distance on your y-axis? You would be looking at velocities, but as far as the geometry is...

  • Hi @AlexM does New Zealand have much in the way of robotics? I'd be really interested to know. I just got back from a trip in NZ and had an amazing time tramping and mountaineering.

  • Hi @EdwinaRigby you might find that the Lego Mindstorms approach to this course is not too different from many toy robots available on the market today, but you are always welcome to grab a microcontroller like the Arduino, some servo motors and some basic construction materials (eg popsicle sticks, glue, etc) and try to really make a robot from more basic...

  • Hi @SholaMoses I have no doubt that robot hacking (ie, hacking into a robot's systems and taking control of it) will be an issue in the future. This is a decent starting point to understanding the fundamentals around what makes robots tick.

  • Hi @LouisRoberts I find one of the aspects that is most rewarding is seeing your robot - your system and your code - make an impact in the real world. Have fun with this course and feel free to ask away.

  • Awesome. Enjoy the course and feel free to ask questions around.

  • Being hacked is generally seen as a bad thing, but people can also be bought and bribed. Is that much different from hacking into an AI system driving?

  • Hi @YindingHu that is typically the thought by many at the moment; however, robots and AI are continually working on creative applications. There are areas of computer-aided design and AI-inspired design. Many of these designs are based on the optimisation of certain parameters, but the results can be truly inspiring. For example....

  • Hi @NatalieTang I too believe that new opportunities will arise, but it is interesting to think about what capabilities robots had 10 years ago and compare them to what robots are now capable of. In 10 years time, what will robots be capable of? The jobs that robots can complete are becoming increasingly complex and ever closer to what humans can do. Do you...