Tuesday, December 16, 2014

running m-file from Simulink

Create Block Callbacks

You can create block callbacks interactively or programmatically.
To create block callbacks interactively:
  1. Right-click a block, and in the context menu, select Properties.
  2. In the Block Properties dialog box, select the Callback tab.
  3. Create the callback code.

To create a block callback programmatically, use the set_param command to assign MATLAB® code to the block callback parameter.
ex: 
openFcn: -> m file to run 

Monday, December 15, 2014

Register SimMechanics Link with SolidWorks

Follow this link.
http://www.mathworks.com/help/physmod/smlink/ref/linking-and-unlinking-simmechanics-link-software-with-solidworks.html?refresh=true

Software Requirements

Registration requires that the following two products be installed on your computer:
  • SolidWorks
  • Download SimMechanics Link Software

    You can download SimMechanics Link software directly from the MathWorks® website:
    1. Visit the SimMechanics Link download website athttp://www.mathworks.com/products/simmechanics/download_smlink.html.
    2. Select the software version to install.
    3. Click Submit.
    4. Save the installation files in a convenient folder.
      Do not extract the zip file.

    Install SimMechanics Link Software

    Install SimMechanics Link software from the MATLAB command line:
    1. Start MATLAB.
        Note:   You may need administrator privileges to complete the installation.
    2. At the MATLAB command line enter:
      path(path, '<installation_file_folder>')
      replacing <installation_file_folder> with the path to the folder with the installation files.
    3. At the MATLAB command line, enter:
      install_addon('<zip_file_name>.zip')
      replacing <zip_file_name> with the name of the zip file that you downloaded (e.g., smlink.r2014b.win64). The command extracts the zip archive files to the MATLAB root directory

    Register SimMechanics Link

    To register SimMechanics Link with the CAD platform:
    1. Start a new MATLAB® session.
    2. At the MATLAB command line, enter smlink_linksw.
    3. MATLAB displays a message stating that linking was successful. You can close MATLAB.

    Add SimMechanics Link to SolidWorks Menu bar

    SimMechanics Link is now registered as a SolidWorks add-in tool. To use the tool, select the tool as an active add-in:
    1. Open SolidWorks.
    2. In the menu bar, select Tools > Add-Ins.
    3. In the Add-Ins dialog box, select SimMechanics Link.
    The menu bar of the CAD platform displays a SimMechanics Link menu item.

Wednesday, October 15, 2014

Using Latex.

Cài lại latex.
1. Cài đặt MiKTeX 2.9: vào trang chủ http://miktex.org/ để tải
2. Cài đặt TeXMaker 3.2: vào trang chủ http://www.xm1math.n...aker/index.html để tải
Nếu cả hai chương trình đã được cài đặt theo mặc định thì TeXMaker sẽ tự động nhận ra MiKTeX, và chúng ta không cần phải cấu hình gì thêm.
Để dùng thêm eps thì cài thêm 
gs864w32 -> ghostscript 
gsv49w32 -> PS Viewer 
PDF Viewer 
In Quick Build: LaTex + Bib(la)tex + LaTeX (x2) + dvips + ps2pdf + View Pdf
Tiếp download template của hội thảo muốn submit và chiến. 

Monday, June 16, 2014

Path-Planning Approaches

Path-Planning Approaches

  1. Roadmap


Represent the connectivity of the free space by a network of 1-D curves


  1. Cell decomposition
Decompose the free space into simple cells and represent the connectivity of the free space by the adjacency graph of these cells

  1. Potential field
Define a function over the free space that has a global minimum at the goal configuration and follow its steepest descent


Cell-Decomposition Methods

Two classes of methods:

§Exact cell decomposition
The free space F is represented by a collection of non-overlapping cells whose union is
exactly F
Example: trapezoidal decomposition ( phân hủy hình thang) 




Monday, May 19, 2014

Lie group and lie algebra

