Recent Posts

Pages: 1 ... 4 5 6 7 8 ... 10
51
For Sale / Re: Create 4400 Tailgate Cover
« Last post by u2s5n4ii on March 02, 2022, 06:01:01 AM »
Wow Nice Method
52
Software / Calculating next position for 3DOF arm
« Last post by Karbon14 on March 01, 2022, 08:41:52 PM »
Hi all, first, I have two versions of my question: 1) what is wrong with the way I am trying to calculate the Jacobian and then its pseudo inverse? 2) Does anyone have a good reference for how to solve for the next angles of each joint based on the velocity of the end effector and Jacobian?

Now some background: I am working on a hexapod and trying to design the inverse kinematics and path following for the individual legs. Because this will involve a lot of repletion/trial and error, I am designing a simulator to help me test my pathing so I don?t accidentally break something. I?ve laid the groundwork for a lot of it; drawing the robot, homogenous transform calculation, even calculating the Jacobian.

What I?m running into is trouble solving for the inverse Jacobian. The first time it?s calculated seems fine and the arm moves a little bit toward its target. The second time it?s calculated, the values go to extremes causing the arm to basically invert itself. The third and subsequent times, it seems fine. (See attached gif for example.)

I?ve reviewed formulas, not seeing any issue there. I?ve reviewed outputs and haven?t found anything out of the ordinary besides the pseudo inverse. And the visuals appear to make sense after the inversion of the arm.

I?ve done a lot of research for examples of inverse Jacobian math but can only find symbolic solutions.

Is there something I?m missing? Code provided below, I?ll mention this is in Ocatave/Matlab.

Code: [Select]
clc;
clear;
clearvars;

function H = Hg(th,a,r,d) % Creates homogenous transform
  H = [cosd(th) -sind(th)*cosd(a) sind(th)*sind(a) r*cosd(th);
      sind(th) cosd(th)*cosd(a) -cosd(th)*sind(a) r*sind(th);
      0 sind(a) cosd(a) d;
      0 0 0 1];
end

function drawLeg(t, xp, yp, zp, Body, CoxaS, FemurS, TibiaS, EndEfS)
  CoxaV = [CoxaS(1), FemurS(1); CoxaS(2), FemurS(2); CoxaS(3), FemurS(3)];
  FemurV = [FemurS(1), TibiaS(1); FemurS(2), TibiaS(2); FemurS(3), TibiaS(3)];
  TibiaV = [TibiaS(1), EndEfS(1); TibiaS(2), EndEfS(2); TibiaS(3), EndEfS(3)];
 
 
  plot3(xp, yp, zp, 'b.') %draw path
  hold on
  plot3(CoxaV(1,:), CoxaV(2,:), CoxaV(3,:), 'm', 'LineWidth', 3) %draw coxa
  plot3(FemurV(1,:), FemurV(2,:), FemurV(3,:), 'g', 'LineWidth', 3) %draw femur
  plot3(TibiaV(1,:), TibiaV(2,:), TibiaV(3,:), 'r', 'LineWidth', 3) %draw tibia
  axis([Body(1)-5 Body(1)+5 Body(2)-5 Body(2)+7 Body(3)-5 Body(3)+5])
  axis equal
  %body centered graph to make sure it stays in view while walking
  grid on
  hold off
  pause(t)
end

