Robot.Links (dpp v0.1.1)

Provide functions that import robot links

Link to this section Summary

Functions

Add meshes and transform info to robot model by using the name of the link

Parameters

- robot_model: robot model used to store mesh and tranform information
- geometries: List of geometries to store geometry data
- names: names of the gerometries
- link: robto link
- name: name of the geometry
- joint_value: angle of the joint in rad

Examples

geometries = File.read!("geometries.txt") |> :erlang.binary_to_term
link_base = File.read!("link_base.txt") |> :erlang.binary_to_term
link_1 = File.read!("link_1.txt") |> :erlang.binary_to_term
link_2 = File.read!("link_2.txt") |> :erlang.binary_to_term
link_3 = File.read!("link_3.txt") |> :erlang.binary_to_term
link_4 = File.read!("link_4.txt") |> :erlang.binary_to_term
link_5 = File.read!("link_5.txt") |> :erlang.binary_to_term
link_6 = File.read!("link_6.txt") |> :erlang.binary_to_term
robot_model = %{points: [], indices: [], translates: [], rotates: []}
robot_model = add_link_to_robot_model_by_name(robot_model, geometries, names, link_base, 'gkmodel0_base_link_geom0', 0.0)
robot_model = add_link_to_robot_model_by_name(robot_model, geometries, names, link_1, 'gkmodel0_link_1_geom0', :math.pi/6)
robot_model = add_link_to_robot_model_by_name(robot_model, geometries, names, link_2, 'gkmodel0_link_2_geom0', :math.pi/6)
robot_model = add_link_to_robot_model_by_name(robot_model, geometries, names, link_3, 'gkmodel0_link_3_geom0', :math.pi/6)
robot_model = add_link_to_robot_model_by_name(robot_model, geometries, names, link_4, 'gkmodel0_link_4_geom0', :math.pi/6)
robot_model = add_link_to_robot_model_by_name(robot_model, geometries, names, link_5, 'gkmodel0_link_5_geom0', :math.pi/6)
robot_model = add_link_to_robot_model_by_name(robot_model, geometries, names, link_6, 'gkmodel0_link_6_geom0', :math.pi/6)
Perform frame transformation.

Parameters

- old_trans: the first translation vector
- old_rots:  the first rotation axis+angle 
- new_trans: the secord tranlation vector 
- new_rots:  the secord rotation axis+angle 
- joint_vector: the joint rotaion axis+angle
Convert List of Char to a List of FLoat.

Parameters

- charlist: Charlist Example: '1 2 3'

Examples

iex(6)> charlist_to_flist('1 2 3') 
[1.0, 2.0, 3.0]
Convert string list to float list in frame, and add name to frame

Parameters

- xmlresult: frame
- name: link node path in xml

Examples

translates_path = %SweetXpath{path: './node[@name="'++link_name++'"]/translate/text()', is_list: true}
rotate_axis_sid_path = %SweetXpath{path: './node[@name="'++link_name++'"]/rotate/@sid'}
rotates_path = %SweetXpath{path: './node[@name="'++link_name++'"]/rotate/text()', is_list: true}
result = xmldoc |> xpath(
    link_path,
    translates: instance_geometry_path = translates_path,
    rotate_axis_sid: rotate_axis_sid_path,
    rotates: rotates_path
)
frame = convert_to_frame(result, link_name)
Get base frame information in a Map
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed

Examples

result = get_base_frame(xmldoc)
Get base link information in a Map
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed

Examples

result = get_base_link(xmldoc)
Get link information and return a Map based on name input
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed
- link_path: link node path in xml
- link_name: link name 

Examples

link_name = 'link_6'
link_6_path = get_link_path(link_name)
result = get_link(xmldoc, link_6_path, link_name)
Get link_1 information and put it in a Map
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed

Examples

iex> get_link_1(xmldoc)
%{frame: 
    %{frames: 
        [%{rotate: [1.0, 0.0, 0.0, 0.0], translate: [0.0, 0.0, 0.0]}, 
         %{rotate: [1.0, 0.0, 0.0, 0.0], translate: [0.0, 0.0, 0.227]}, 
         %{rotate: [1.0, 0.0, 0.0, 0.0], translate: [0.0, 0.0, 0.0]}], 
      name: 'link_1', 
      rotate_axis: [0.0, 0.0, 1.0, 0.0], 
      rotate_axis_sid: 'node_joint_1_axis0'}, 
  instance_geometry: ['#gkmodel0_link_1_geom0'], 
  link_name: 'link_1', 
  linked_links: ['link_2', 'link_cylinder']}