A lie group is a differentiable manifold. An example of Lie group is the orthonormal matrix (ma trận trực giao) in R3x3, which is called SO(3).  Note that this group consists of the rotation matrices in Euclidean space. Another example of Lie group is the group of homogeneous transformation which is the special Euclidean group or SE(3).
Given rotation R  in SO(3) and translation b in R3, the homogeneous matrix is defined as follows
T = [R b;0 1]
An important concept associated with each Lie group is the notation notation of Lie algebra.
The tangent space at the identity element of  a lie group is called the lie algebra for that group.
The Lie algebra of SO(3) and SE(3) are denote so(3) and se(3) respectively.
Let us define some notations and operations on Lie groups and Lie algebra:



Monday, May 12, 2014

Biển Đông.

Dạo này tình hình biển đông của việt nam đang nổi sóng, trung quốc đem giàn khoan vào sâu trong hải phận của việt nam. Mọi người ai cũng quan tâm và sôi sục tinh thần chống giặc. Mình thì lúc đầu cũng bị hút vào khí thế đó mà cho rằng phải đánh, nhưng tất nhiên vẫn lăn tăn, đánh thì đánh thế nào, lấy gì để đánh, tóm lại là cũng khá đau đầu. Nhưng tự nhiên hôm nay ngồi ngẫm lại thấy một số điểm hay ho như sau.
1. Dư luận một số người cho rằng đây là một nước đi không ngoan của Trung quốc, lợi dụng thế giới đang hút vào sự kiện ở ukraine nên đem giàn khoan vào nhà Việt Nam. Hải phận là nơi không dân có dân cư nên tất nhiên là chẳng có đổ máu, cho nên cũng không phải là sự kiện gì gì đó quá to tát để thế giới phải can thiệp.
2. Nhưng đáp lại nước đi tinh quái của Trung Quốc thì Việt Nam cũng quá khéo, nhanh tróng thu thập đầy đủ hình ảnh video để thể hiện rằng Trung Quốc không những vào sâu trong hải phận VN mà còn hung hăng gây hấn. Tránh đối đầu sức mạnh mà tiến hành họp báo đưa bằng chứng và kêu gọi ủng hộ của Arsean và quốc tế.

- Được và mất là gì:
Cứ cho là hút được ít dầu thăm dò đi thì Trung Quốc đang sa lầy ở mặt trận ngoại giao:
- Bao năm gây dựng hình ảnh là sự trỗi dậy hòa bình của một Trung Quốc hùng mạnh. Nay thì sao, cái giàn khoan còn nằm ở đó thì một hình ảnh Trung Quốc ngang ngược càng hiện rõ. Chả phải là khắp nơi trên thế giới từ học giả cho đến các nhà chinh trị đang lên án Trung Quốc đó sao.
- Đây rõ ràng là cơ hội để thu hút sự chú ý thế giới về biển đông, nhân tiện khơi lại vụ Hoàng Sa luôn, tiện đường thì tung hê đem nhau ra tòa luôn một thể.
- Trung Quốc còn để cái ụ sắt đấy thì Việt Nam sẽ lại càng được nhiều phía giúp đỡ, không mạnh cái này thì cũng mạnh cái khác.

Mà nhìn lại trung quốc cũng có đầy điểm yếu ra đấy.
- Nội tình đất nước có ổn định đâu. Với cái nội tình đó thì đem quân đi sâm lược e là hơi khó. Tính đánh vài ngày là song ah, có chơi trường kì với việt nam được không?
- Mà đem quân đi xa, ra biển oánh nhau, việt nam phòng thủ, đường bờ biển dài. Không sợ việt nam đặt các trạm tên lửa rải rác dọc bờ biển. Cứ trong cẩu ra cũng đủ cho Trung Quốc điêu đứng.
Nói chung là mắc kẹt rồi, không sớm thì muộn cũng lại rút giàn về thôi.
Việt nam có gì phải vội, cứ làm rùm beng lên, lực lượng dân sự ra làm nhiệm vụ. Còn ở đó thế giới còn ngóng vào... hình ảnh anh người lớn cứ cà khịa hết chỗ này chỗ kia, thì ai người ta còn muốn chơi.

Friday, April 11, 2014

Simple convert: from "position" to "angle" value for: KRS 2552 HV servo motor


