<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Baris</id>
	<title>Mech - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Baris"/>
	<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php/Special:Contributions/Baris"/>
	<updated>2026-05-15T22:01:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=26162</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=26162"/>
		<updated>2021-10-05T18:44:16Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Due on Canvas 1:30 PM CT Monday Oct 11&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Chapter 4, we will study the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector &amp;lt;math&amp;gt;T_{sb}(\theta) \in SE(3)&amp;lt;/math&amp;gt; given the vector of joint positions &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.  The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.  In this project, CoppeliaSim will solve the forward kinematics for you.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.&lt;br /&gt;
&lt;br /&gt;
You will submit &#039;&#039;&#039;a single zip file&#039;&#039;&#039; that includes &#039;&#039;&#039;a single pdf file and one video (make sure we can play it)&#039;&#039;&#039; to Canvas.  The file name should be FamilyName_GivenName_asst1.zip (for me, it would be Lynch_Kevin_asst1.zip).  You will have to concatenate all your responses and screenshots into a single pdf file. &lt;br /&gt;
&lt;br /&gt;
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions.  You will lose points if you don&#039;t follow the instructions or if the assignment is difficult for the grader to grade.&lt;br /&gt;
&lt;br /&gt;
==Part 1: CoppeliaSim Simulation and Exploration==&lt;br /&gt;
In part 1, you will explore some of the functionality and built-in models for CoppeliaSim. Go to [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.&lt;br /&gt;
&lt;br /&gt;
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models].  A model consists of a number of objects connected to each other.  &lt;br /&gt;
&lt;br /&gt;
Models can have sensing and motion capabilities as defined by their attached [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts]. A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded.  A non-threaded script defines the &amp;quot;actuation&amp;quot; and &amp;quot;sensing&amp;quot; functions for an object or model, and these functions are invoked by the main script at each simulation step.  More information can be found at Coppelia&#039;s webpage on  [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. &lt;br /&gt;
&lt;br /&gt;
Default models can be found in the model browser (left pane, or open the pane by clicking the robot icon in the left toolbar). &lt;br /&gt;
&lt;br /&gt;
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop.  At each simulation step, the main script calls (a) &amp;quot;actuation&amp;quot; functions that simulate the motion of the system and (b) &amp;quot;sensing&amp;quot; functions that simulate the sensors.  Generally this main script should not be edited. &lt;br /&gt;
&lt;br /&gt;
===Part 1A: Building a world for a mobile robot===&lt;br /&gt;
&lt;br /&gt;
In this part, you will explore the CoppeliaSim model browser and learn how to create your own scene using the default models. Anything in the model browser can be dragged and dropped onto the checkerboard floor of the scene. It can then be moved or reoriented using the &#039;&#039;&#039;Object/item shift&#039;&#039;&#039; and the &#039;&#039;&#039;Object/item rotate&#039;&#039;&#039; buttons in the top toolbar (the cubes with the arrows around them). Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc. &lt;br /&gt;
&lt;br /&gt;
Use File&amp;gt;New scene to create a new blank scene. Add to the scene the [https://www.generationrobots.com/media/Pioneer3DX-P3DX-RevA.pdf Pioneer_p3dx], a mobile 2-wheeled differential drive robot with 16 sonar sensors, to the scene. (Find it under &amp;quot;robots/mobile&amp;quot; in the model browser). Clicking the &#039;&#039;&#039;Start/resume simulation&#039;&#039;&#039; button (the &amp;quot;play&amp;quot; button) will cause the robot to move forward at a set velocity. To see where this behavior is defined, stop the simulation and open the child script associated with the Pioneer robot. (Make sure the simulation is stopped, not just paused.) You can open the child script by clicking on the folded paper icon in the left toolbar and double-clicking &amp;quot;Child script (Pioneer _p3dx)&amp;quot; or by double-clicking the folded paper icon next to &amp;quot;Pioneer_p3dx&amp;quot; in the Scene hierarchy pane. You can see the variable v0 that defines the forward speed, modify it, and play the simulation again to see the robot move at a different speed.&lt;br /&gt;
&lt;br /&gt;
The robot moves forward until the sonar sensors detect an obstacle, which causes it to turn as described in this article about [http://www.robolabo.etsit.upm.es/asignaturas/pp/apuntes/Pfeifer1996.pdf Braitenberg vehicles]. (See if you can make sense of the algorithm by looking at the code.)&lt;br /&gt;
&lt;br /&gt;
Next, add a terrain bump (find terrain_bump.ttm  under &amp;quot;nature&amp;quot; in the model browser). Single click &#039;&#039;&#039;Bump&#039;&#039;&#039; in the scene hierarchy to bring up the customization UI. Use the sliders to modify the geometry of the bump so that the Pioneer_p3dx can drive over it. NOTE: None of the sliders should be at the minimum settings. If you need to edit the bump later, make sure the simulation is stopped (not just paused). &lt;br /&gt;
&lt;br /&gt;
Add at least five 80cm high walls to the scene (find them in infrastructure/walls/80cm high walls&amp;quot; in the model browser). Arrange and orient the walls such that when the simulation is started, the Pioneer_p3dx interacts with at least three of the walls and drives over the bump at least once. To interact with a wall means to drive towards it and avoid bumping into it. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your task:&#039;&#039;&#039;&lt;br /&gt;
* Take a screen recording video of the robot moving through your world and interacting with at least three walls and driving over the bump at least once. In the video, use the zoom, pan, and other buttons to move the camera view while the robot is moving. You can change the robot&#039;s default speed in its child script to make it easier to capture your video with the moving camera. (If you don&#039;t know how to take a screen recording, you can check out [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction].)&lt;br /&gt;
&lt;br /&gt;
===Part 1B: Exploring the UR5 Scene 1===&lt;br /&gt;
&lt;br /&gt;
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1 and the other scenes used in this course). In this scene, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.&lt;br /&gt;
&lt;br /&gt;
When you run this scene you will see a window with two tabs:  &amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the six joints, and watch how the robot moves.  &lt;br /&gt;
&lt;br /&gt;
Make sure your scene 1 simulation is stopped so you can open up a script.  Click the &amp;quot;Scripts&amp;quot; button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
Double-click the &amp;quot;Child script (UI_Script)&amp;quot; to open it.  You will see a script written in the Lua programming language.  Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library.&lt;br /&gt;
&lt;br /&gt;
Scroll down to line 242.  From here to the end of the file, this code examines the type of &amp;quot;call&amp;quot; to the child script by the main script and performs the appropriate functions.  For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated.  (There is a lot of XML code here defining the user interface.)  If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated.  If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.&lt;br /&gt;
&lt;br /&gt;
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed.  If you&#039;d like, you can consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your task:&#039;&#039;&#039;&lt;br /&gt;
Modify the UI_Script to change an aspect of the scene, and you will use this modified scene for Part 2, below. For example, you can choose to change the Custom UI layout, change the titles and words of the Custom UI, or change font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;nowiki&amp;gt;&amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt;&amp;lt;/nowiki&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Part 2: Joint Angle Calculations==&lt;br /&gt;
&lt;br /&gt;
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined:  the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6.  (The frame {b} is not shown in the image.)  The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis.  Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix &amp;lt;math&amp;gt;R_{ij}&amp;lt;/math&amp;gt; (where &amp;lt;math&amp;gt;i, j&amp;lt;/math&amp;gt; could be &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; or any number 1 through 6) is the identity matrix.  &lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes for joint &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, defined in frame {&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;}, are &amp;lt;math&amp;gt;\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For some set of joint angles &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, we have the following relations between the orientations of the joint frames:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.5, 0, 0.866]; [0, 1, 0]; [-0.866, 0, -0.5]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.6124, -0.7071, -0.3536]; [-0.6124, 0.7071, -0.3536]; [0.5, 0, -0.866]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.866, -0.5, 0]; [-0.5, 0.866, 0]; [0, 0, -1]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = [[0.5, 0, 0.866]; [0, 1, 0]; [-0.866, 0, 0.5]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.183, -0.9659, 0.183]; [-0.683, 0.2588, 0.683]; [-0.7071, 0, -0.7071]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6b&amp;lt;/sub&amp;gt;&#039;&#039; = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]&lt;br /&gt;
&lt;br /&gt;
where {b} is the end-effector frame not shown in the figure. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your task:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Find the six-vector of joint angles &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; given the &amp;lt;math&amp;gt;R_{ij}&amp;lt;/math&amp;gt; above.  (You will likely want to calculate the rotation matrices &amp;lt;math&amp;gt;R_{i,i+1}&amp;lt;/math&amp;gt; and use the MR code library, e.g., MatrixLog3.)&lt;br /&gt;
* Enter the joint angles you found into your modified Scene1_UR5 in CoppeliaSim to see the configuration of the robot.  &lt;br /&gt;
* Calculate &#039;&#039;R&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; using the information given, and verify that your joint angle vector &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; is correct by entering the joint angles into the scene and comparing your &#039;&#039;R&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; to the rotation matrix portion of the &#039;&#039;T&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; calculated by the scene under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
==What to Submit via Canvas==&lt;br /&gt;
Turn in a single zip file.  The file name should be FamilyName_GivenName_asst1.zip (for me, it would be Lynch_Kevin_asst1.zip).  This file should have:&lt;br /&gt;
* Part 1A: A single video file showing a screen recording of your Pioneer_p3dx robot moving through your custom scene. NOTE: make sure your video is in a common format and reasonably sized (e.g., less than 20 MB).&lt;br /&gt;
* A single pdf file including: &lt;br /&gt;
** Part 1B: A screenshot of your changed code in the child script.  Explain what you changed about the scene/UI.  (A small change suffices.)&lt;br /&gt;
** Part 1B &amp;amp; 2: A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration.  &lt;br /&gt;
** Part 2: The list of the six joint angles and &#039;&#039;R&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; you calculated and a brief explanation of the method (including your code, which likely calls the MR code) you used to calculate them. &lt;br /&gt;
&lt;br /&gt;
The contents of your zip file should look like the below (with your name):&lt;br /&gt;
&lt;br /&gt;
[[File:Submission folder format.png]]&lt;br /&gt;
&lt;br /&gt;
If you do not know how to take a screenshot, you can use one of the following:  &lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: use Preview&amp;gt;File&amp;gt;Take Screenshot, or Cmd-Shift-3 and look for the screenshot on your desktop.  &lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. &lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_Draft_2021&amp;diff=26130</id>
		<title>ME 449 Assignment Draft 2021</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_Draft_2021&amp;diff=26130"/>
		<updated>2021-10-04T20:09:53Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Chapter 4, we will study the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector &amp;lt;math&amp;gt;T_{sb}(\theta) \in SE(3)&amp;lt;/math&amp;gt; given the vector of joint positions &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.  The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.  In this project, CoppeliaSim will solve the forward kinematics for you.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.&lt;br /&gt;