function [Th1, Th2, Th3] = stepLeg (t, Th1, Th2, Th3, x, y, z)
  ### DESIGN ROBOT ###
  % 3DOF articulting arm
  % Start with only z offset for center of robot.
  x00 = 0;
  y00 = 0;
  z00 = .5;

  % Link lengths
  a0 = 2; %distance from body center to leg 1, UPDATE FROM CAD
  a1 = .5; %length of coxa in cm aka base (joint 0) to joint 1 in z direction
  a2 = 1; %length of femur
  a3 = 1; %length of tibia

  ## DH Parameters ##
  Th0 = 30; %UPDATE FROM CAD
  A0 = 0;
  A1 = 90;
  A2 = 0;
  A3 = 0;
  r0 = a0;
  r1 = 0;
  r2 = a2;
  r3 = a3;
  d0 = 0;
  d1 = a1;
  d2 = 0;
  d3 = 0;
 
  ## Build vectors for each segment ##
  % Each line has an extra element to help the matrix math
  Body = [x00; y00; z00; 1];
  Coxa = [0; a1; 0; 1];
  Femur = [a2; 0; 0; 1];
  Tibia = [a3; 0; 0; 1];

  ## Generate all homogenous transforms ##
  Hb0 = Hg(Th0, A0, r0, d0);
  H01 = Hg(Th1, A1, r1, d1);
  H12 = Hg(Th2, A2, r2, d2);
  H23 = Hg(Th3, A3, r3, d3);
  Hb1 = Hb0*H01;
  Hb2 = Hb0*H01*H12;
  Hb3 = Hb0*H01*H12*H23;

  ## Calculate starting locations for each segment ##
  CoxaS = Hb0*Body;
  FemurS = Hb0*H01*Coxa;
  TibiaS = Hb0*H01*H12*Femur;
  EndEfS = Hb0*H01*H12*H23*Tibia;

  ## Draw the leg ##
  drawLeg(t, x, y, z, Body, CoxaS, FemurS, TibiaS, EndEfS)
 
  ### Now to give a target for the leg ###
  ## Generate Jacobian ##
  # Rotation matrices #
  Rbb = [1, 0, 0; 0, 1, 0; 0, 0, 1];
  Rb0 = Hb0(1:3, 1:3); %use first three rows and first three columns
  Rb1 = Hb1(1:3, 1:3);
  Rb2 = Hb2(1:3, 1:3);

  # Displacement vectors #
  dbb = 0;
  db0 = Hb0(1:3, 4); %use first three rows of fourth column
  db1 = Hb1(1:3, 4);
  db2 = Hb2(1:3, 4);
  db3 = Hb3(1:3, 4);

  # Joint rotation velocity matrices #
  rbb = Rbb*[0;0;1];
  rb0 = Rb0*[0;0;1];
  rb1 = Rb1*[0;0;1];
  rb2 = Rb2*[0;0;1];

  # Create the culumns representing partial diffferentials for each joint #
  %zeroth = [cross(rbb, db3-dbb); rbb] % not needed since it's a fixed joint
  first = [cross(rb0, db3-db0); rb0];
  second = [cross(rb1, db3-db1); rb1];
  third = [cross(rb2, db3-db2); rb2];

  # Concatinate into the jacobian #
  fullJ = [first, second, third];
  % only need the cartesian portion
  J = fullJ(1:3, 1:3)
  Jinv = pinv(J) %Print for troubleshooting
 
  ## Calculate the velocity of the end effector ##
  EndEfS %Print for troubleshooting
  TargetX = x(1) %Print for troubleshooting
  TargetY = y(1) %Print for troubleshooting
  TargetZ = z(1) %Print for troubleshooting
  Err =[x(1); y(1); z(1); 0] - EndEfS %Print for troubleshooting
  fullV = ([x(1); y(1); z(1); 0] - EndEfS)*t;% Calculate velocity of EE
  V = fullV(1:3); % Removing the last element since it's trash info

  # Calc new joint angles #
  w = pinv(J)*V; % Calc joint velocities
  delTh = w.'/t % Calc change in joint angles
  Th0 = Th0; %this should never change?
  Th1 = Th1 + delTh(1);
  Th2 = Th2 + delTh(2);
  Th3 = Th3 + delTh(3);
end


### TIME STEP ###
t = .001

### BUILD PATH ###
% test to determine how piecewise funcitons would work to create path.
% This square looks really nice for now
for i = 1:96
  if i <= 24
    x(i) = i/6;
    y(i) = 3;
    z(i) = 1;
  elseif 24 < i  && i <= 48
    x(i) = x(i-1);
    z(i) = z(i-1)+1/6;
    y(i) = 3;
  elseif 48 < i && i <= 72
    x(i) = x(i-1) - 1/6;
    z(i) = z(i-1);
    y(i) = 3;
  elseif 72 < i && i <= 96
    x(i) = x(i-1);
    z(i) = z(i-1) - 1/6;
    y(i) = 3;
  end
end

### Set Up Initial Angles ###
% Starting angles
Th1 = 60; %UPDATE FROM CAD
Th2 = 0;
Th3 = 0;

### Time Loop ###
for i = 1:10
  [Th1, Th2, Th3] = stepLeg(t, Th1, Th2, Th3, x, y, z)
end
53
Electronics / Re: Robot Controller
« Last post by mklrobo on February 22, 2022, 12:05:46 PM »
 ;D  Hello!   ;D

   welcome to the robot forum!  ;D

   To address your question of using a PC for a robot, I would offer my projects
with doing the same thing. There was a company called Prairie Digital, that makes
PC boards that fit into the slots for a PC, giving an interface to the real world,
controlled through your program.
   i used Turbo C++; but you can use python, perl, or visual basic. I would recommend using
the programming language that the board manufacturer recommends. They usually give
code examples of how to use their board, online.

   You can also go to digikey, jameco, and the robot shop to get boards that attach to
the serial/USB port to control relays. You can get speed controllers and any range of
motor controllers.

   This is not free, so use whatever metric you have to decide where you want to go with the
robot.

   The robot investment should be a multitasker, so you can get the most out of the robot -
entertainment, enlightenment, and enjoyment.

 see you next time, same robot channel,  same robot time!

 8)  excelsior!   8)