KRS-2555RHV Servo Specs:

  • Maximum Operating Angle 270º
  • Maximum Holding Torque 14kgf.cm (11.1V)
  • Speed 0.14s/60º (11.1V, under no load)
  • ICS 3.5 protocol (Serial and PWM comunication)
  • Size 41x21x30.55 mm
  • Weight 41.5g
  • Operating Voltage 9V~12V

For a serial servo motor, a rotation range from 3500-11500 is possible. The middle value, 7500, is referred to as a neutral position. And the angle range from 0 to 270 degrees. 
Therefore to convert: 
1 degree = (11500-3500)/270 = 800/27 
with rc4.dll. use positions to generate a command. 
to convert: 90d ->( 3500+90*800/27 )

Using rcv tools box to calculate a kinematic for robot arm.

1. RCV tool (Peter corke: Robotics, vision and control) - fundamental algorithms in matlab
2. DH-parameters
Fig 1. Definition of standard Denavit and Hartenberg link parameters. The colors red and blue denote all things associated with links j−1 and j respectively. The numbers in circles represent the order in which the elementary transforms are applied.
A link can be specified by two parameters, its length aj and its twist αj . Joints are also described by two parameters. The link offset dj is the distance from one link coordinate frame to the next along the axis of the joint. The joint angle θj is the rotation of one link with respect to the next about the joint axis.
Following this convention the first joint, joint 1, connects link 0 to link 1. Link 0 is the base of the robot. Commonly for the first link d1=α1=0 but we could set d1>0 to represent the height of the shoulder joint above the base.
The final joint, joint Nconnects link N−1 to link N. Link Nis the tool of the robot and the parameters dN
and aN specify the length of the tool and its x-axis offset respectively.
Table 1. Denavit - Hartenberg parameters: their physical meaning, symbol and formal definition.
The transformation from link coordinate frame {j−1} to frame {j} is defined in terms of elementary rotations
and translations as. 
The parameters αj and aj are always constant. For a revolute joint θj is the joint variable and dj is constant, while for a prismatic joint dj is variable, θj is constant and αj=0. In many of the formulations that follow we use generalized joint coordinates. 
Within the Toolbox, it represents a robot link with a Link object which is created by: 
 >> L = Link([0, 0.1, 0.2, pi/2, 0])
where the elements of the input vector are given in the order θk , dj , aj , αj.  The optional fifth element σj
indicates whether the joint is revolute (σi=0) or prismatic (σi=0). If not specified a revolute joint is assumed.
one of the most common parameters and methods is the link transform (Eq. 1). 
ex. L.A(θ)
3. Forward kinematics 
with the end-effector pose as a function of joint coordinates. Using homogeneous transformations this is simply the product of the individual link transformation matrices given by Eq. 2 which for an N-axis manipulator is
 3. A 2-link robot