&lt;br /&gt;
You will submit &#039;&#039;&#039;a single pdf file&#039;&#039;&#039; to Canvas.  The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf).  You will have to concatenate all your responses into a single pdf file. &lt;br /&gt;
&lt;br /&gt;
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions.  You will lose points if you don&#039;t follow the instructions or if the assignment is difficult for the grader to grade.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with two tabs:  &amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the six joints, and watch how the robot moves.  Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.&lt;br /&gt;
&lt;br /&gt;
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models].  A model consists of a number of objects connected to each other.  In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.&lt;br /&gt;
&lt;br /&gt;
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop.  At each simulation step, the main script calls (a) &amp;quot;actuation&amp;quot; functions that simulate the motion of the system and (b) &amp;quot;sensing&amp;quot; functions that simulate the sensors.  Generally this main script should not be edited. &lt;br /&gt;
&lt;br /&gt;
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts].  A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded.  A non-threaded script defines the &amp;quot;actuation&amp;quot; and &amp;quot;sensing&amp;quot; functions for an object or model, and these functions are invoked by the main script at each simulation step.  More information can be found at Coppelia&#039;s webpage on  [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].&lt;br /&gt;
&lt;br /&gt;
Make sure your scene 1 simulation is stopped so you can open up a script.  Click the &amp;quot;Scripts&amp;quot; button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
Double-click the &amp;quot;Non-threaded child script (UI_Script)&amp;quot; to open it.  You will see a script written in the Lua programming language.  Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library.&lt;br /&gt;
&lt;br /&gt;
Scroll down to line 242.  From here to the end of the file, this code examines the type of &amp;quot;call&amp;quot; to the child script by the main script and performs the appropriate functions.  For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated.  (There is a lot of XML code here defining the user interface.)  If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated.  If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.&lt;br /&gt;
&lt;br /&gt;
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed.  If you&#039;d like, you can consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;nowiki&amp;gt;&amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt;&amp;lt;/nowiki&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined:  the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6.  (The frame {b} is not shown in the image.)  The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis.  Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix &amp;lt;math&amp;gt;R_{ij}&amp;lt;/math&amp;gt; (where &amp;lt;math&amp;gt;i, j&amp;lt;/math&amp;gt; could be &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; or any number 1 through 6) is the identity matrix.  &lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes for joint &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, defined in frame {&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;}, are &amp;lt;math&amp;gt;\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For some set of joint angles &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, we have the following relations between the orientations of the joint frames:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.5, 0, 0.866]; [0, 1, 0]; [-0.866, 0, -0.5]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.6124, -0.7071, -0.3536]; [-0.6124, 0.7071, -0.3536]; [0.5, 0, -0.866]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.866, -0.5, 0]; [-0.5, 0.866, 0]; [0, 0, -1]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = [[0.5, 0, 0.866]; [0, 1, 0]; [-0.866, 0, 0.5]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.183, -0.9659, 0.183]; [-0.683, 0.2588, 0.683]; [-0.7071, 0, -0.7071]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6b&amp;lt;/sub&amp;gt;&#039;&#039; = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]&lt;br /&gt;
&lt;br /&gt;
where {b} is the end-effector frame not shown in the figure. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your task:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Find the six-vector of joint angles &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; given the &amp;lt;math&amp;gt;R_{ij}&amp;lt;/math&amp;gt; above.  (You will likely want to calculate the rotation matrices &amp;lt;math&amp;gt;R_{i,i+1}&amp;lt;/math&amp;gt; and use the MR code library, e.g., MatrixLog3.)&lt;br /&gt;
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot.  &lt;br /&gt;
* Calculate &#039;&#039;R&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; using the information given, and verify that your joint angle vector &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; is correct by entering the joint angles into the scene and comparing your &#039;&#039;R&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; to the rotation matrix portion of the &#039;&#039;T&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; calculated by the scene under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What to turn in to Canvas:&#039;&#039;&#039; A single pdf file.  The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf).  This file should have:&lt;br /&gt;
* The list of the six joint angles you calculated and a brief explanation of the method (including the MR code) you used to calculate them. &lt;br /&gt;
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration.  &lt;br /&gt;
* A screenshot of your changed code in the child script.  Explain what you changed about the scene/UI.  (A small change suffices.)&lt;br /&gt;
&lt;br /&gt;
If you do not know how to take a screenshot, you can use one of the following:  &lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.  &lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. &lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_Draft_2021&amp;diff=26129</id>
		<title>ME 449 Assignment Draft 2021</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_Draft_2021&amp;diff=26129"/>
		<updated>2021-10-04T20:07:17Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Chapter 4, we will study the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector &amp;lt;math&amp;gt;T_{sb}(\theta) \in SE(3)&amp;lt;/math&amp;gt; given the vector of joint positions &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;.  The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.  In this project, CoppeliaSim will solve the forward kinematics for you.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to test your understanding of the matrix log for rotations, to give you a little practice using the MR library of functions, and to familiarize you with CoppeliaSim.&lt;br /&gt;