54
Electronics / Robot Controller
« Last post by jairojosy on February 18, 2022, 04:32:35 AM »
Hi, I am a 15-year old robot enthusiast from India. I am currently building a demi humanoid robot and I was in search of a microcontroller. I tried using Raspberry Pi but it was not enough for me. My next option was to use Nvidia Jetson Nano, but it was really expensive. It was around 335(approx.) in Amazon. For Indians like us, 300 dollars is highly expensive. Since I am a student and not having a job I am living under my parents and have no source of income. My parents cannot afford to buy this Jetson Nano. Recently, I found my old PC lying around. I was thinking if I could use that as the controller for my robot. If yes, could you please explain how can I do it?
55
Misc / Re: Articulated Robot Question
« Last post by mklrobo on January 14, 2022, 02:11:16 PM »
 :) Hello!

     To add to the discussion;

    If you remember, the HERO robot came out in 1984, and was one of the most
loved robots of all time.  :-*  It did have wheel drive, movable guide wheel, and an
"articulated" arm.
   the HERO Jr. was the second most popular, but only had drive wheels
and a guide wheel.

   So, there you have it!  ;D Functionality and cleverness of the device makes the
robot!
   Depending on your function, it could be the best robot in the world, who knows?  ???

see you same robot channel, same robot time!1  8) excelsior!   8)
56
Misc / Re: Articulated Robot Question
« Last post by mklrobo on January 14, 2022, 01:47:38 PM »
  ;D  Hello!

     I would assume 2 or more joints, or degrees of freedom, would constitute
an articulated robot. Mousetraps are considered to be a type of "robot" to
some definitions, but I would not call it a robot.
    If the robot is a moving base or arm, but has no intelligence with the
function it is performing, then that would be a sad robot.  :'(
    Google 's Alexa has no arms, but can do alot of work. In this sense, if you could make a
body for Alexa, to respond to physical commands coupled with the original
intelligence, you will have a interesting robot!  ;)

    Anyway, good luck on whatever you are working on!!  ;D

 see you same robot channel, same robot time!  8) excelsior!  8)
57
Misc / Articulated Robot Question
« Last post by meilingerwooddesign on January 06, 2022, 05:46:46 PM »
Does a cylindrical robot with 2 vertical rotary joints (one on base, one on arm) make it articulated?
If so, when I remove one rotary joint (base or arm), does that make it non articulated?
Thanks
58
 8)  excelsior!   8)

   Hello again!   ;D

   Another tactic your could do, is to buy a truck with the motors already on it; take them
off and use those on your project! Sounds crazy,  :o  I realize, BUT, you know those
motors work, AND, as cheap as the RC vehicle get, you probably will pay almost the
same price!  ;)

Good luck with your project!! see you  :) same robot time, same robot channel!!   :)

59
 8)  excelsior!!   8)
   

    Hello! I reviewed the info on your motor;
" The Turnigy TrackStar Sensorless Brushless Motors offer outstanding performance at an incredible price!

Featuring a quality CNC motor can, hand-wound high purity copper windings and powerful sintered neodymium magnets, you wont find a better priced motor of this caliber anywhere else!

The Turnigy TrackStar brushless motors make a great upgrade for 1/8th short course trucks, monster trucks, buggies or anything else that uses 42 size motors.
"

  According to the advertisement, I would think the motor would have no problem with the application you are trying
to do. However, " there is many a slip, between the cup and the lip".   :'(

   What I am saying, is consider the following;

1> review the DC power supply you are using - will it deliver the required amps, and more?  ;)

2> experiment with loads on the wheel with the step programming to find out the parameters of
     what might be going on. - save the data, as this will help you navigate problems in the future.  :-[

3> try a gear down transmission - the motor is rated for running fast, which is great, but may not
     deliver the torque advertised. (reviews for the motor are great IF you have a RC boat)  :-X

  I went through the internet briefly looking for reviews of the motor, and found great reviews for RC boats,
but not any for trucks or wheeled vehicles.  :-\

  Good luck with your project!  ;)

  see you same robot time, same robot channel!   8)

60
I am trying to drive a wheel with a brushless DC motor controlled by an ESC connected to an Arduino. When there is no load on the motor I am able to run the motor fine, so I know the Arduino program and wiring works. However, once I attach the wheel I want to use, the motor (not the ESC) rotates the wheel a little, starts beeping, and shuts off. The wheel should be well within the torque range of the motor. The motor does this if I also program a large step input for speed, so I think this is some kind of safety feature. Has anyone heard of anything like that? How do I control this motor properly?

Link to motor: https://hobbyking.com/en_us/trackstar-1-8th-2050kv-brushless-sensorless-motor.html#qa[bW9kZT03JnBhZ2U9MSZxdWVzdGlvbl9zZWFyY2hfY29udGVudD0=]

Link to ESC: https://www.amazon.com/dp/B08HWQ58QX?psc=1&ref=ppx_yo2_dt_b_product_details
Pages: 1 ... 4 5 6 7 8 ... 10

Get Your Ad Here

data_list