Fig. 2. Two-link robot. 
We have a DH parameters which we use to create a vector of Link object 
L(1) = Link([0 0 1 0]) (theta =q1, d=0, a =1, alpha =0)
L(2) = Link([0 0 1 0]) (theta =q2, d=0, a =1, alpha =0)
and therefore we construct  a SerialLink
two_link = SerialLink(L, 'name', 'two_link);
Common parameters and methods of SerialLink object are: 
two_link.n ( number of joints)
two_link.fkine([pi/2 pi/2]) (forward kinematic) 
ex. 
>> two_link.fkine([pi/4 pi/4])

ans =

    0.0000   -1.0000         0    0.7071
    1.0000    0.0000         0    1.7071
         0         0        1.0000            0
         0         0                 0    1.0000
and we plot it. 

>> two_link.plot([0 0])
>> two_link.plot([pi/4 -pi/4])
Fig. 3. The two-link robot in two different poses,a the pose (0, 0); b the pose (pi/4,pi/4)

Wednesday, April 09, 2014

Modeling humanoid robot


Draw in solid work -22 degree of freedoms

Using Simmechanics to modelling . 

Monday, April 07, 2014

Kondo humanoid robot

kondolineup.pngThe Khr 3HV Rev 2, improves on the sucessful KHR 3HV design with the improved 2552RHV servos and a new Dual USB Adapter HS.
The new servos feature ICS3.5 protocol making them compatible with Serial or PWM communication. In addition the new Dual USB Adapter HS lets communicate with the servos directly to configure and fine tune the servo behaviour (including the new features added in ICS 3.5).

kondolinedown.png

Control multiple servo motor with C# -rcb4.dll

Create the list view to selectect multiple servo to control.
in the list view, add two column (ics no and position)
Create the list servo in rcb4.dll by manual


//initial setting
       private void Form1_Shown(object sender, EventArgs e)
       {
           // make a list of servo in listView
           lisVICSmotor.Items.Clear();
           //search all secvor
           for (int i = 0; i < Rcb4.Rcb4.MaxDeviceNumner; i++)
           {
               ListViewItem item = new ListViewItem(new string[] {i.ToString ("00"),"7500" });
               lisVICSmotor.Items.Add(item);
           }
       }



for check list view ( when selected index changed and position value changed)
//when the servo motor selection column is clicked


       private void lisVICSmotor_SelectedIndexChanged(object sender, EventArgs e)
       {
           // when nothing is slelected


           if (lisVICSmotor.SelectedIndices.Count ==0)
           {
               return;
               
           }
           // get the number of the selected list
           int sindex = lisVICSmotor.SelectedIndices[0];
           //should chose 1 time, gets the curently position
           nmmsPosition.Value = Convert.ToInt32(lisVICSmotor.Items[sindex].SubItems[1].Text);
       }


       // when the value of nmmsPosition has changed, list data is updated
       private void nmmsPosition_ValueChanged(object sender, EventArgs e)
       {
           //exit when no coonection
           if (lisVICSmotor.SelectedIndices.Count ==0)
           {
               return;
           }


           //get the list number that is selected


           int sindex = lisVICSmotor.SelectedIndices[0]; // chose 1
           //set the position into listview[position]
           lisVICSmotor.Items[sindex].SubItems[1].Text = nmmsPosition.Value.ToString();
       }



for creating command to control multiple servo motor
//generated the command to control multiple servo motor
       // when click command button
       private void btnmsCommand_Click(object sender, EventArgs e)
       {
           //make the command
           System.Collections.Generic.Dictionary<int, int> icsList = new Dictionary<int, int>();


           //register the number of frame, here set -1 to frame value
           //note allways have
           icsList.Add(-1, (int)nmmsFrame.Value);


           //remove the data of id that is checked from the list view to the listing
           foreach (ListViewItem item in lisVICSmotor.Items)
           {
               if (item.Checked)
               {
                   try
               {
                       int icsNo = int.Parse(item.SubItems[0].Text);
                       int pos = int.Parse (item.SubItems[1].Text);


                       icsList.Add(icsNo,pos);
               }
               
                   catch
                   {
                       //do not anythinh
                       continue;
                   }


                }
           }


           //generate a command
           ByteList cmd = new ByteList();


           //System.Collections.Generic.Dictionary<int, int> icsList
           cmd.Bytes = Command.RunConstFrameServo(icsList);


           //show in the cmd textbox
           txtCmd.Text = cmd.CommaText;
           recv_count = 4;
          }



Send the generation command
//generated the command to control multiple servo motor
       // when click command button
       private void btnmsCommand_Click(object sender, EventArgs e)
       {
           //make the command
           System.Collections.Generic.Dictionary<int, int> icsList = new Dictionary<int, int>();


           //register the number of frame, here set -1 to frame value
           //note allways have
           icsList.Add(-1, (int)nmmsFrame.Value);


           //remove the data of id that is checked from the list view to the listing
           foreach (ListViewItem item in lisVICSmotor.Items)
           {
               if (item.Checked)
               {
                   try
               {
                       int icsNo = int.Parse(item.SubItems[0].Text);
                       int pos = int.Parse (item.SubItems[1].Text);


                       icsList.Add(icsNo,pos);
               }
               
                   catch
                   {
                       //do not anythinh
                       continue;
                   }


                }
           }


           //generate a command
           ByteList cmd = new ByteList();


           //System.Collections.Generic.Dictionary<int, int> icsList
           cmd.Bytes = Command.RunConstFrameServo(icsList);


           //show in the cmd textbox
           txtCmd.Text = cmd.CommaText;
           recv_count = 4;
          }