TODO: merge to get_link_n, after development of information model

TODO: merge to get_link_n, after development of information model

TODO: merge to get_link_n, after development of information model

TODO: merge to get_link_n, after development of information model

TODO: merge to get_link_n, after development of information model

Get link frames information and return a Map based on name input
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed
- link_path: link node path in xml
- link_name: link name 

Examples

link_name = 'link_6'
link_6_path = get_link_path(link_name)
result = get_link(xmldoc, link_6_path, link_name)
Get link path based on link name
TODO: develop information model for robot.

Parameters

- link: name of link

Examples

link_name = 'link_6'
link_6_path = get_link_path(link_name)
Generate Robot mesh based on joints

Parameters

- joints: Joints input

Examples

joints = %Robot.Joints{joint1: :math.pi/6, joint2: :math.pi/6, joint3: :math.pi/6, joint4: :math.pi/6, joint5: :math.pi/6, joint6: :math.pi/6}
robot_model = get_robot_model_based_on_joint_value(joints)
points = robot_model.points
indices = robot_model.indices
translates = robot_model.translates
rotates = robot_model.rotates
draw(points,indices,translates,rotates)

Link to this section Functions

Link to this function

apply_joint(old_trans, old_rots, new_trans, new_rots, joint_vector)

Specs

apply_joint(List, List, List, List, List) :: List
Perform frame transformation.

Parameters

- old_trans: the first translation vector
- old_rots:  the first rotation axis+angle 
- new_trans: the secord tranlation vector 
- new_rots:  the secord rotation axis+angle 
- joint_vector: the joint rotaion axis+angle
Link to this function

charlist_to_flist(charlist)

Specs

charlist_to_flist(Charlist) :: List
Convert List of Char to a List of FLoat.

Parameters

- charlist: Charlist Example: '1 2 3'

Examples

iex(6)> charlist_to_flist('1 2 3') 
[1.0, 2.0, 3.0]
Link to this function

convert_to_frame(xmlresult, name)

Specs

convert_to_frame(binary(), Charlist) :: Robot.Frame
Convert string list to float list in frame, and add name to frame

Parameters

- xmlresult: frame
- name: link node path in xml

Examples

translates_path = %SweetXpath{path: './node[@name="'++link_name++'"]/translate/text()', is_list: true}
rotate_axis_sid_path = %SweetXpath{path: './node[@name="'++link_name++'"]/rotate/@sid'}
rotates_path = %SweetXpath{path: './node[@name="'++link_name++'"]/rotate/text()', is_list: true}
result = xmldoc |> xpath(
    link_path,
    translates: instance_geometry_path = translates_path,
    rotate_axis_sid: rotate_axis_sid_path,
    rotates: rotates_path
)
frame = convert_to_frame(result, link_name)
Link to this function

get_base_frame(xmldoc)

Specs

get_base_frame(binary()) :: Robot.Frame
Get base frame information in a Map
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed

Examples

result = get_base_frame(xmldoc)
Link to this function

get_base_link(xmldoc)

Specs

get_base_link(binary()) :: Robot.Link
Get base link information in a Map
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed

Examples

result = get_base_link(xmldoc)
Link to this function

get_link(xmldoc, link_path, link_name)

Specs

get_link(
  binary(),
  %SweetXpath{
    cast_to: term(),
    is_keyword: term(),
    is_list: term(),
    is_optional: term(),
    is_value: term(),
    namespaces: term(),
    path: term(),
    transform_fun: term()
  },
  Charlist
) :: %{link_name: Charlist, instance_geometry: List, linked_links: List}
Get link information and return a Map based on name input
TODO: develop information model for robot.

Parameters

- xmldoc: xml file readed
- link_path: link node path in xml
- link_name: link name 

Examples

link_name = 'link_6'
link_6_path = get_link_path(link_name)
result = get_link(xmldoc, link_6_path, link_name)
Link to this function

get_robot_model_based_on_joint_value(joints)

Specs

get_robot_model_based_on_joint_value(Robot.Joints) :: Robot.Mesh
Generate Robot mesh based on joints

Parameters

- joints: Joints input

Examples

joints = %Robot.Joints{joint1: :math.pi/6, joint2: :math.pi/6, joint3: :math.pi/6, joint4: :math.pi/6, joint5: :math.pi/6, joint6: :math.pi/6}
robot_model = get_robot_model_based_on_joint_value(joints)
points = robot_model.points
indices = robot_model.indices
translates = robot_model.translates
rotates = robot_model.rotates
draw(points,indices,translates,rotates)
Link to this function

get_tool_frame()

TODO