&lt;br /&gt;
You will submit &#039;&#039;&#039;a single pdf file&#039;&#039;&#039; to Canvas.  The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf).  You will have to concatenate all your responses into a single pdf file. &lt;br /&gt;
&lt;br /&gt;
All assignments will be graded based on correctness, how clearly you organize your homework (the grader should easily find all of your solutions), and how well you follow the instructions.  You will lose points if you don&#039;t follow the instructions or if the assignment is difficult for the grader to grade.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open Scene 1 for interactive manipulation of the Universal Robots UR5 robot, a popular 6R robot. (You can go to the [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] to download Scene 1, or [http://hades.mech.northwestern.edu/index.php/Getting_Started_with_the_CoppeliaSim_Simulator this page] for a refresher on getting started with CoppeliaSim.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with two tabs:  &amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the six joints, and watch how the robot moves.  Also try using the controls at the top of the window to zoom the camera in and out, pan the camera, etc.&lt;br /&gt;
&lt;br /&gt;
A CoppeliaSim scene may include [https://www.coppeliarobotics.com/helpFiles/en/objects.htm objects] (like [https://www.coppeliarobotics.com/helpFiles/en/shapes.htm shapes], [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints], or sensors) and one or more [https://www.coppeliarobotics.com/helpFiles/en/models.htm models].  A model consists of a number of objects connected to each other.  In this scene, for example, there is a model of a UR5 robot, which consists of a collection of [https://www.coppeliarobotics.com/helpFiles/en/joints.htm joints] connecting shapes (links), from the base out to the end-effector.&lt;br /&gt;
&lt;br /&gt;
A scene also includes a [https://www.coppeliarobotics.com/helpFiles/en/mainScript.htm main script], which handles the simulation loop.  At each simulation step, the main script calls (a) &amp;quot;actuation&amp;quot; functions that simulate the motion of the system and (b) &amp;quot;sensing&amp;quot; functions that simulate the sensors.  Generally this main script should not be edited. &lt;br /&gt;
&lt;br /&gt;
A scene also may include one or more [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm child scripts].  A child script can be threaded (which creates a new computation thread; this is generally discouraged) or non-threaded.  A non-threaded script defines the &amp;quot;actuation&amp;quot; and &amp;quot;sensing&amp;quot; functions for an object or model, and these functions are invoked by the main script at each simulation step.  More information can be found at Coppelia&#039;s webpage on  [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm main and child scripts], the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual], and the [https://forum.coppeliarobotics.com/ CoppeliaSim forum].&lt;br /&gt;
&lt;br /&gt;
Make sure your scene 1 simulation is stopped so you can open up a script.  Click the &amp;quot;Scripts&amp;quot; button on the toolbar on the left side of the screen (shown below) to see the scripts being run by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
Double-click the &amp;quot;Non-threaded child script (UI_Script)&amp;quot; to open it.  You will see a script written in the Lua programming language.  Early in the file, you might notice that some functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library.&lt;br /&gt;
&lt;br /&gt;
Scroll down to line 242.  From here to the end of the file, this code examines the type of &amp;quot;call&amp;quot; to the child script by the main script and performs the appropriate functions.  For example, if the sim_call_type is sim.syscb_init, the simulation has started and the user interface should be generated.  (There is a lot of XML code here defining the user interface.)  If the sim_call_type is sim.syscb_actuation, then the joint angles entered by the user in the UI are applied to the UR5 model, the UI is updated, and the transformation matrix for the end-effector is calculated.  If the sim_call_type is sim.syscb_sensing, nothing happens, and if it is sim.syscb_cleanup, the UI is destroyed as the simulation ends.&lt;br /&gt;
&lt;br /&gt;
The XML code for the UI starts on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed.  If you&#039;d like, you can consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;nowiki&amp;gt;&amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt;&amp;lt;/nowiki&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The 6R UR5 robot is shown below at its home configuration. Eight frames are defined:  the fixed frame {s} at the base, frames {1} through {6} attached to links 1 through 6, and the end-effector frame {b} which is fixed relative to link 6.  (The frame {b} is not shown in the image.)  The red arrow is the x-axis, the green arrow is the y-axis, and the blue arrow is the z-axis.  Frames {s} and {1}-{6} are aligned when the robot is at its home configuration, i.e., each rotation matrix &amp;lt;math&amp;gt;R_{ij}&amp;lt;/math&amp;gt; (where &amp;lt;math&amp;gt;i, j&amp;lt;/math&amp;gt; could be &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; or any number 1 through 6) is the identity matrix.  &lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes for joint &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, defined in frame {&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;}, are &amp;lt;math&amp;gt;\hat{\omega}_1 =(0,0,1), \hat{\omega}_2 = \hat{\omega}_3 = \hat{\omega}_4 = \hat{\omega}_6 = (0,1,0), \hat{\omega}_5 = (0,0,-1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For some set of joint angles &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, we have the following relations between the orientations of the joint frames:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.5, 0, 0.866]; [0, 1, 0]; [-0.866, 0, -0.5]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.6124, -0.7071, -0.3536]; [-0.6124, 0.7071, -0.3536]; [0.5, 0, -0.866]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.866, -0.5, 0]; [-0.5, 0.866, 0]; [0, 0, -1]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.866, 0, -0.5]; [0, 1, 0]; [0.5, 0, -0.866]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = [[0.5, 0, 0.866]; [0, 1, 0]; [-0.866, 0, 0.5]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = [[-0.183, -0.9659, 0.1830]; [-0.6830, 0.2588, 0.6830]; [-0.7071, 0, -0.7071]]&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6b&amp;lt;/sub&amp;gt;&#039;&#039; = [[-1, 0, 0]; [0, 0, 1]; [0, 1, 0]]&lt;br /&gt;
&lt;br /&gt;
where {b} is the end-effector frame not shown in the figure. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your task:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Find the six-vector of joint angles &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; given the &amp;lt;math&amp;gt;R_{ij}&amp;lt;/math&amp;gt; above.  (You will likely want to calculate the rotation matrices &amp;lt;math&amp;gt;R_{i,i+1}&amp;lt;/math&amp;gt; and use the MR code library, e.g., MatrixLog3.)&lt;br /&gt;
* Enter the joint angles you found into Scene1_UR5 in CoppeliaSim to see the configuration of the robot.  &lt;br /&gt;
* Calculate &#039;&#039;R&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; using the information given, and verify that your joint angle vector &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt; is correct by entering the joint angles into the scene and comparing your &#039;&#039;R&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; to the rotation matrix portion of the &#039;&#039;T&amp;lt;sub&amp;gt;sb&amp;lt;/sub&amp;gt;&#039;&#039; calculated by the scene under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What to turn in to Canvas:&#039;&#039;&#039; A single pdf file.  The file name should be FamilyName_GivenName_asst1.pdf (for me, it would be Lynch_Kevin_asst1.pdf).  This file should have:&lt;br /&gt;
* The list of the six joint angles you calculated and a brief explanation of the method (including the MR code) you used to calculate them. &lt;br /&gt;
* A screenshot of the scene, clearly showing the modified UI, the SE(3) calculation, and the robot at the correct configuration.  &lt;br /&gt;
* A screenshot of your changed code in the child script.  Explain what you changed about the scene/UI.  (A small change suffices.)&lt;br /&gt;
&lt;br /&gt;
If you do not know how to take a screenshot, you can use one of the following:  &lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.  &lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool. &lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25910</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25910"/>
		<updated>2020-09-30T19:52:11Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}).&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, -1, 0}, {-0.5, 0, -0.866}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.3536, 0.866}, {-0.7071, 0.7071, 0}, {-0.6124, -0.6124, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.5, 0, -0.866}, {0, 1, 0}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.866, 0, -0.5}, {0, 1, 0}, {0.5, 0, -0.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.7071, 0.6124}, {-0.5732, -0.3536, -0.7392}, {0.7392, -0.6124, -0.2803}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1, 0, 0}, {0, 0, 1}, {0, 1, 0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds to the end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint frame with respect to the orientation of the previous joint frame.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25909</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25909"/>
		<updated>2020-09-30T17:04:49Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}.&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, -1, 0}, {-0.5, 0, -0.866}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.3536, 0.866}, {-0.7071, 0.7071, 0}, {-0.6124, -0.6124, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.5, 0, -0.866}, {0, 1, 0}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.866, 0, -0.5}, {0, 1, 0}, {0.5, 0, -0.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.7071, 0.6124}, {-0.5732, -0.3536, -0.7392}, {0.7392, -0.6124, -0.2803}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1, 0, 0}, {0, 0, 1}, {0, 1, 0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds to the end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint frame with respect to the orientation of the previous joint frame.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:UR5_Home.PNG&amp;diff=25908</id>
		<title>File:UR5 Home.PNG</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:UR5_Home.PNG&amp;diff=25908"/>
		<updated>2020-09-30T15:50:01Z</updated>

		<summary type="html">&lt;p&gt;Baris: uploaded a new version of &amp;amp;quot;File:UR5 Home.PNG&amp;amp;quot;: World and joint frame names are added.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25907</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25907"/>
		<updated>2020-09-30T15:46:22Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}.&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, -1, 0}, {-0.5, 0, -0.866}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.3536, 0.866}, {-0.7071, 0.7071, 0}, {-0.6124, -0.6124, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.5, 0, -0.866}, {0, 1, 0}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.866, 0, -0.5}, {0, 1, 0}, {0.5, 0, -0.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.7071, 0.6124}, {-0.5732, -0.3536, -0.7392}, {0.7392, -0.6124, -0.2803}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1, 0, 0}, {0, 0, 1}, {0, 1, 0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds tothe end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint frame with respect to the orientation of the previous joint frame.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25906</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25906"/>
		<updated>2020-09-30T15:43:56Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}.&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, 0, -1}, {0, 1, 0}, {1, 0, 0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, -1, 0}, {-0.5, 0, -0.866}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.3536, 0.866}, {-0.7071, 0.7071, 0}, {-0.6124, -0.6124, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.5, 0, -0.866}, {0, 1, 0}, {0.866, 0, -0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.866, 0, -0.5}, {0, 1, 0}, {0.5, 0, -0.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536, -0.7071, 0.6124}, {-0.5732, -0.3536, -0.7392}, {0.7392, -0.6124, -0.2803}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1, 0, 0}, {0, 0, 1}, {0, 1, 0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds tothe end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint with respect to the orientation of the previous joint.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25905</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25905"/>
		<updated>2020-09-30T15:42:01Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}.&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0, 0, -1},{0, 1, 0},{1, 0, 0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0,-1,0},{-0.5,0,-0.866},{0.866,0,-0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536,-0.3536,0.866},{-0.7071,0.7071,0},{-0.6124,-0.6124,-0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.5,0,-0.866},{0,1,0},{0.866,0,-0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.866,0,-0.5},{0,1,0},{0.5,0,-0.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536,-0.7071,0.6124},{-0.5732, -0.3536,-0.7392},{0.7392,-0.6124,-0.2803}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1,0,0},{0,0,1},{0,1,0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds tothe end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint with respect to the orientation of the previous joint.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25904</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25904"/>
		<updated>2020-09-30T15:41:10Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}.&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0,0,-1},{0,1,0},{1,0,0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0,-1,0},{-0.5,0,-0.866},{0.866,0,-0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536,-0.3536,0.866},{-0.7071,0.7071,0},{-0.6124,-0.6124,-0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.5,0,-0.866},{0,1,0},{0.866,0,-0.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.866,0,-0.5},{0,1,0},{0.5,0,-0.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-0.3536,-0.7071,0.6124},{-0.5732, -0.3536,-0.7392},{0.7392,-0.6124,-0.2803}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1,0,0},{0,0,1},{0,1,0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds tothe end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint with respect to the orientation of the previous joint.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25903</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25903"/>
		<updated>2020-09-30T15:37:51Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}.&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0,0,-1},{0,1,0},{1,0,0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0,-1,0&amp;gt;,{-.5,0,-.866},{.866,0,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.3536,-.3536,.866},{-.7071,.7071,0},{-.6124,-.6124,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.5,0,-.866},{0,1,0},{.866,0,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.866,0,-.5},{0,1,0},{.5,0,-.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.3536,-.7071,.6124},{-.5732, -.3536,-.7392},{.866,0,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1,0,0},{0,0,1},{0,1,0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds tothe end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint with respect to the orientation of the previous joint.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25902</id>
		<title>ME 449 Assignment 1</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=ME_449_Assignment_1&amp;diff=25902"/>
		<updated>2020-09-30T15:35:18Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Introduction&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In the next chapter, we will address the forward kinematics  problem for open-chain robots: finding the configuration of the robot&#039;s end-effector in &#039;&#039;T(0) ∈ SE(3)&#039;&#039; given the vector of joint positions.&lt;br /&gt;
&lt;br /&gt;
The forward kinematics problem is easy to solve using a formula called the &amp;quot;product of exponentials,&amp;quot; which uses the matrix exponential of this chapter.&lt;br /&gt;
&lt;br /&gt;
In this rather simple project, you will let the robot simulation software CoppeliaSim solve the forward kinematics for you. The goal of this project is to gain familiarity with CoppeliaSim and to confirm its calculation of the forward kinematics by visual inspection. You will submit a screenshot of the UR5 robot at a specific configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Review Criteria&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The assignment consists  of the following:&lt;br /&gt;
* A screenshot of the robot at its  final configuration.&lt;br /&gt;
* A list of reported joint angles.&lt;br /&gt;
* A list of rotation matrices giving the orientation of each joint relative to the previous joint (&#039;&#039;R&amp;lt;sub&amp;gt;s1&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039;, &#039;&#039;R&amp;lt;sub&amp;gt;23&amp;lt;/sub&amp;gt;&#039;&#039;, etc.)&lt;br /&gt;
* Reported value of &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; (Rotation matrix giving the orientation of end-effector frame {&#039;&#039;e&#039;&#039;} relative to the world frame {&#039;&#039;s&#039;&#039;}.&lt;br /&gt;
* Screenshots of the CoppeliaSim UI modifications you performed.&lt;br /&gt;
&lt;br /&gt;
All reported values should be in a single pdf. This pdf  and all screenshots should be submitted in a &#039;&#039;&#039;SINGLE&#039;&#039;&#039; .zip file labeled &amp;quot;lastname_firstname_assignment1.zip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 1: Joint Angle Calculations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The UR5 robot in its home configuration is shown. {&#039;&#039;s&#039;&#039;} and numbers represent the world frame and the corresponding joint frames, respectively. When all of its joints are at 0°, the frames located at the joints and the world frame are parallel (i.e., &#039;&#039;R&amp;lt;sub&amp;gt;ij&amp;lt;/sub&amp;gt; = I; ∀ i, j ∈ {s,1,2,3,4,5,6}&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[[File:UR5 Home.PNG]]&lt;br /&gt;
&lt;br /&gt;
The rotation axes of each joint in their own coordinate frames are as follows:&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;1&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;2&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;3&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;4&#039;&#039;&amp;lt;/sub&amp;gt; = (0,1,0)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;5&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,-1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\hat{w}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;&#039;6&#039;&#039;&amp;lt;/sub&amp;gt; = (0,0,1)&amp;lt;sup&amp;gt;&#039;&#039;T&#039;&#039;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At an unkown configuration, the following relations between the joint frames are given:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;13&amp;lt;/sub&amp;gt;&#039;&#039; = {{0,0,-1},{0,1,0},{1,0,0}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s2&amp;lt;/sub&amp;gt;&#039;&#039; = {{0,-1,0&amp;gt;,{-.5,0,-.866},{.866,0,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;15&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.3536,-.3536,.866},{-.7071,.7071,0},{-.6124,-.6124,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;12&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.5,0,-.866},{0,1,0},{.866,0,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;34&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.866,0,-.5},{0,1,0},{.5,0,-.866}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;s6&amp;lt;/sub&amp;gt;&#039;&#039; = {{-.3536,-.7071,.6124},{-.5732, -.3536,-.7392},{.866,0,-.5}}&lt;br /&gt;
*&#039;&#039;R&amp;lt;sub&amp;gt;6e&amp;lt;/sub&amp;gt;&#039;&#039; = {{-1,0,0},{0,0,1},{0,1,0}}&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;e&#039;&#039; corresponds tothe end-effector frame and is not shown in the figure.&lt;br /&gt;
&lt;br /&gt;
* Find the joint angles in this  configuration.&lt;br /&gt;
** Hint: A joint angle corresponds to the orientation of one joint with respect to the orientation of the previous joint.&lt;br /&gt;
* Input the joint angles you found into Scene1_UR5 in CoppeliaSim and take a screenshot of the robot at that configuration.&lt;br /&gt;
* Find &#039;&#039;R&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; and verify  your result by  comparing it with the  given  &#039;&#039;T&amp;lt;sub&amp;gt;se&amp;lt;/sub&amp;gt;&#039;&#039; under the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Part 2: CoppeliaSim Simulation and Exploration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Open the CoppeliaSim scene for interactive manipulation of the Universal Robots UR5 robot, a popular 6-joint robot. (See the instructions about CoppeliaSim in the first module of week 1, or go directly to [http://hades.mech.northwestern.edu/index.php/CoppeliaSim_Introduction CoppeliaSim Introduction] and download Scene 1.)&lt;br /&gt;
&lt;br /&gt;
When  you run this scene you will see a window with 2 tabs:&amp;quot;Enter Config and SE(3) Value&amp;quot; and &amp;quot;Joint Angle Sliders&amp;quot;. Go to the &amp;quot;Joint Angle Sliders&amp;quot; tab, move the sliders corresponding to the 6 joints and watch how the robot moves.&lt;br /&gt;
&lt;br /&gt;
Click the  &amp;quot;Scripts&amp;quot; button  on  the  toolbar  on the  left side of the  screen (shown below) to see the scripts being run  by the scene.&lt;br /&gt;
&lt;br /&gt;
[[File:CoppeliaSim_scripts.PNG]]&lt;br /&gt;
&lt;br /&gt;
The Main script and  any child scripts will be displayed. There is a default main script that contains  the basic code the simulation needs to run and usually doesn&#039;t need to be edited. The main script contains the  simulation&#039;s loop code. Each object in the scene has an  associated child script. The child script is typically used to control the model and contains functions written in the Lua programming language. Child scripts can be non-threaded or threaded. Non-threaded child scripts contain system callback functions that happen every step in the simulation. Threaded child scripts  contain system callback functions that are called once at the beginning of the  simulation. Non-threaded child scripts are preferred over threaded since threaded child scripts are more resource-intensive, can waste some processing time, and can be less responsive to the simulation stop command. For more details on non-threaded and threaded child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/childScripts.htm Child Scripts].&lt;br /&gt;
&lt;br /&gt;
For more information about the main script and child scripts, see [https://www.coppeliarobotics.com/helpFiles/en/mainAndChildScripts.htm Main  and Child Scripts]. The simulation must be stopped before you can make any edits to or open a script.&lt;br /&gt;
&lt;br /&gt;
For Scene 1, we will be looking at the &amp;quot;Non-threaded child  script (UI_Script).&amp;quot; Double-click this script and another window containing the code will pop up. You might notice some of the functions look similar to functions written in the Modern Robotics Library. For example, &#039;&#039;so3andp2se3(R,p)&#039;&#039; in this script resembles &#039;&#039;RpToTrans(R,p)&#039;&#039; in the Modern Robotics Library. The code for the Custom UI that appears when the simulation starts is written in XML and starts  on line 251. This XML code controls the appearance of the Custom UI, including the layout and content of text boxes, sliders, tab  titles, and font size. The XML syntax can be found at [https://www.coppeliarobotics.com/helpFiles/en/customUIPluginXMLSyntax.htm Custom UI Plugin XML Syntax]. For this specific scene, the different text boxes and sliders are arranged in different groups. Each group has a layout which determines how the objects inside the group will be displayed and label text which determines what text will be displayed and how it will be displayed. Consult the XML syntax for the attributes each element can have. &lt;br /&gt;
&lt;br /&gt;
More information on CoppeliaSim can  be found in the [https://www.coppeliarobotics.com/helpFiles/index.html CoppeliaSim User Manual]. There is also a [https://forum.coppeliarobotics.com/ CoppeliaSim forum]. You can take a look at the scripts of the included example scenes and  demos  to see how their functions and UIs were defined and to get a better idea of how the  scripts run the  simulation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your Task:&#039;&#039;&#039;&lt;br /&gt;
Modify the  Non-threaded child script (UI_Script) to change an aspect of the  scene. For example, you can choose  to change  the Custom UI layout, change the titles and words of the Custom UI, or change  font sizes in the Custom UI. Some example changes include:&lt;br /&gt;
&lt;br /&gt;
*Changing the  layout: consult the XML syntax and change &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to another type (hbox,form, grid,  none). Using line 257, changing &amp;lt;group layout=&amp;quot;vbox&amp;quot;&amp;gt; to &amp;lt;group layout=&amp;quot;hbox&amp;quot;&amp;gt; changes the  orientation of the items in the  group containing &amp;quot;Configuration Entry&amp;quot;, &amp;quot;Current configuration&amp;quot;, and &amp;quot;Messages&amp;quot; on the  &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI from vertically arranged to horizontal.&lt;br /&gt;
&lt;br /&gt;
*Changing the  words: Find the text you want to change in the XML code. The text will be surrounded by quotation marks and have &amp;lt;big&amp;gt; and &amp;lt;/big&amp;gt; on its sides. For example, &amp;lt;nowiki&amp;gt;line 258 &amp;quot;label text=&amp;quot;&amp;lt;big&amp;gt; Configuration Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt; controls the  text &amp;quot;Configuration Entry&amp;quot; on the &amp;quot;Enter Config and SE(3) Value&amp;quot; tab of the Custom UI. Change the words &amp;quot;Configuration Entry&amp;quot; to change the text displayed in that specific section.&lt;br /&gt;
&lt;br /&gt;
*Changing the font: Using line 258 &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;big&amp;gt;Configuration  Entry:&amp;lt;/big&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
**The font can be changed to small  using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;small&amp;gt;Configuration Entry:&amp;lt;/small&amp;gt;&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
** The font can be changed to a specific size using: &amp;lt;nowiki&amp;gt;label text=&amp;quot;&amp;lt;font size=20&amp;gt;Configuration Entry:&amp;lt;/font&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;quot;, where 20 is the desired font size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Your submission should be a screenshot of the original scene and then a screenshot that shows what was changed. Additionally, you should include a screenshot of the code you modified. For example, if you change the font size of the text in the Custom UI, you would include a screenshot of the Custom UI before any changes were made, a screenshot of the Custom UI with the font size change, and a screenshot of the XML code where you made the modification.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You should use the screenshot command appropriate for your operating system:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Mac&#039;&#039;: Cmd-Shift-3 and look for the screenshot on your desktop.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Windows&#039;&#039;: Use the PrtScn button (or Windows Key + PrtScn or Alt _ PrtScn, etc.). You can also search for the Snipping Tool.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Linux&#039;&#039;: you can use Screenshot or PrtScrn.&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Getting_Started_with_the_CoppeliaSim_Simulator&amp;diff=25867</id>
		<title>Getting Started with the CoppeliaSim Simulator</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Getting_Started_with_the_CoppeliaSim_Simulator&amp;diff=25867"/>
		<updated>2020-09-17T23:13:18Z</updated>

		<summary type="html">&lt;p&gt;Baris: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Now that you have the [https://github.com/NxRLab/ModernRobotics  MR code library], you need the cross-platform CoppeliaSim robot simulator (formerly known as V-REP) to allow you to visualize the motions of robots. &#039;&#039;&#039;You should complete the items on this page before moving on with the rest of the course!&#039;&#039;&#039;  Click on any of the images to make them larger.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note 1:  CoppeliaSim is computationally intensive.  To minimize power usage, make sure to &amp;quot;pause&amp;quot; or &amp;quot;stop&amp;quot; a simulation when you are not using it.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note 2:  CoppeliaSim evolved from V-REP, which was discontinued in late November, 2019.  CoppeliaSim is backward compatible with V-REP simulation scenes.  If you have difficulty installing or running CoppeliaSim, and you can&#039;t find answers to your questions on [http://forum.coppeliarobotics.com/ Coppelia&#039;s forums], you may use any version of V-REP from version 3.4 or later.  Any of these is fine for Modern Robotics simulations.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note 3:  In Modern Robotics, we use a number of CoppeliaSim&#039;s features for features, but you will not become an expert user of CoppeliaSim.  For those who would like to learn more, you can check out [https://www.youtube.com/watch?v=PwGY8PxQOXY&amp;amp;list=PLjzuoBhdtaXOoqkJUqhYQletLLnJP8vjZ this YouTube playlist of videos].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039;  Go to [http://www.coppeliarobotics.com/ http://www.coppeliarobotics.com/] and download and install the free CoppeliaSim edu software for your operating system.  If you are having trouble installing, you can look for help on the [http://www.coppeliarobotics.com/resources Coppelia site], read recommendations from other students on the Coursera week 1 discussion forum regarding CoppeliaSim, or even use an earlier version of the software, known as V-REP (version 3.4 or later).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039;  Launch CoppeliaSim. On Linux the startup script is coppeliaSim.sh, which you can execute with the command ./coppeliaSim.sh when you are in the directory with the script.  On a Mac, if the app crashes on startup, you may have to run &lt;br /&gt;
&lt;br /&gt;
 sudo xattr -r -d com.apple.quarantine *&lt;br /&gt;
&lt;br /&gt;
in Terminal in the directory where the coppeliaSim app is. &lt;br /&gt;
&lt;br /&gt;
If you have any troubles, please check out the [http://www.coppeliarobotics.com/resources Coppelia resources] and particularly the [http://forum.coppeliarobotics.com/ forums].&lt;br /&gt;
&lt;br /&gt;
Experiment with CoppeliaSim. I suggest you choose File &amp;gt; Open scene... and open one of the example &amp;quot;scenes&amp;quot; that comes with the software. CoppeliaSim &amp;quot;scenes&amp;quot; are specifications of environments, robots, and their actions, and when you press the &amp;quot;play&amp;quot; button the simulation begins. Experimenting with these scenes will show you some of the capabilities of CoppeliaSim. For example, you could choose the &amp;quot;motionPlanningAndGrasping.ttt&amp;quot; scene, as shown in the image below. (All scene files end in .ttt.)&lt;br /&gt;
&lt;br /&gt;
[[image:VREP-demo-open.png|700px]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Important note regarding screen resolution:&#039;&#039;&#039;  If you find the text and graphics to be too small on a high-resolution screen, you can follow these steps on Windows:&lt;br /&gt;
: 1- Right-click on the CoppeliaSim Application exe(probable location: C:\Program Files\CoppeliaRobotics\CoppeliaSimEdu) and click Properties&lt;br /&gt;
&lt;br /&gt;
: 2- Go under Compatibility Tab&lt;br /&gt;
&lt;br /&gt;
: 3- Click &amp;quot;Change high DPI settings&amp;quot;&lt;br /&gt;
&lt;br /&gt;
: 4- Check the box &amp;quot;Override high DPI scaling behavior&amp;quot;&lt;br /&gt;
&lt;br /&gt;
: 5- Scaling Performed by --&amp;gt; Choose &amp;quot;System&amp;quot;&lt;br /&gt;
&lt;br /&gt;
: You can also edit the file &amp;quot;system/usrset.txt&amp;quot; to change the value of the variable &amp;quot;highResDisplay&amp;quot; to 1.  On the Mac, this file is hidden in the directory &amp;quot;coppeliaSim.app&amp;quot; (the application you double-click to execute CoppeliaSim).  You can see the contents of this directory using the Terminal utility on your Mac.  In Terminal, use &amp;quot;cd&amp;quot; to navigate to the folder where coppeliaSim.app is, then cd to the directory &amp;quot;Contents/MacOS/system&amp;quot; to see usrset.txt.  (Another way to see the contents of the coppeliaSim package on a Mac is to control-click on the coppeliaSim app in Finder, choose &amp;quot;Show Package Contents,&amp;quot; and navigate to the MacOS/system directory to see usrset.txt.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; Press the &amp;quot;Play&amp;quot; button at the top of the window to see the robots executing motion plans.&lt;br /&gt;
&lt;br /&gt;
[[image:VREP-motion-planning.png|700px]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; We will be using several custom scenes in this specialization. You should download the .zip folder from [[CoppeliaSim Introduction]] and unzip it. The scenes include: interactive UR5 (Scene 1), csv animation UR5 (Scene 2), interactive youBot (Scene 3), and csv animation youBot (Scene 4). The Universal Robots UR5 is a 6-joint robot arm and the KUKA youBot is a mobile manipulator consisting of a 5-joint robot arm mounted on an omnidirectional robot base with 4 mecanum wheels. &amp;quot;Interactive&amp;quot; means that you can move sliders that represent the joint positions of the robot, and you&#039;ll see the robot move in response. &amp;quot;csv animation&amp;quot; means that the scene expects you to provide a &amp;quot;comma-separated values&amp;quot; (csv) file. A row of the file is a set of joint values, separated by commas, corresponding to the configuration of the robot at a particular instant. Subsequent rows are the configuration of the robot at later times, and the csv file is played as an animation by CoppeliaSim.&lt;br /&gt;
&lt;br /&gt;
Included in the .zip folder are the scene files themselves as well as example input files for some of the scenes.  You should make sure your unzipped folder is in a convenient, memorable location on your computer, as you will have to type in the full path to the input files when you use them in the CoppeliaSim scenes that require them.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; If you currently have a simulation running in CoppeliaSim, press the &amp;quot;Stop&amp;quot; button to stop it. Then choose File &amp;gt; Open scene... and open the interactive UR5 scene (Scene1_UR5.ttt) you downloaded. Press the &amp;quot;Play&amp;quot; button, choose the &amp;quot;Joint Angle Sliders&amp;quot; tab, and experiment with moving the sliders to see how the joints move.&lt;br /&gt;
&lt;br /&gt;
[[image:vrep-im3.jpg|700px]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6.&#039;&#039;&#039; Press the &amp;quot;Stop&amp;quot; button and open and run (press &amp;quot;Play&amp;quot;) the youBot csv animation scene (Scene4_youBot_csv.ttt). Load the example .csv file for the youBot. You will have to provide the full path to the file; in the example on the Mac below, the path is &amp;quot;/Users/kevin/V-REP_scenes/Scene4_example.csv&amp;quot;. After clicking &amp;quot;Open File,&amp;quot; press the &amp;quot;Play&amp;quot; button just below where you entered the file path. You should see the mobile robot continually executing the trajectory encoded in the .csv file.&lt;br /&gt;
&lt;br /&gt;
[[image:vrep-im4.png|700px]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first line of the .csv file is&lt;br /&gt;
&lt;br /&gt;
0,-0.526,0,0,-0.785,0.785,-1.571,0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
where the comma-separated values represent:  phi angle of mobile robot base, x position of mobile robot base, y position of mobile robot base, joint1, joint2, joint3, joint4, joint5, wheel1, wheel2, wheel3, wheel4. The angles of the wheels are included so you can see the wheels rotating as the robot moves.&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Important note regarding csv file format:&#039;&#039;&#039;  The example csv files included for use with the csv scenes assume that periods, not commas, are used as decimal points.  So pi is written as 3.14, not as 3,14.  If you are using Linux and your region settings are set to a region that uses commas as the decimal separator, one solution, suggested by a Coursera student, is to invoke CoppeliaSim using US English settings:&lt;br /&gt;
 LC_NUMERIC=en_US.UTF-8 ./coppeliaSim.sh&lt;br /&gt;
: Another option, also suggested by a Coursera student, is to open your Linux &amp;quot;System Settings&amp;quot; -&amp;gt; &amp;quot;Language support&amp;quot; -&amp;gt; &amp;quot;Regional Formats&amp;quot; tab. After changing the region to &amp;quot;English (United States)&amp;quot;, log out and back in for the change to take effect.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7.&#039;&#039;&#039; During this specialization, you will have to generate videos of CoppeliaSim visualizations. We have found it easiest to use screenshot-video tools for your operating system. On the Mac, you can use Quicktime to record videos from the screen. On Linux, you can use [http://www.maartenbaert.be/simplescreenrecorder/ SimpleScreenRecorder] or [http://recordmydesktop.sourceforge.net/about.php recordMyDesktop], for example. On Windows, you can use [https://icecreamapps.com/Screen-Recorder/ Screen Recorder].&lt;br /&gt;
&lt;br /&gt;
CoppeliaSim provides its own tool, which you can find at Tools&amp;gt;Video recorder. You may need to stop the current scene to be able to configure the video recorder. You can find more information on recording CoppeliaSim movies here: [http://www.coppeliarobotics.com/helpFiles/en/aviRecorder.htm http://www.coppeliarobotics.com/helpFiles/en/aviRecorder.htm].&lt;br /&gt;
&lt;br /&gt;
According to one Coursera student who initially had trouble with CoppeliaSim&#039;s video recorder:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I had an issue with integrated video recording. The error was &amp;quot;The video compressor failed initializing.&amp;quot; It was resolved by switching output format from default &amp;quot;AVI/H.263+ / H-263-1998 / H.263 version 2&amp;quot; to &amp;quot;AVI/MPEG-4 part 2&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Try recording and saving a 10-second movie of the youBot animating the example .csv file. Your video should be of reasonable quality, but the compression should be such that the video doesn&#039;t use too much memory. For example, a few MB is a reasonably-sized short video.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When you&#039;re finished with the tasks above...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Congratulations!&#039;&#039;&#039; Your MR code library and the CoppeliaSim simulator are ready to use. Do not move on to the rest of the course until these are working for you.&lt;br /&gt;
&lt;br /&gt;
In this specialization we will mostly be using CoppeliaSim to visualize the motion of robot arms and wheeled mobile robots.  For example, we use CoppeliaSim to animate your solutions to inverse kinematics, to display the dynamic motion of a robot arm according to dynamics calculations that you will write, to animate the results of path planners you develop, and to simulate a mobile manipulator manipulating an object.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Modern Robotics&#039;&#039;&#039; specialization does not teach how to use CoppeliaSim in detail, and it uses only a small fraction of CoppeliaSim&#039;s capabilities.  If you want to learn more, you can find links to documentation &#039;&#039;&#039;[[CoppeliaSim Introduction#Useful_Resources|at the bottom of this page]].&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Baris</name></author>
	</entry>
</feed>